- return new Rectangle2D.Double(left / scale, top / scale, width / scale, height / scale);
+ return bounds;
+ }
+
+ private void updateBounds() {
+ Rectangle2D oldBounds = bounds;
+ if (oldBounds == null)
+ oldBounds = new Rectangle2D.Double();
+ bounds = calculateBounds(oldBounds);
+ }
+
+ @Override
+ public void setTransform(AffineTransform transform) {
+ super.setTransform(transform);
+ // Update bounds
+ updateBounds();
+ }
+
+ @Override
+ public AffineTransform getTransform() {
+ return super.getTransform();
+ }
+
+ private Rectangle2D calculateBounds(Rectangle2D rect) {
+ Point2D calcPoint = calculatePoint2D(vertex);
+ AffineTransform at = getTransform();
+ return new Rectangle2D.Double(calcPoint.getX(), calcPoint.getY(), width / at.getScaleX(), height / at.getScaleY()).getBounds2D();
+ }
+
+ private static Point2D calculatePoint2D(DistrictNetworkVertex vertex) {
+ Point2D point= vertex.getPoint();
+ double x = ModelledCRS.longitudeToX(point.getX());
+ double y = ModelledCRS.latitudeToY(-point.getY()); // Inverse because Simantics Diagram is inverted
+
+ // Apply the scaling
+ Point2D res = new Point2D.Double(x, y);
+ return res;