]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/NetworkDrawingNode.java
Make vertices smaller on map UI & CSV import performance improvements
[simantics/district.git] / org.simantics.district.network.ui / src / org / simantics / district / network / ui / nodes / NetworkDrawingNode.java
index 13bd2cbe9426a536e9ce3b8030a0a4b0ca1b5158..b2121bf70128b358aada26990e75deae7a93b100 100644 (file)
@@ -4,6 +4,7 @@ import java.awt.BasicStroke;
 import java.awt.Color;
 import java.awt.Graphics2D;
 import java.awt.Stroke;
+import java.awt.geom.AffineTransform;
 import java.awt.geom.Path2D;
 import java.awt.geom.Point2D;
 import java.awt.geom.Rectangle2D;
@@ -16,11 +17,13 @@ import org.simantics.db.Resource;
 import org.simantics.db.WriteGraph;
 import org.simantics.db.common.request.WriteRequest;
 import org.simantics.db.exception.DatabaseException;
+import org.simantics.diagram.elements.DiagramNodeUtil;
 import org.simantics.diagram.ui.DiagramModelHints;
 import org.simantics.district.network.ModelledCRS;
 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;
 import org.simantics.g2d.canvas.IToolMode;
 import org.simantics.g2d.diagram.IDiagram;
 import org.simantics.scenegraph.g2d.G2DNode;
@@ -134,9 +137,13 @@ public class NetworkDrawingNode extends G2DNode {
             while (nodeIter.hasNext()) {
                 if (end == null) {
                     start = nodeIter.next();
+                    if (!nodeIter.hasNext()) {
+                        break;
+                    }
                 } else {
                     start = end;
                 }
+                
                 end = nodeIter.next();
                 
                 createEdge(start, end);
@@ -154,8 +161,14 @@ public class NetworkDrawingNode extends G2DNode {
 
     private void createEdge(Point2D start, Point2D end) {
         
-        double padding = GeometryUtils.getScale(getTransform());
-        
+        double currentPadding = DistrictNetworkVertexNode.width;
+        AffineTransform test = getTransform();
+        ICanvasContext ctx = DiagramNodeUtil.getCanvasContext(this);
+        AffineTransform tr = ctx.getHintStack().getHint(Hints.KEY_CANVAS_TRANSFORM);
+        AffineTransform testing = new AffineTransform(tr); 
+        testing.concatenate(test);
+        double calculateScaleRecip = DistrictNetworkNodeUtils.calculateScaleRecip(testing);
+        double padding = currentPadding * calculateScaleRecip;
         /*
          *  To convert y-coordinates to map coordinates in ruler, use:
          *    double val = (y-offsetY)/scaleY;
@@ -163,12 +176,14 @@ public class NetworkDrawingNode extends G2DNode {
          *    String str = formatValue(val);
          */
         // TODO: fix scale
-        double scale = 100000;
-        double startLat = ModelledCRS.yToLatitude(start.getY() / scale);
-        double startLon = ModelledCRS.xToLongitude(start.getX() / scale);
+        double scaleY = getTransform().getScaleY();
+        double scaleX = getTransform().getScaleX();
+        
+        double startLat = ModelledCRS.yToLatitude(-start.getY() / scaleY);
+        double startLon = ModelledCRS.xToLongitude(start.getX() / scaleX);
         
-        double endLat = ModelledCRS.yToLatitude(end.getY() / scale);
-        double endLon = ModelledCRS.xToLongitude(end.getX() / scale);
+        double endLat = ModelledCRS.yToLatitude(-end.getY() / scaleY);
+        double endLon = ModelledCRS.xToLongitude(end.getX() / scaleX);
         
         double[] startCoords = new double[] { startLon, startLat };
         double[] endCoords = new double[] { endLon, endLat };
@@ -178,7 +193,7 @@ public class NetworkDrawingNode extends G2DNode {
             
             @Override
             public void perform(WriteGraph graph) throws DatabaseException {
-                builder.create(graph, startCoords, endCoords, padding / scale);
+                builder.create(graph, startCoords, 0, endCoords, 0, padding);
             }
         });