]> 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 147442343c13b6b7c3dfa42ab04694757aa4f834..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,10 +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;
@@ -133,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);
@@ -150,20 +158,42 @@ public class NetworkDrawingNode extends G2DNode {
         }
         return super.mouseDoubleClicked(e);
     }
-    
+
     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;
+         *    val = Math.toDegrees(Math.atan(Math.sinh(Math.toRadians(val))));
+         *    String str = formatValue(val);
+         */
+        // TODO: fix 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() / scaleY);
+        double endLon = ModelledCRS.xToLongitude(end.getX() / scaleX);
         
-        double[] startCoords = new double[] { start.getX(), start.getY() };
-        double[] endCoords = new double[] { end.getX(), end.getY() };
+        double[] startCoords = new double[] { startLon, startLat };
+        double[] endCoords = new double[] { endLon, endLat };
         
         DNEdgeBuilder builder = new DNEdgeBuilder(diagramResource, diagram);
         Simantics.getSession().asyncRequest(new WriteRequest() {
             
             @Override
             public void perform(WriteGraph graph) throws DatabaseException {
-                builder.create(graph, startCoords, endCoords, padding);
+                builder.create(graph, startCoords, 0, endCoords, 0, padding);
             }
         });