]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/DistrictNetworkEdgeNode.java
Show dynamic symbols when vertices and/or edges are hidden.
[simantics/district.git] / org.simantics.district.network.ui / src / org / simantics / district / network / ui / nodes / DistrictNetworkEdgeNode.java
index 4d54246d48ab8b69b4ac3d7ce07f3fd1557aa1ba..a089ecaf149e61653a6849c6bf536a523c94aab3 100644 (file)
@@ -16,6 +16,7 @@ import org.simantics.district.network.ui.adapters.DistrictNetworkEdgeElementFact
 import org.simantics.maps.MapScalingTransform;
 import org.simantics.scenegraph.INode;
 import org.simantics.scenegraph.ISelectionPainterNode;
+import org.simantics.scenegraph.INode.PropertySetter;
 import org.simantics.scenegraph.g2d.G2DNode;
 import org.simantics.scenegraph.g2d.G2DParentNode;
 import org.simantics.scenegraph.g2d.nodes.SVGNode;
@@ -50,6 +51,8 @@ public class DistrictNetworkEdgeNode extends G2DParentNode implements ISelection
     private transient Rectangle2D symbolRect;
     private transient AffineTransform symbolTransform;
 
+    private boolean hidden = false;
+    
     private Double arrowLength;
 
     private static double startX;
@@ -70,89 +73,95 @@ public class DistrictNetworkEdgeNode extends G2DParentNode implements ISelection
             g2d.transform(getTransform());
         }
 
-        Object aaHint = g2d.getRenderingHint(RenderingHints.KEY_ANTIALIASING);
-        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-
-        Color oldColor = g2d.getColor();
-        BasicStroke oldStroke = (BasicStroke) g2d.getStroke();
-
-        BasicStroke bs = null;
         double scale = 1.0;
         if (scaleStroke) {
             AffineTransform tr = g2d.getTransform();
             scale = DistrictNetworkNodeUtils.getScale(tr);
-            bs = GeometryUtils.scaleStroke(STROKE, getStrokeWidth(scale));
-        } else {
-            bs = STROKE;
         }
-        int zoomLevel = MapScalingTransform.zoomLevel(ot);
-        path = calculatePath(edge, path, zoomLevel > 15);
-
-        if (isSelected()) {
-            g2d.setColor(SELECTION_COLOR);
-            g2d.setStroke(GeometryUtils.scaleAndOffsetStrokeWidth(bs, 1.f, (float)(2 * STROKE.getLineWidth() / scale)));
-            g2d.draw(path);
-        }
-
-        g2d.setColor(dynamicColor != null ? dynamicColor : color);
-        g2d.setStroke(bs);
-        g2d.draw(path);
-
-        // Draw arrow
-        if (arrowLength != null) {
-            g2d.setColor(Color.BLACK);
-            float lw = STROKE.getLineWidth() / (float)scale;
-            g2d.setStroke(new BasicStroke(lw, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
-            
-            double l = arrowLength;
-            double w = 2 * (double) lw * Math.signum(l);
-            if (Math.abs(w) > Math.abs(l)) w = l;
-            double offset = 2 * (double) lw;
-            
-            double centerX = (startX + endX) / 2, centerY = (startY + endY) / 2;
-            double deltaX = endX - startX, deltaY = endY - startY;
-            double length = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
-            deltaX /= length;
-            deltaY /= length;
-            
-            double x0 = centerX - l/2 * deltaX + offset * deltaY;
-            double y0 = centerY - l/2 * deltaY - offset * deltaX;
-            double x1 = centerX + (l/2 - w) * deltaX + offset * deltaY;
-            double y1 = centerY + (l/2 - w) * deltaY - offset * deltaX;
+        
+        if (!hidden) {
+            Object aaHint = g2d.getRenderingHint(RenderingHints.KEY_ANTIALIASING);
+            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+    
+            Color oldColor = g2d.getColor();
+            BasicStroke oldStroke = (BasicStroke) g2d.getStroke();
+    
+            BasicStroke bs = null;
+            if (scaleStroke) {
+                bs = GeometryUtils.scaleStroke(STROKE, getStrokeWidth(scale));
+            } else {
+                bs = STROKE;
+            }
             
-            g2d.draw(new Line2D.Double(x0, y0, x1, y1));
+            int zoomLevel = MapScalingTransform.zoomLevel(ot);
+            path = calculatePath(edge, path, zoomLevel > 15);
+    
+            if (isSelected()) {
+                g2d.setColor(SELECTION_COLOR);
+                g2d.setStroke(GeometryUtils.scaleAndOffsetStrokeWidth(bs, 1.f, (float)(2 * STROKE.getLineWidth() / scale)));
+                g2d.draw(path);
+            }
+    
+            g2d.setColor(dynamicColor != null ? dynamicColor : color);
+            g2d.setStroke(bs);
+            g2d.draw(path);
+    
+            // Draw arrow
+            if (arrowLength != null) {
+                g2d.setColor(Color.BLACK);
+                float lw = STROKE.getLineWidth() / (float)scale;
+                g2d.setStroke(new BasicStroke(lw, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));
+                
+                double l = arrowLength;
+                double w = 2 * (double) lw * Math.signum(l);
+                if (Math.abs(w) > Math.abs(l)) w = l;
+                double offset = 2 * (double) lw;
+                
+                double centerX = (startX + endX) / 2, centerY = (startY + endY) / 2;
+                double deltaX = endX - startX, deltaY = endY - startY;
+                double length = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
+                deltaX /= length;
+                deltaY /= length;
+                
+                double x0 = centerX - l/2 * deltaX + offset * deltaY;
+                double y0 = centerY - l/2 * deltaY - offset * deltaX;
+                double x1 = centerX + (l/2 - w) * deltaX + offset * deltaY;
+                double y1 = centerY + (l/2 - w) * deltaY - offset * deltaX;
+                
+                g2d.draw(new Line2D.Double(x0, y0, x1, y1));
+                
+                Path2D path = new Path2D.Double();
+                path.moveTo(x1 + w * deltaX, y1 + w * deltaY);
+                path.lineTo(x1 + w * deltaY, y1 - w * deltaX);
+                path.lineTo(x1 - w * deltaY, y1 + w * deltaX);
+                path.closePath();
+                g2d.fill(path);
+            }
             
-            Path2D path = new Path2D.Double();
-            path.moveTo(x1 + w * deltaX, y1 + w * deltaY);
-            path.lineTo(x1 + w * deltaY, y1 - w * deltaX);
-            path.lineTo(x1 - w * deltaY, y1 + w * deltaX);
-            path.closePath();
-            g2d.fill(path);
-        }
-        
-        // Reset
-        g2d.setStroke(oldStroke);
-        g2d.setColor(oldColor);
-        
-        // Render SVG symbol
-        double viewScaleRecip = 10;
-        if (scaleStroke) {
-            viewScaleRecip /= scale;
+            // Reset
+            g2d.setStroke(oldStroke);
+            g2d.setColor(oldColor);
+            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, aaHint);
         }
-        
-        Point2D p = getCenterPoint();
-        symbolRect = DistrictNetworkNodeUtils.calculateDrawnGeometry(p, NORMAL, symbolRect, viewScaleRecip);
-        symbolTransform = DistrictNetworkNodeUtils.getTransformToRectangle(symbolRect, symbolTransform);
-        
+            
         for (INode nn : getNodes()) {
             G2DNode g2dNode = (G2DNode)nn;
-            if (g2dNode instanceof SVGNode)
+            if (g2dNode instanceof SVGNode) {
+                // Render SVG symbol
+                double viewScaleRecip = 10;
+                if (scaleStroke) {
+                    viewScaleRecip /= scale;
+                }
+                
+                Point2D p = getCenterPoint();
+                symbolRect = DistrictNetworkNodeUtils.calculateDrawnGeometry(p, NORMAL, symbolRect, viewScaleRecip);
+                symbolTransform = DistrictNetworkNodeUtils.getTransformToRectangle(symbolRect, symbolTransform);
+                
                 g2dNode.setTransform(symbolTransform);
+            }
             g2dNode.render(g2d);
         }
         
-        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, aaHint);
-
         if (ot != null)
             g2d.setTransform(ot);
     }
@@ -284,4 +293,9 @@ public class DistrictNetworkEdgeNode extends G2DParentNode implements ISelection
                 ((SVGNode)nn).setData(value);
     }
     
+
+    @PropertySetter(value = "hidden")
+    public void setHidden(Boolean value) {
+        this.hidden = value;
+    }
 }