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=a206ff20631f652d4d40c6da20284ee2c053037f;hp=86c71857f16a860d93498bcf534c70f0d5239f7a;hpb=1bc60c2213f9b3fc7b4d935ba9afda2b767290e5;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 86c71857..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 @@ -6,8 +6,10 @@ import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.Stroke; import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; +import org.simantics.district.network.ModelledCRS; import org.simantics.district.network.ui.adapters.DistrictNetworkVertex; import org.simantics.scenegraph.g2d.G2DNode; import org.simantics.scenegraph.utils.GeometryUtils; @@ -35,6 +37,8 @@ public class DistrictNetworkVertexNode extends G2DNode { private Color color; + private Rectangle2D bounds; + @Override public void init() { setZIndex(2); @@ -66,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); @@ -85,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) {