-package org.simantics.district.network.ui;
+package org.simantics.district.network;
import java.awt.geom.Rectangle2D;
import java.util.Collection;
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;
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();
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;
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;
}
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;
- }
- }
}