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=2bb29660930b82c9a30e010a118538fe73230c96;hb=a82b2ac2e9ed26debc90ed024360283af449d761;hp=6a7b453799f725c15e56b5d43d9e0ba5782aafcc;hpb=e764d663bb48dbc4ce86ca5d90c80167d30338a8;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 6a7b4537..2bb29660 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,14 +3,12 @@ package org.simantics.district.network; import java.awt.geom.Rectangle2D; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; +import org.simantics.Simantics; import org.simantics.databoard.Bindings; import org.simantics.datatypes.literal.RGB; import org.simantics.datatypes.literal.RGB.Integer; @@ -18,7 +16,9 @@ import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.WriteGraph; import org.simantics.db.common.procedure.adapter.TransientCacheListener; +import org.simantics.db.common.request.BinaryRead; import org.simantics.db.common.request.IndexRoot; +import org.simantics.db.common.request.ObjectsWithType; import org.simantics.db.common.request.ResourceRead; import org.simantics.db.common.utils.OrderedSetUtils; import org.simantics.db.exception.BindingException; @@ -33,27 +33,18 @@ import org.simantics.diagram.synchronization.graph.DiagramGraphUtil; import org.simantics.diagram.synchronization.graph.layer.GraphLayer; import org.simantics.diagram.synchronization.graph.layer.IGraphLayerUtil; import org.simantics.district.network.ontology.DistrictNetworkResource; -import org.simantics.district.network.visualisations.DynamicVisualisationsContributions; -import org.simantics.district.network.visualisations.model.ColorBarOptions; -import org.simantics.district.network.visualisations.model.ColorBarOptions.ColorBarsLocation; -import org.simantics.district.network.visualisations.model.ColorBarOptions.ColorBarsSize; -import org.simantics.district.network.visualisations.model.DynamicColorContribution; -import org.simantics.district.network.visualisations.model.DynamicColorMap; -import org.simantics.district.network.visualisations.model.DynamicSizeContribution; -import org.simantics.district.network.visualisations.model.DynamicSizeMap; -import org.simantics.district.network.visualisations.model.SizeBarOptions; -import org.simantics.district.network.visualisations.model.SizeBarOptions.SizeBarsLocation; -import org.simantics.district.network.visualisations.model.SizeBarOptions.SizeBarsSize; import org.simantics.layer0.Layer0; import org.simantics.maps.elevation.server.SingletonTiffTileInterface; import org.simantics.maps.elevation.server.prefs.MapsElevationServerPreferences; import org.simantics.modeling.ModelingResources; import org.simantics.modeling.adapters.NewCompositeActionFactory; import org.simantics.operation.Layer0X; -import org.simantics.utils.datastructures.Pair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.vividsolutions.jts.geom.Envelope; +import com.vividsolutions.jts.index.quadtree.Quadtree; + public class DistrictNetworkUtil { private static final Logger LOGGER = LoggerFactory.getLogger(DistrictNetworkUtil.class); @@ -402,190 +393,77 @@ public class DistrictNetworkUtil { return results; } - public static ColorBarOptions colorBarOptions(ReadGraph graph, Resource visualisation) throws DatabaseException { - DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph); - if (visualisation != null) { - String colorBarLocation = graph.getPossibleRelatedValue(visualisation, DN.Diagram_Visualisations_ColorBarLocation, Bindings.STRING); - String colorBarSize = graph.getPossibleRelatedValue(visualisation, DN.Diagram_Visualisations_ColorBarSize, Bindings.STRING); - Boolean show = graph.getPossibleRelatedValue(visualisation, DN.Diagram_Visualisations_ShowColorBars, Bindings.BOOLEAN); - Boolean showTicks = graph.getPossibleRelatedValue(visualisation, DN.Diagram_Visualisations_ShowColorBarTicks, Bindings.BOOLEAN); - if (colorBarLocation != null) { - return new ColorBarOptions() - .showColorBars(show != null ? show : false) - .showColorBarsTicks(showTicks != null ? showTicks : false) - .withLocation(ColorBarsLocation.valueOf(colorBarLocation)) - .withSize(ColorBarsSize.valueOf(colorBarSize)); - } - } - return ColorBarOptions.useDefault(); - } - - public static void setColorBarOptions(WriteGraph graph, Resource visualisation, ColorBarOptions options) throws DatabaseException { - DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph); - graph.claimLiteral(visualisation, DN.Diagram_Visualisations_ColorBarLocation, options.getLocation().toString(), Bindings.STRING); - graph.claimLiteral(visualisation, DN.Diagram_Visualisations_ColorBarSize, options.getSize().toString(), Bindings.STRING); - graph.claimLiteral(visualisation, DN.Diagram_Visualisations_ShowColorBars, options.isShowColorBars(), Bindings.BOOLEAN); - graph.claimLiteral(visualisation, DN.Diagram_Visualisations_ShowColorBarTicks, options.isShowColorBarsTicks(), Bindings.BOOLEAN); - } - - public static Resource createVisualisation(WriteGraph graph, Resource diagram, String visualisationName) throws DatabaseException { - Layer0 L0 = Layer0.getInstance(graph); - DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph); - Resource visualisation = graph.newResource(); - graph.claim(visualisation, L0.InstanceOf, DN.Diagram_Visualisations); - graph.claimLiteral(visualisation, L0.HasName, visualisationName); - graph.claim(diagram, DN.Diagram_hasVisualisation, visualisation); - return visualisation; - } - - public static SizeBarOptions sizeBarOptions(ReadGraph graph, Resource visualisation) throws DatabaseException { - DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph); - if (visualisation != null) { - String sizeBarLocation = graph.getPossibleRelatedValue(visualisation, DN.Diagram_Visualisations_SizeBarLocation, Bindings.STRING); - String sizeBarSize = graph.getPossibleRelatedValue(visualisation, DN.Diagram_Visualisations_SizeBarSize, Bindings.STRING); - Boolean show = graph.getPossibleRelatedValue(visualisation, DN.Diagram_Visualisations_ShowSizeBars, Bindings.BOOLEAN); - Boolean showTicks = graph.getPossibleRelatedValue(visualisation, DN.Diagram_Visualisations_ShowSizeBarTicks, Bindings.BOOLEAN); - if (sizeBarLocation != null) { - return new SizeBarOptions() - .showSizeBars(show != null ? show : false) - .showSizeBarsTicks(showTicks != null ? showTicks : false) - .withLocation(SizeBarsLocation.valueOf(sizeBarLocation)) - .withSize(SizeBarsSize.valueOf(sizeBarSize)); - } - } - return SizeBarOptions.useDefault(); - } - - public static void setSizeBarOptions(WriteGraph graph, Resource visualisation, SizeBarOptions options) throws DatabaseException { - DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph); - graph.claimLiteral(visualisation, DN.Diagram_Visualisations_SizeBarLocation, options.getLocation().toString(), Bindings.STRING); - graph.claimLiteral(visualisation, DN.Diagram_Visualisations_SizeBarSize, options.getSize().toString(), Bindings.STRING); - graph.claimLiteral(visualisation, DN.Diagram_Visualisations_ShowSizeBars, options.isShowSizeBars(), Bindings.BOOLEAN); - graph.claimLiteral(visualisation, DN.Diagram_Visualisations_ShowSizeBarTicks, options.isShowSizeBarsTicks(), Bindings.BOOLEAN); - } - - public static Map colorContributions(ReadGraph graph, Resource visualisation) throws DatabaseException { - DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph); - if (visualisation == null) { - return Collections.emptyMap(); - } - Map contributions = new HashMap<>(); + public static List nearbyResourceVertices(ReadGraph graph, Resource diagramResource, Resource vertex, Double padding) throws DatabaseException { + double halfPadding = padding / 2; - Map colorMaps = DynamicVisualisationsContributions.dynamicColorMaps(graph); + Quadtree existingVertices = graph.syncRequest(new ExistingVerticesRead(diagramResource, halfPadding), TransientCacheListener.instance()); + double[] coords = graph.getRelatedValue(vertex, DiagramResource.getInstance(graph).HasLocation, Bindings.DOUBLE_ARRAY); + double x1 = coords[0] - halfPadding; + double y1= coords[1] - halfPadding; + double x2 = coords[0] + halfPadding; + double y2= coords[1] + halfPadding; + Envelope e = new Envelope(x1, x2, y1, y2); - Collection colorContributions = graph.getObjects(visualisation, DN.Diagram_Visualisations_colorContributions); - for (Resource colorContribution : colorContributions) { - String ucName = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionContributorName, Bindings.STRING); - String label = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionLabel, Bindings.STRING); - String moduleName = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionModuleName, Bindings.STRING); - String attributeName = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionModuleAttribute, Bindings.STRING); - String unit = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionUnit, Bindings.STRING); - Double variableGain = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionVariableGain, Bindings.DOUBLE); - Double variableBias = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionVariableBias, Bindings.DOUBLE); - String dynamicColorMap = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionDefaultColorMap, Bindings.STRING); - Double defaultMin = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionDefaultMin, Bindings.DOUBLE); - Double defaultMax = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionDefaultMax, Bindings.DOUBLE); - Boolean used = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionUsed, Bindings.BOOLEAN); - Boolean useDefault = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionUseDefault, Bindings.BOOLEAN); - DynamicColorContribution dynamicColorContribution = new DynamicColorContribution(label, moduleName, attributeName, unit, variableGain, variableBias, colorMaps.get(dynamicColorMap), defaultMin, defaultMax); - dynamicColorContribution.setUsed(used != null ? used : false); - dynamicColorContribution.setUseDefault(useDefault != null ? useDefault : false); - contributions.put(ucName, dynamicColorContribution); - } - return contributions; - } - - public static void setColorContributions(WriteGraph graph, Resource visualisation, List> collect) throws DatabaseException { - DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph); - Layer0 L0 = Layer0.getInstance(graph); + List result = existingVertices.query(e); + @SuppressWarnings("unchecked") + List vertices = (List) result; - graph.deny(visualisation, DN.Diagram_Visualisations_colorContributions); - for (Pair coll : collect) { - Resource colorContribution = graph.newResource(); - graph.claim(colorContribution, L0.InstanceOf, DN.Diagram_Visualisations_ColorContribution); - graph.claimLiteral(colorContribution, L0.HasName, coll.first); + Rectangle2D vertexRectangle = new Rectangle2D.Double(coords[0] - halfPadding, coords[1] - halfPadding, padding, padding); + + // let's sort by distance + List sortedVertices = vertices.stream().filter(rv -> { + if (rv.vertex.equals(vertex)) + return false; - DynamicColorContribution contr = coll.second; - graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionContributorName, coll.first); - graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionLabel, contr.getLabel()); - graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionModuleName, contr.getModuleName()); - graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionModuleAttribute, contr.getAttributeName()); - graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionUnit, contr.getUnit()); - graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionVariableGain, contr.getVariableGain()); - graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionVariableBias, contr.getVariableBias()); - graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionDefaultColorMap, contr.getDefaultColorMap().getLabel()); - graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionDefaultMin, contr.getDefaultMin()); - graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionDefaultMax, contr.getDefaultMax()); - graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionUsed, contr.isUsed()); - graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionUseDefault, contr.isUseDefault()); + Rectangle2D nearbyRectangle = new Rectangle2D.Double(rv.coords[0] - halfPadding, rv.coords[1] - halfPadding, padding, padding); + return vertexRectangle.intersects(nearbyRectangle); + }).sorted((o1, o2) -> { + double disto1 = Math.sqrt((Math.pow(coords[0] - o1.coords[0], 2) + (Math.pow(coords[1] - o1.coords[1], 2)))); + double disto2 = Math.sqrt((Math.pow(coords[0] - o2.coords[0], 2) + (Math.pow(coords[1] - o2.coords[1], 2)))); - graph.claim(visualisation, DN.Diagram_Visualisations_colorContributions, colorContribution); - } + if (o1.vertex.getResourceId() == 2554883) { + System.err.println("here we are"); + } + + return Double.compare(disto1, disto2); + }).collect(Collectors.toList()); + return sortedVertices; } - public static Map sizeContributions(ReadGraph graph, Resource visualisation) throws DatabaseException { - DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph); - if (visualisation == null) { - return Collections.emptyMap(); - } - Map contributions = new HashMap<>(); - - Map sizeMaps = DynamicVisualisationsContributions.dynamicSizeMaps(graph); - - Collection colorContributions = graph.getObjects(visualisation, DN.Diagram_Visualisations_sizeContributions); - for (Resource colorContribution : colorContributions) { - String ucName = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionContributorName, Bindings.STRING); - String label = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionLabel, Bindings.STRING); - String moduleName = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionModuleName, Bindings.STRING); - String attributeName = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionModuleAttribute, Bindings.STRING); - String unit = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionUnit, Bindings.STRING); - Double variableGain = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionVariableGain, Bindings.DOUBLE); - Double variableBias = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionVariableBias, Bindings.DOUBLE); - String dynamicSizeMap = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionDefaultSizeMap, Bindings.STRING); - Double defaultMin = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionDefaultMin, Bindings.DOUBLE); - Double defaultMax = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionDefaultMax, Bindings.DOUBLE); - Boolean used = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionUsed, Bindings.BOOLEAN); - Boolean useDefault = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionUseDefault, Bindings.BOOLEAN); - DynamicSizeContribution dsc = new DynamicSizeContribution(label, moduleName, attributeName, unit, variableGain, variableBias, sizeMaps.get(dynamicSizeMap), defaultMin, defaultMax); - dsc.setUsed(used != null ? used : false); - dsc.setUseDefault(useDefault != null ? useDefault : false); - contributions.put(ucName, dsc); - } - return contributions; + public static List nearbyVertices(ReadGraph graph, Resource vertex, double padding) throws DatabaseException { + Resource diagramResource = graph.getSingleObject(vertex, Layer0.getInstance(graph).PartOf); + return nearbyResourceVertices(graph, diagramResource, vertex, padding) + .stream() + .map(rv -> rv.vertex) + .collect(Collectors.toList()); } - - public static void setSizeContributions(WriteGraph graph, Resource visualisation, List> collect) throws DatabaseException { - DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph); - Layer0 L0 = Layer0.getInstance(graph); - graph.deny(visualisation, DN.Diagram_Visualisations_sizeContributions); - for (Pair coll : collect) { - Resource sizeContribution = graph.newResource(); - graph.claim(sizeContribution, L0.InstanceOf, DN.Diagram_Visualisations_SizeContribution); - graph.claimLiteral(sizeContribution, L0.HasName, coll.first); - - DynamicSizeContribution contr = coll.second; - graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionContributorName, coll.first); - graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionLabel, contr.getLabel()); - graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionModuleName, contr.getModuleName()); - graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionModuleAttribute, contr.getAttributeName()); - graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionUnit, contr.getUnit()); - graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionVariableGain, contr.getVariableGain()); - graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionVariableBias, contr.getVariableBias()); - graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionDefaultSizeMap, contr.getDefaultSizeMap().getLabel()); - graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionDefaultMin, contr.getDefaultMin()); - graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionDefaultMax, contr.getDefaultMax()); - graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionUsed, contr.isUsed()); - graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionUseDefault, contr.isUseDefault()); - - graph.claim(visualisation, DN.Diagram_Visualisations_sizeContributions, sizeContribution); - } + public static Quadtree existingVertices(Resource diagramResource, Double padding) throws DatabaseException { + Quadtree vv = Simantics.getSession().syncRequest(new ExistingVerticesRead(diagramResource, padding)); + return vv; } - public static void setActiveVisualisation(WriteGraph graph, Resource diagram, Resource visualisationTemplate) throws DatabaseException { - DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph); - graph.deny(diagram, DN.Diagram_hasActiveVisualisation); - graph.claim(diagram, DN.Diagram_hasActiveVisualisation, visualisationTemplate); + public static class ExistingVerticesRead extends BinaryRead { + + public ExistingVerticesRead(Resource diagramResource, Double padding) { + super(diagramResource, padding); + } + + @Override + public Quadtree perform(ReadGraph graph) throws DatabaseException { + Collection vertices = graph.syncRequest(new ObjectsWithType(parameter, Layer0.getInstance(graph).ConsistsOf, DistrictNetworkResource.getInstance(graph).Vertex)); + Quadtree vv = new Quadtree(); + for (Resource vertex : vertices) { + double[] coords = graph.getRelatedValue2(vertex, DiagramResource.getInstance(graph).HasLocation, Bindings.DOUBLE_ARRAY); + double x1 = coords[0] - parameter2; + double y1= coords[1] - parameter2; + double x2 = coords[0] + parameter2; + double y2= coords[1] + parameter2; + Envelope e = new Envelope(x1, x2, y1, y2); + vv.insert(e, new ResourceVertex(vertex, coords, true)); + } + return vv; + } } }