X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.district.network.ui%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fnetwork%2Fui%2Fnodes%2FDistrictNetworkVertexNode.java;h=011d682eb2a419f9dc7e02e4706e39c16850d24c;hb=00e4eca98cef6d77d5023f4b424f9e8da0487463;hp=e9d0713ddb2d4bb34758ad8e279cacae64308263;hpb=02ecca5e61d2eb17de40cc058be678b414aaad00;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/DistrictNetworkVertexNode.java b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/DistrictNetworkVertexNode.java index e9d0713d..011d682e 100644 --- a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/DistrictNetworkVertexNode.java +++ b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/DistrictNetworkVertexNode.java @@ -37,6 +37,8 @@ public class DistrictNetworkVertexNode extends G2DNode { private Color color; + private Rectangle2D bounds; + @Override public void init() { setZIndex(2); @@ -68,11 +70,14 @@ public class DistrictNetworkVertexNode extends G2DNode { } scaleRecip = 8.0 * scaleRecip; + // Translate lat and lon to X and Y + Point2D res = calculatePoint2D(vertex); + Rectangle2D toDraw; if (hover) { - toDraw = new Rectangle2D.Double(HOVERED.getX() * scaleRecip, HOVERED.getY() * scaleRecip, HOVERED.getWidth() * scaleRecip, HOVERED.getHeight() * scaleRecip); + toDraw = new Rectangle2D.Double(res.getX() - (HOVERED.getWidth() / 2 * scaleRecip), res.getY() - (HOVERED.getHeight() / 2 * scaleRecip), HOVERED.getWidth() * scaleRecip, HOVERED.getHeight() * scaleRecip); } else { - toDraw = new Rectangle2D.Double(NORMAL.getX() * scaleRecip, NORMAL.getY() * scaleRecip, NORMAL.getWidth() * scaleRecip, NORMAL.getHeight() * scaleRecip); + toDraw = new Rectangle2D.Double(res.getX() - (NORMAL.getWidth() / 2 * scaleRecip), res.getY() - (NORMAL.getHeight() / 2 * scaleRecip), NORMAL.getWidth() * scaleRecip, NORMAL.getHeight() * scaleRecip); } // render g2d.fill(toDraw); @@ -87,15 +92,49 @@ public class DistrictNetworkVertexNode extends G2DNode { g2d.setTransform(ot); } + @Override + public Rectangle2D getBounds() { + return super.getBounds(); + } + @Override public Rectangle2D getBoundsInLocal() { - if (hover) - return HOVERED; - return NORMAL; + 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(); + } + + private Rectangle2D calculateBounds(Rectangle2D rect) { + Point2D calcPoint = calculatePoint2D(vertex); + AffineTransform at = getTransform(); + return new Rectangle2D.Double(calcPoint.getX(), calcPoint.getY(), 1 / at.getScaleX(), 1 / 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()); + + // Apply the scaling + Point2D res = new Point2D.Double(x, y); + return res; } public void setVertex(DistrictNetworkVertex vertex) { this.vertex = vertex; + updateBounds(); } public boolean hover(boolean hover) {