]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/NetworkDrawingNode.java
Fixed regressions in box selection and element color function validation
[simantics/district.git] / org.simantics.district.network.ui / src / org / simantics / district / network / ui / nodes / NetworkDrawingNode.java
index 147442343c13b6b7c3dfa42ab04694757aa4f834..71ccb781a1f1a0b0bf74df1d14430a5937a6e6db 100644 (file)
@@ -17,6 +17,7 @@ import org.simantics.db.WriteGraph;
 import org.simantics.db.common.request.WriteRequest;
 import org.simantics.db.exception.DatabaseException;
 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;
@@ -133,9 +134,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 +155,36 @@ public class NetworkDrawingNode extends G2DNode {
         }
         return super.mouseDoubleClicked(e);
     }
-    
+
     private void createEdge(Point2D start, Point2D end) {
         
         double padding = GeometryUtils.getScale(getTransform());
         
-        double[] startCoords = new double[] { start.getX(), start.getY() };
-        double[] endCoords = new double[] { end.getX(), end.getY() };
+        /*
+         *  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[] { 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, endCoords, 1 / padding);
             }
         });