From a63ce8fc104087bff2f9921931211f63f81ed048 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolaj=20=C3=98sterby=20Jensen?= Date: Fri, 15 Dec 2023 11:17:38 +0100 Subject: [PATCH] Update arc end points again due to mutual dependency --- .../java/pipe/gui/petrinet/graphicElements/Arc.java | 11 +++++++++-- .../gui/petrinet/graphicElements/ArcPathPoint.java | 2 +- .../java/pipe/gui/petrinet/graphicElements/Place.java | 8 ++++---- .../pipe/gui/petrinet/graphicElements/Transition.java | 4 ++-- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/main/java/pipe/gui/petrinet/graphicElements/Arc.java b/src/main/java/pipe/gui/petrinet/graphicElements/Arc.java index 4fd8ff97b..14fa1cc3a 100644 --- a/src/main/java/pipe/gui/petrinet/graphicElements/Arc.java +++ b/src/main/java/pipe/gui/petrinet/graphicElements/Arc.java @@ -202,12 +202,19 @@ public PlaceTransitionObject getTarget() { * the bounds */ public void updateArcPosition() { - if (source != null) { + // The positions of end points are mutually dependant, so we update both an extra time + if (target != null) { + target.updateEndPoint(this); + } + if (source != null) { source.updateEndPoint(this); } if (target != null) { target.updateEndPoint(this); } + if (source != null) { + source.updateEndPoint(this); + } myPath.createPath(); } @@ -291,7 +298,7 @@ public void paintComponent(Graphics g) { g2.translate(myPath.getPoint(myPath.getEndIndex()).getX(), myPath.getPoint(myPath.getEndIndex()).getY()); //Rotate to match arrowhead to arc angle - g2.rotate(myPath.getEndAngle() + Math.PI); + g2.rotate(-myPath.getEndAngle() - Math.PI/2); g2.setColor(java.awt.Color.WHITE); g2.transform(Zoomer.getTransform(getZoom())); diff --git a/src/main/java/pipe/gui/petrinet/graphicElements/ArcPathPoint.java b/src/main/java/pipe/gui/petrinet/graphicElements/ArcPathPoint.java index c9e00f713..28982dac4 100644 --- a/src/main/java/pipe/gui/petrinet/graphicElements/ArcPathPoint.java +++ b/src/main/java/pipe/gui/petrinet/graphicElements/ArcPathPoint.java @@ -157,7 +157,7 @@ public void setVisibilityLock(boolean lock) { public double getAngle(Point2D.Double p2) { double angle; - angle = Math.atan2( (getPoint().x - p2.x), (p2.y - getPoint().y) ); + angle = Math.atan2( (p2.y - getPoint().y), (getPoint().x - p2.x) ); return angle; } diff --git a/src/main/java/pipe/gui/petrinet/graphicElements/Place.java b/src/main/java/pipe/gui/petrinet/graphicElements/Place.java index c72f0571b..6de765fff 100644 --- a/src/main/java/pipe/gui/petrinet/graphicElements/Place.java +++ b/src/main/java/pipe/gui/petrinet/graphicElements/Place.java @@ -131,9 +131,9 @@ public void updateEndPoint(Arc arc) { + (getDiameter() * 0.5)); double angle = arc.getArcPath().getStartAngle(); arc.setSourceLocation(positionX + centreOffsetLeft() - - (0.5 * getDiameter() * (Math.sin(angle))), positionY + - (0.5 * getDiameter() * (Math.cos(angle))), positionY + centreOffsetTop() - + (0.5 * getDiameter() * (Math.cos(angle)))); + + (0.5 * getDiameter() * (Math.sin(angle)))); } else { // Make it calculate the angle from the centre of the place rather // than the current target point @@ -141,9 +141,9 @@ public void updateEndPoint(Arc arc) { + (getDiameter() * 0.5)); double angle = arc.getArcPath().getEndAngle(); arc.setTargetLocation(positionX + centreOffsetLeft() - - (0.5 * getDiameter() * (Math.sin(angle))), positionY + - (0.5 * getDiameter() * (Math.cos(angle))), positionY + centreOffsetTop() - + (0.5 * getDiameter() * (Math.cos(angle)))); + + (0.5 * getDiameter() * (Math.sin(angle)))); } } diff --git a/src/main/java/pipe/gui/petrinet/graphicElements/Transition.java b/src/main/java/pipe/gui/petrinet/graphicElements/Transition.java index a60cb36f9..d47b25242 100644 --- a/src/main/java/pipe/gui/petrinet/graphicElements/Transition.java +++ b/src/main/java/pipe/gui/petrinet/graphicElements/Transition.java @@ -274,7 +274,7 @@ public void updateEndPoints() { transform.concatenate(Zoomer.getTransform(getZoom())); arcIterator = top.iterator(); - transform.transform(new Point2D.Double(1, 0.5 * TRANSITION_HEIGHT), transformed); // +1 due to rounding making it off by 1 + transform.transform(new Point2D.Double(1, 0.5 * TRANSITION_HEIGHT), transformed); // 1 on x due to rounding error while (arcIterator.hasNext()) { ArcAngleCompare thisArc = arcIterator.next(); @@ -290,7 +290,7 @@ public void updateEndPoints() { } arcIterator = bottom.iterator(); - transform.transform(new Point2D.Double(0, -0.5 * TRANSITION_HEIGHT), transformed); + transform.transform(new Point2D.Double(-1, -0.5 * TRANSITION_HEIGHT), transformed); // -1 on x due to rounding error while (arcIterator.hasNext()) { ArcAngleCompare thisArc = arcIterator.next();