1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
import geomerative.*;
class bezierstroke {
float startsize,endsize,linewidth,mpfract,raisefract,bezierfract;
bezierstroke(float _s,float _e,float _l,float _m,float _r,float _b){
startsize=_s;
endsize=_e;
linewidth=_l;
mpfract=_m;
raisefract=_r;
bezierfract=_b;
}
void drawstroke(RPoint start,RPoint end) {
ellipse(start.x,start.y,startsize,startsize);
ellipse(end.x,end.y,endsize,endsize);
RPoint mp=new RPoint(start.x+((end.x-start.x)*mpfract),(start.y+((end.y-start.y)*mpfract))-((getHeight()-(start.y+((end.y-start.y)*mpfract)))*raisefract));
RPoint bv=new RPoint((end.x-start.x)*bezierfract,(end.y-start.y)*bezierfract);
RPoint b1=new RPoint(mp.x-bv.x,mp.y-bv.y);
RPoint b2=new RPoint(mp.x+bv.x,mp.y+bv.y);
beginShape();
vertex(start.x,start.y);
bezierVertex(start.x,start.y,b1.x,b1.y-(linewidth/2),mp.x,mp.y-(linewidth/2));
bezierVertex(b2.x,b2.y-(linewidth/2),end.x,end.y,end.x,end.y);
bezierVertex(end.x,end.y,b2.x,b2.y+(linewidth/2),mp.x,mp.y+(linewidth/2));
bezierVertex(b1.x,b1.y+(linewidth/2),start.x,start.y,start.x,start.y);
endShape();
}
}
|