X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.district.network%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fnetwork%2FDistrictNetworkUtil.java;h=94799a97382e57a23a31b404f64e785f7d751245;hb=55f42e7fcc2f6733082ab8c150efe3a2b54ff22b;hp=9bdec1b590367107660947593d32e122d6cddf98;hpb=5750b5736279abe0d3e310b2da4fc1be3ffa0004;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.network/src/org/simantics/district/network/DistrictNetworkUtil.java b/org.simantics.district.network/src/org/simantics/district/network/DistrictNetworkUtil.java index 9bdec1b5..94799a97 100644 --- a/org.simantics.district.network/src/org/simantics/district/network/DistrictNetworkUtil.java +++ b/org.simantics.district.network/src/org/simantics/district/network/DistrictNetworkUtil.java @@ -3,11 +3,12 @@ package org.simantics.district.network; import java.util.Collection; import java.util.Iterator; +import org.simantics.databoard.Bindings; +import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.WriteGraph; import org.simantics.db.common.utils.OrderedSetUtils; import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.util.RemoverUtil; import org.simantics.diagram.stubs.DiagramResource; import org.simantics.district.network.ontology.DistrictNetworkResource; import org.simantics.layer0.Layer0; @@ -20,6 +21,10 @@ public class DistrictNetworkUtil { Resource edge = graph.newResource(); graph.claim(edge, L0.InstanceOf, DN.Edge); + + Resource defaultEdgeMapping = graph.getPossibleObject(composite, DN.EdgeDefaultMapping); + graph.claim(edge, DN.HasMapping, defaultEdgeMapping); + OrderedSetUtils.add(graph, composite, edge); graph.claim(composite, L0.ConsistsOf, L0.PartOf, edge); return edge; @@ -32,6 +37,10 @@ public class DistrictNetworkUtil { Resource vertex = graph.newResource(); graph.claim(vertex, L0.InstanceOf, DN.Vertex); graph.claimLiteral(vertex, DIA.HasLocation, coords); + + Resource defaultVertexMapping = graph.getPossibleObject(composite, DN.VertexDefaultMapping); + graph.claim(vertex, DN.HasMapping, defaultVertexMapping); + OrderedSetUtils.add(graph, composite, vertex); graph.claim(composite, L0.ConsistsOf, L0.PartOf, vertex); @@ -61,4 +70,21 @@ public class DistrictNetworkUtil { } return master; } + + public static double calculateDistance(ReadGraph graph, Resource startVertex, Resource endVertex) throws DatabaseException { + Layer0 L0 = Layer0.getInstance(graph); + Resource startComposite = graph.getSingleObject(startVertex, L0.PartOf); + Resource endComposite = graph.getSingleObject(endVertex, L0.PartOf); + if (!startComposite.equalsResource(endComposite)) { + throw new DatabaseException("Can not calculate distance between vertices on different composites! " + startVertex + " -> " + endVertex); + } + Resource crs = graph.getSingleObject(startComposite, DistrictNetworkResource.getInstance(graph).HasSpatialRefSystem); + + CRS crsClass = graph.adapt(crs, CRS.class); + + double[] startCoords = graph.getRelatedValue2(startVertex, DiagramResource.getInstance(graph).HasLocation, Bindings.DOUBLE_ARRAY); + double[] endCoords = graph.getRelatedValue2(endVertex, DiagramResource.getInstance(graph).HasLocation, Bindings.DOUBLE_ARRAY); + + return crsClass.calculateDistance(startCoords, endCoords); + } }