]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network.ui/src/org/simantics/district/network/ui/participants/DynamicVisualisationContributionsParticipant.java
Fix DNElementRemover to remove the actual component first if possible
[simantics/district.git] / org.simantics.district.network.ui / src / org / simantics / district / network / ui / participants / DynamicVisualisationContributionsParticipant.java
index 9fbb8a29d008f8d24e9c7971b384b04199875ef6..8ddb04916cefa70da43cc3d49079e233a24f7cee 100644 (file)
@@ -2,6 +2,9 @@ package org.simantics.district.network.ui.participants;
 
 import java.awt.geom.AffineTransform;
 import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.CompletableFuture;
@@ -17,8 +20,11 @@ import org.simantics.db.exception.DatabaseException;
 import org.simantics.district.network.ontology.DistrictNetworkResource;
 import org.simantics.district.network.profile.RuntimeDynamicVisualisationsRequest;
 import org.simantics.district.network.ui.DistrictDiagramViewer;
+import org.simantics.district.network.ui.nodes.DeferredRenderingNode;
+import org.simantics.district.network.ui.nodes.DistrictNetworkEdgeArrayNode;
 import org.simantics.district.network.ui.nodes.DistrictNetworkHoverInfoNode;
 import org.simantics.district.network.ui.nodes.DynamicVisualisationContributionsNode;
+import org.simantics.district.network.ui.nodes.ElevationServerNode;
 import org.simantics.district.network.ui.styles.DistrictNetworkHoverInfoStyle;
 import org.simantics.district.network.ui.styles.DistrictNetworkHoverInfoStyle.StyleResult;
 import org.simantics.district.network.visualisations.model.ColorBarOptions;
@@ -29,10 +35,12 @@ import org.simantics.district.network.visualisations.model.SizeBarOptions;
 import org.simantics.g2d.canvas.ICanvasContext;
 import org.simantics.g2d.canvas.impl.AbstractCanvasParticipant;
 import org.simantics.g2d.canvas.impl.SGNodeReflection.SGInit;
+import org.simantics.maps.elevation.server.SingletonTiffTileInterface;
 import org.simantics.scenegraph.INode;
 import org.simantics.scenegraph.g2d.G2DParentNode;
 import org.simantics.scenegraph.g2d.events.EventHandlerReflection.EventHandler;
 import org.simantics.scenegraph.g2d.events.command.CommandEvent;
+import org.simantics.utils.datastructures.Pair;
 import org.simantics.utils.datastructures.hints.HintListenerAdapter;
 import org.simantics.utils.datastructures.hints.IHintContext.Key;
 import org.simantics.utils.datastructures.hints.IHintListener;
@@ -59,6 +67,9 @@ public class DynamicVisualisationContributionsParticipant extends AbstractCanvas
     private DynamicVisualisationContributionsNode node;
     private AffineTransform transform;
     private DistrictNetworkHoverInfoNode hoverInfoNode;
+    private DeferredRenderingNode deferredEdgeArrowRendererNode;
+
+    private ElevationServerNode showElevationServerBoundingBoxNode;
 
     public DynamicVisualisationContributionsParticipant(AffineTransform tr) {
         this.transform = tr;
@@ -71,6 +82,7 @@ public class DynamicVisualisationContributionsParticipant extends AbstractCanvas
         getHintStack().addKeyHintListener(getThread(), DistrictDiagramViewer.KEY_MAP_COLOR_BAR_OPTIONS, hintListener);
         getHintStack().addKeyHintListener(getThread(), DistrictDiagramViewer.KEY_MAP_SIZING_OBJECTS, hintListener);
         getHintStack().addKeyHintListener(getThread(), DistrictDiagramViewer.KEY_MAP_SIZE_BAR_OPTIONS, hintListener);
+        getHintStack().addKeyHintListener(getThread(), DistrictDiagramViewer.KEY_SHOW_ELEVATION_SERVER, hintListener);
     }
 
     @Override
@@ -84,6 +96,7 @@ public class DynamicVisualisationContributionsParticipant extends AbstractCanvas
         getHintStack().removeKeyHintListener(getThread(), DistrictDiagramViewer.KEY_MAP_COLOR_BAR_OPTIONS, hintListener);
         getHintStack().removeKeyHintListener(getThread(), DistrictDiagramViewer.KEY_MAP_SIZING_OBJECTS, hintListener);
         getHintStack().removeKeyHintListener(getThread(), DistrictDiagramViewer.KEY_MAP_SIZE_BAR_OPTIONS, hintListener);
+        getHintStack().removeKeyHintListener(getThread(), DistrictDiagramViewer.KEY_SHOW_ELEVATION_SERVER, hintListener);
         super.removedFromContext(ctx);
     }
 
@@ -98,6 +111,12 @@ public class DynamicVisualisationContributionsParticipant extends AbstractCanvas
         hoverInfoNode.setLookupId("districtNetworkHoverInfoNode");
         hoverInfoNode.setTransform(transform);
         hoverInfoNode.setZIndex(Integer.MAX_VALUE - 500);
+        
+        Pair<String, Class<DeferredRenderingNode>> dearn = DistrictNetworkEdgeArrayNode.renderer();
+        deferredEdgeArrowRendererNode = parent.addNode(dearn.first, dearn.second);
+        
+        showElevationServerBoundingBoxNode = parent.addNode(ElevationServerNode.ID, ElevationServerNode.class);
+        showElevationServerBoundingBoxNode.setTransform(transform);
     }
 
     @EventHandler(priority = 0)
@@ -114,6 +133,15 @@ public class DynamicVisualisationContributionsParticipant extends AbstractCanvas
         node.setColorBarOptions(getColorBarOptions());
         node.setDynamicSizingObjects(getDynamicSizingObjects());
         node.setSizeBarOptions(getSizeBarOptions());
+        
+        showElevationServerBoundingBoxNode.setRectangles(getRectangles());
+    }
+
+    private Collection<Rectangle2D> getRectangles() {
+        Boolean enabled = getHint(DistrictDiagramViewer.KEY_SHOW_ELEVATION_SERVER);
+        if (enabled != null && enabled)
+            return SingletonTiffTileInterface.getBoundingBoxes();
+        return Collections.emptyList();
     }
 
     private Map<String, DynamicColorContribution> getDynamicColoringObjects() {
@@ -173,7 +201,7 @@ public class DynamicVisualisationContributionsParticipant extends AbstractCanvas
 
                     StyleResult results = DistrictNetworkHoverInfoStyle.doCalculateStyleResult(graph, runtimeDiagram, mapElement);
                     if (results != null) {
-                        Point2D location = DistrictNetworkHoverInfoStyle.calculatePoint(hoveredNode, zoomLevel);
+                        Point2D location = DistrictNetworkHoverInfoStyle.calculatePoint(hoveredNode, zoomLevel, null);
                         thread.asyncExec(() -> {
                             if (isRemoved())
                                 return;