29
28
public class ArcPath implements Shape {
31
30
private GeneralPath path = new GeneralPath();
32
private List<ArcPathPoint> pathPoints = new ArrayList<ArcPathPoint>();
31
private final List<ArcPathPoint> pathPoints = new ArrayList<ArcPathPoint>();
32
private final Arc myArc;
34
33
private boolean pointLock = false;
35
private static Stroke proximityStroke = new BasicStroke(Pipe.ARC_PATH_PROXIMITY_WIDTH);
36
private static Stroke stroke = new BasicStroke(Pipe.ARC_PATH_SELECTION_WIDTH);
34
private static final Stroke proximityStroke = new BasicStroke(Pipe.ARC_PATH_PROXIMITY_WIDTH);
35
private static final Stroke stroke = new BasicStroke(Pipe.ARC_PATH_SELECTION_WIDTH);
37
36
private Shape shape, proximityShape;
38
37
private int transitionAngle;
39
38
private final static boolean showDebugCurvedControlPoints = false;
115
114
//Calculate the arc mid-point for lable placement
116
115
if (getEndIndex() < 2) {
117
116
midPoint.x = (((pathPoints.get(0)).getPoint().x + (pathPoints.get(1)).getPoint().x) * 0.5);
118
midPoint.y = (((pathPoints.get(0)).getPoint().y + (pathPoints
119
.get(1)).getPoint().y) * 0.5);
117
midPoint.y = (((pathPoints.get(0)).getPoint().y + (pathPoints.get(1)).getPoint().y) * 0.5);
122
120
double percent = 0;
135
133
ArcPathPoint previousPoint = pathPoints.get(c - 1);
136
134
midPoint.x = previousPoint.getPoint().x + ((currentPoint.getPoint().x - previousPoint.getPoint().x) * percent);
137
midPoint.y = previousPoint.getPoint().y
138
+ ((currentPoint.getPoint().y - previousPoint.getPoint().y) * percent);
135
midPoint.y = previousPoint.getPoint().y + ((currentPoint.getPoint().y - previousPoint.getPoint().y) * percent);
141
138
shape = stroke.createStrokedShape(this);
306
303
} else if (source instanceof Transition && (pathPoints.get(1)).getPointType()) {
307
304
ArcPathPoint myPoint = pathPoints.get(1);
308
305
ArcPathPoint myLastPoint = pathPoints.get(0);
309
double distance = getMod(myPoint.getPoint(), myLastPoint.getPoint())
310
/ Pipe.ARC_CONTROL_POINT_CONSTANT;
311
myPoint.setControl1((myLastPoint.getPoint().x + Math
313
* distance), (myLastPoint.getPoint().y + Math
306
double distance = getMod(myPoint.getPoint(), myLastPoint.getPoint()) / Pipe.ARC_CONTROL_POINT_CONSTANT;
308
(myLastPoint.getPoint().x + Math.cos(anAngle) * distance),
309
(myLastPoint.getPoint().y + Math.sin(anAngle) * distance)
317
312
myPoint = pathPoints.get(getEndIndex());
318
313
myPoint.setControl2(getControlPoint(myPoint.getPoint(), myPoint.getControl1(), myPoint.getPoint(), myPoint.getControl1()));
319
314
} else if (target != null && source instanceof Place && (pathPoints.get(getEndIndex())).getPointType()) {
320
315
ArcPathPoint myPoint = pathPoints.get(getEndIndex());
321
316
ArcPathPoint myLastPoint = pathPoints.get(getEndIndex() - 1);
322
double distance = getMod(myPoint.getPoint(), myLastPoint.getPoint())
323
/ Pipe.ARC_CONTROL_POINT_CONSTANT;
324
myPoint.setControl2((myPoint.getPoint().x + Math
326
* distance), (myPoint.getPoint().y + Math
317
double distance = getMod(myPoint.getPoint(), myLastPoint.getPoint()) / Pipe.ARC_CONTROL_POINT_CONSTANT;
319
(myPoint.getPoint().x + Math.cos(anAngle) * distance),
320
(myPoint.getPoint().y + Math.sin(anAngle) * distance)
330
323
myPoint = pathPoints.get(1);
331
324
myPoint.setControl1(getControlPoint(
338
331
public void addPoint(int index, double x, double y, boolean type) {
339
pathPoints.add(index, new ArcPathPoint(x, y, type, this));
332
var arcpath = new ArcPathPoint(x, y, type, this);
335
arcpath.zoomUpdate(myArc.getZoom());
337
pathPoints.add(index, arcpath);
342
340
public void addPoint(double x, double y, boolean type) {
343
pathPoints.add(new ArcPathPoint(x, y, type, this));
341
var arcpath = new ArcPathPoint(x, y, type, this);
343
//XXX: we set zoom here, it might be a prototype
345
arcpath.zoomUpdate(myArc.getZoom());
347
pathPoints.add(arcpath);
347
351
public void addPoint() {
348
352
pathPoints.add(new ArcPathPoint(this));
434
438
public double getEndAngle() {
435
439
if (getEndIndex() > 0) {
436
440
if (getArc().getTarget() instanceof Transition) {
437
return (pathPoints.get(getEndIndex())).getAngle(((pathPoints
438
.get(getEndIndex()))).getControl2());
441
return (pathPoints.get(getEndIndex())).getAngle(((pathPoints.get(getEndIndex()))).getControl2());
440
return (pathPoints.get(getEndIndex())).getAngle(((pathPoints
441
.get(getEndIndex()))).getControl1());
443
return (pathPoints.get(getEndIndex())).getAngle(((pathPoints.get(getEndIndex()))).getControl1());
611
612
insertPoint(wantedpoint + 1, newPoint);
613
614
myArc.updateArcPosition();
615
617
return new AddArcPathPointEdit(this.getArc(), newPoint, getArc().getGuiModel());