16 }
17
18 double segmentLength = (Double)this.element.getClientProperty("segmentLength");
19 int count = (int)(length/segmentLength);
20 List points = TWaverUtil.divideShape(this.path, count);
21 if(points.size() < 2){
22 return;
23 }
24 int fillSegmentCount = (Integer)this.element.getClientProperty("fillSegmentCount");
25 double offset = (Double)this.element.getClientProperty("offset");
26 Color lineColor = (Color)this.element.getClientProperty("lineColor");
27 boolean from = (Boolean)this.element.getClientProperty("from");
28 boolean fromLeft = this.getFromPoint().x <= this.getToPoint().x;
29
30 g2d.setStroke(new BasicStroke((Float)this.element.getClientProperty("lineWidth")));
31 for(int i=0; i
32 Point2D point = (Point2D)points.get(i);
33 Point2D point1, point2;
34 double angle = 0;
35 if(i == points.size()-1){
36 point1 = (Point2D)points.get(i-1);
37 point2 = point;
38 } else {
39 point1 = point;
40 point2 = (Point2D)points.get(i+1);
41 }
42 angle = getAngle(point1, point2);
43 int sign = (fromLeft && from || !fromLeft && !from) -1 : 1;
44 if(angle == -Math.PI/2){
45 sign = point2.getY() > point1.getY() 1 : -1;
46 }else if(angle == Math.PI/2){
47 sign = point2.getY() > point1.getY() -1 : 1;
48 }
49 double alpha = (Double)this.element.getClientProperty("defaultAlpha");
50 if(offset * count >= i && offset * count - fillSegmentCount < = i){
52 }
53 g2d.setColor(new Color(lineColor.getRed(), lineColor.getGreen(), lineColor.getBlue(), (int)(255 * alpha)));
54
55 AffineTransform transform = new AffineTransform();
56 transform.translate(point.getX(), point.getY());
57 transform.rotate(angle);
58 transform.translate(-point.getX(), -point.getY());
59
60 Point2D p0 = new Point.Double();
61 transform.transform(point, p0);
62 Point2D p1 = new Point.Double();
63 transform.transform(new Point.Double(point.getX() + segmentLength/2 * sign, point.getY() - segmentLength/2), p1);
64 Point2D p2 = new Point.Double();
65 transform.transform(new Point.Double(point.getX() + segmentLength/2 * sign, point.getY() + segmentLength/2), p2);
66 GeneralPath path = new GeneralPath();
67 path.moveTo(p1.getX(), p1.getY());
68 path.lineTo(p0.getX(), p0.getY());
69 path.lineTo(p2.getX(), p2.getY());
70 g2d.draw(path);
71 }
72 }
73
74 private static double getAngle(Point2D p1, Point2D p2) {
75 if(p1.getX() == p2.getX()){
76 if(p2.getY() == p1.getY()){
77 return 0;
78 }
79 else if(p2.getY() > p1.getY()){
80 return Math.PI/2;
81 }
82 else{
83 return -Math.PI/2;
84 }
85 }
86 return Math.atan((p2.getY() - p1.ge