summaryrefslogtreecommitdiff
path: root/bezierstroke.pde
blob: 2cb85de6e16af85351c9a0677e6509cfa60bf28b (plain)
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();
  }
}