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%2FNetworkDrawingNode.java;h=e54e5308e5a5e094d733c3e317bd04c096d0b7e7;hb=refs%2Fchanges%2F49%2F3649%2F1;hp=35d76289b0ab000f18e36566e55e355c3c2a9042;hpb=20848dd42c49e0b0d3c20938dec5c1712bada636;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/NetworkDrawingNode.java b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/NetworkDrawingNode.java index 35d76289..e54e5308 100644 --- a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/NetworkDrawingNode.java +++ b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/NetworkDrawingNode.java @@ -21,10 +21,10 @@ import org.simantics.db.exception.DatabaseException; import org.simantics.db.request.Write; import org.simantics.diagram.elements.DiagramNodeUtil; import org.simantics.diagram.ui.DiagramModelHints; +import org.simantics.district.network.DNEdgeBuilder; import org.simantics.district.network.DistrictNetworkUtil; import org.simantics.district.network.ModelledCRS; import org.simantics.district.network.ontology.DistrictNetworkResource; -import org.simantics.district.network.ui.DNEdgeBuilder; import org.simantics.district.network.ui.NetworkDrawingParticipant; import org.simantics.g2d.canvas.Hints; import org.simantics.g2d.canvas.ICanvasContext; @@ -40,9 +40,13 @@ import org.simantics.scenegraph.g2d.events.MouseEvent.MouseMovedEvent; import org.simantics.scenegraph.utils.GeometryUtils; import org.simantics.scenegraph.utils.NodeUtil; import org.simantics.utils.threads.ThreadUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class NetworkDrawingNode extends G2DNode { + private static final Logger LOGGER = LoggerFactory.getLogger(NetworkDrawingNode.class); + static class DrawingNode { private List routeNodes = new ArrayList<>(); @@ -70,7 +74,8 @@ public class NetworkDrawingNode extends G2DNode { private static final Color RED_ALPHA = new Color(255, 0, 0, 100); private boolean scaleStroke = true; - + private AffineTransform lastViewTransform = new AffineTransform(); + @Override public void init() { super.init(); @@ -90,6 +95,9 @@ public class NetworkDrawingNode extends G2DNode { @Override public void render(Graphics2D g2d) { + // Must store this for hover info functionality + lastViewTransform = g2d.getTransform(); + if (nodes.isEmpty()) return; @@ -183,7 +191,7 @@ public class NetworkDrawingNode extends G2DNode { if (mapping == null) { mapping = graph.getSingleObject(diagramResource, DistrictNetworkResource.getInstance(graph).VertexDefaultMapping); } - DistrictNetworkUtil.createVertex(graph, diagramResource, new double[] { x, y }, 0, mapping); // TODO: elevation can be fetched from e.g. elevation API + DistrictNetworkUtil.createVertex(graph, diagramResource, new double[] { x, y }, Double.MAX_VALUE, mapping); } }); }, 100, TimeUnit.MILLISECONDS); @@ -234,16 +242,16 @@ public class NetworkDrawingNode extends G2DNode { detailedGeometryCoords[i++] = lon; detailedGeometryCoords[i++] = lat; } - + DNEdgeBuilder builder = new DNEdgeBuilder(diagramResource, diagram); Simantics.getSession().asyncRequest(new WriteRequest() { - + @Override public void perform(WriteGraph graph) throws DatabaseException { - builder.create(graph, startCoords, 0, endCoords, 0, detailedGeometryCoords, padding); + builder.create(graph, startCoords, Double.MAX_VALUE, endCoords, Double.MAX_VALUE, detailedGeometryCoords, padding); } }); - + } @Override @@ -280,7 +288,7 @@ public class NetworkDrawingNode extends G2DNode { } private boolean canStartEdge(Point2D currentPos) { - return participant.isHoveringOverNode(currentPos); + return participant.isHoveringOverNode(currentPos, lastViewTransform); } private IToolMode getToolMode() { @@ -293,12 +301,12 @@ public class NetworkDrawingNode extends G2DNode { boolean repaint = false; Point2D p = NodeUtil.worldToLocal(this, e.controlPosition, new Point2D.Double()); boolean isConnectionTool = mode == Hints.CONNECTTOOL || e.hasAnyModifier(MouseEvent.ALT_MASK | MouseEvent.ALT_GRAPH_MASK); - if (participant.pickHoveredElement(p, isConnectionTool)) { + // To boost pan perf hovering is only considered if no mouse button is pressed) + if (e.buttons == 0 && participant.pickHoveredElement(p, isConnectionTool, lastViewTransform)) { repaint = true; } if (!nodes.isEmpty()) { currentMousePos = p; - repaint(); return true; } @@ -307,7 +315,7 @@ public class NetworkDrawingNode extends G2DNode { repaint(); return super.mouseMoved(e); } - + @Override protected boolean keyPressed(KeyPressedEvent e) { if (e.keyCode == java.awt.event.KeyEvent.VK_ESCAPE) { @@ -317,6 +325,5 @@ public class NetworkDrawingNode extends G2DNode { return true; } return super.keyPressed(e); - } } \ No newline at end of file