]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network/src/org/simantics/district/network/DNEdgeBuilder.java
Make it possible to import CSV data via SCL & create models
[simantics/district.git] / org.simantics.district.network / src / org / simantics / district / network / DNEdgeBuilder.java
similarity index 92%
rename from org.simantics.district.network.ui/src/org/simantics/district/network/ui/DNEdgeBuilder.java
rename to org.simantics.district.network/src/org/simantics/district/network/DNEdgeBuilder.java
index b937ed2a7bdcfacec77dd8839ee202a10bf0f9a4..3f86964951184e3300eb789c388d41776942280f 100644 (file)
@@ -1,4 +1,4 @@
-package org.simantics.district.network.ui;
+package org.simantics.district.network;
 
 import java.awt.geom.Rectangle2D;
 import java.util.Collection;
@@ -19,7 +19,7 @@ import org.simantics.diagram.synchronization.IModifiableSynchronizationContext;
 import org.simantics.diagram.synchronization.SynchronizationHints;
 import org.simantics.diagram.synchronization.graph.GraphSynchronizationHints;
 import org.simantics.diagram.synchronization.graph.layer.GraphLayerManager;
-import org.simantics.district.network.DistrictNetworkUtil;
+import org.simantics.district.network.DistrictNetworkUtil.ResourceVertex;
 import org.simantics.district.network.ontology.DistrictNetworkResource;
 import org.simantics.g2d.diagram.IDiagram;
 import org.simantics.layer0.Layer0;
@@ -66,8 +66,8 @@ public class DNEdgeBuilder {
         DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
 
      // 2. Add vertices
-        Resource startVertex = getOrCreateVertex(graph, diagramResource, vertices, start, startElevation, padding);
-        Resource endVertex = getOrCreateVertex(graph, diagramResource, vertices, end, endElevation, padding);
+        Resource startVertex = getOrCreateVertex(graph, diagramResource, vertices, start, startElevation, padding, null);
+        Resource endVertex = getOrCreateVertex(graph, diagramResource, vertices, end, endElevation, padding, startVertex);
         if (startVertex.equals(endVertex)) {
             LOGGER.info("Circular edges are not supported, startVertex: {}, endVertex: {}", startVertex, endVertex);
             return Optional.empty();
@@ -122,7 +122,7 @@ public class DNEdgeBuilder {
         glm.putElementOnVisibleLayers(diagram, graph, res);
     }
 
-    private static Resource getOrCreateVertex(WriteGraph graph, Resource diagramResource, Quadtree qtree, double[] coords, double elevation, double padding) throws DatabaseException {
+    private static Resource getOrCreateVertex(WriteGraph graph, Resource diagramResource, Quadtree qtree, double[] coords, double elevation, double padding, Resource startVertex) throws DatabaseException {
         Resource vertex = null;
         double halfPadding = padding / 2;
         double maxDistance = Double.MAX_VALUE;
@@ -140,7 +140,7 @@ public class DNEdgeBuilder {
             Rectangle2D tobecreated = new Rectangle2D.Double(x1, y1, padding, padding);
             if (existing.intersects(tobecreated)) {
                 double dist = Math.sqrt((Math.pow(coords[0] - vertx.coords[0], 2) + (Math.pow(coords[1] - vertx.coords[1], 2))));
-                if (dist <= maxDistance) {
+                if (dist <= maxDistance && vertx.vertex != startVertex) {
                     vertex = vertx.vertex;
                     maxDistance = dist;
                 }
@@ -157,16 +157,4 @@ public class DNEdgeBuilder {
         return DistrictNetworkUtil.createEdge(graph, diagramResource, mapping, detailedGeometryCoords);
     }
 
-    public static class ResourceVertex {
-        
-        final boolean isConsumer;
-        final Resource vertex;
-        final double[] coords;
-        
-        public ResourceVertex(Resource vertex, double[] coords, boolean isConsumer) {
-            this.vertex = vertex;
-            this.coords = coords;
-            this.isConsumer = isConsumer;
-        }
-    }
 }