]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/DistrictNetworkEdgeNode.java
Implement district features to Simantics platform
[simantics/district.git] / org.simantics.district.network.ui / src / org / simantics / district / network / ui / nodes / DistrictNetworkEdgeNode.java
index eb1d26eb7359c9983c1183804b93f758bd5261fd..4abeee8b8b8b013fa90da556494dfc0ecb445604 100644 (file)
-package org.simantics.district.network.ui.nodes;\r
-\r
-import java.awt.BasicStroke;\r
-import java.awt.Color;\r
-import java.awt.Graphics2D;\r
-import java.awt.RenderingHints;\r
-import java.awt.Shape;\r
-import java.awt.Stroke;\r
-import java.awt.geom.AffineTransform;\r
-import java.awt.geom.Path2D;\r
-import java.awt.geom.Rectangle2D;\r
-\r
-import org.simantics.district.network.ui.DistrictNetworkEdge;\r
-import org.simantics.scenegraph.g2d.G2DNode;\r
-import org.simantics.scenegraph.utils.NodeUtil;\r
-\r
-public class DistrictNetworkEdgeNode extends G2DNode {\r
-\r
-    private static final long serialVersionUID = 8049769475036519806L;\r
-    \r
-    private static final Stroke     SELECTION_STROKE = new BasicStroke(1f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);\r
-    private static final Color      SELECTION_COLOR  = new Color(255, 0, 255, 96);\r
-    \r
-    private DistrictNetworkEdge edge;\r
-    private Rectangle2D bounds;\r
-\r
-    @Override\r
-    public void render(Graphics2D g2d) {\r
-        \r
-        AffineTransform ot = null;\r
-        AffineTransform t = getTransform();\r
-        if (t != null && !t.isIdentity()) {\r
-            ot = g2d.getTransform();\r
-            g2d.transform(getTransform());\r
-        }\r
-        \r
-        Object aaHint = g2d.getRenderingHint(RenderingHints.KEY_ANTIALIASING);\r
-        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);\r
-\r
-        Color oldColor = g2d.getColor();\r
-//        boolean selected = isSelected();\r
-//        if (selected) {\r
-//            Path2D selectionPath = edge.getPath();\r
-//            Shape selectionShape = SELECTION_STROKE.createStrokedShape(selectionPath);\r
-//            g2d.setColor(SELECTION_COLOR);\r
-//            g2d.fill(selectionShape);\r
-//        }\r
-//        \r
-        g2d.setColor(Color.BLUE);\r
-        // render\r
-        g2d.draw(edge.getPath());\r
-        \r
-        // Reset\r
-        g2d.setColor(oldColor);\r
-        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, aaHint);\r
-        \r
-        if (ot != null)\r
-            g2d.setTransform(ot);\r
-    }\r
-\r
-    private boolean isSelected() {\r
-        return NodeUtil.isSelected(this, 1);\r
-    }\r
-\r
-    @Override\r
-    public Rectangle2D getBoundsInLocal() {\r
-        return bounds;\r
-    }\r
-    \r
-    private void updateBounds() {\r
-        Rectangle2D oldBounds = bounds;\r
-        if (oldBounds == null)\r
-            oldBounds = new Rectangle2D.Double();\r
-        bounds = calculateBounds(oldBounds);\r
-    }\r
-\r
-    private Rectangle2D calculateBounds(Rectangle2D rect) {\r
-        return edge.getBounds(rect);\r
-    }\r
-\r
-    public void setDNEdge(DistrictNetworkEdge edge) {\r
-        this.edge = edge;\r
-        updateBounds();\r
-    }\r
-\r
-}\r
+package org.simantics.district.network.ui.nodes;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.Stroke;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
+
+import org.simantics.district.network.ui.DistrictNetworkEdge;
+import org.simantics.scenegraph.g2d.G2DNode;
+import org.simantics.scenegraph.utils.GeometryUtils;
+import org.simantics.scenegraph.utils.NodeUtil;
+
+public class DistrictNetworkEdgeNode extends G2DNode {
+
+    private static final long serialVersionUID = 8049769475036519806L;
+    
+    private static final Stroke     SELECTION_STROKE = new BasicStroke(1f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);
+    private static final Color      SELECTION_COLOR  = new Color(255, 0, 255, 96);
+    
+    private DistrictNetworkEdge edge;
+    private Rectangle2D bounds;
+    
+    private Stroke stroke = new BasicStroke(2);
+    private boolean scaleStroke = true;
+
+    @Override
+    public void init() {
+
+    }
+    
+    @Override
+    public void render(Graphics2D g2d) {
+        
+        AffineTransform ot = null;
+        AffineTransform t = getTransform();
+        if (t != null && !t.isIdentity()) {
+            ot = g2d.getTransform();
+            g2d.transform(getTransform());
+        }
+        
+        Object aaHint = g2d.getRenderingHint(RenderingHints.KEY_ANTIALIASING);
+        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
+
+        Color oldColor = g2d.getColor();
+        BasicStroke oldStroke = (BasicStroke) g2d.getStroke();
+//        boolean selected = isSelected();
+//        if (selected) {
+//            Path2D selectionPath = edge.getPath();
+//            Shape selectionShape = SELECTION_STROKE.createStrokedShape(selectionPath);
+//            g2d.setColor(SELECTION_COLOR);
+//            g2d.fill(selectionShape);
+//        }
+//        
+        g2d.setColor(Color.BLUE);
+        if (stroke != null) {
+            if (scaleStroke && stroke instanceof BasicStroke) {
+                BasicStroke bs = GeometryUtils.scaleStroke(stroke, (float) (1.0 / GeometryUtils.getScale(g2d.getTransform())));
+                g2d.setStroke(bs);
+            } else {
+                g2d.setStroke(stroke);
+            }
+        }
+        // render
+        g2d.draw(edge.getPath());
+        
+        // Reset
+        g2d.setStroke(oldStroke);
+        g2d.setColor(oldColor);
+        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, aaHint);
+        
+        if (ot != null)
+            g2d.setTransform(ot);
+    }
+
+    private boolean isSelected() {
+        return NodeUtil.isSelected(this, 1);
+    }
+
+    @Override
+    public Rectangle2D getBoundsInLocal() {
+        return bounds;
+    }
+    
+    private void updateBounds() {
+        Rectangle2D oldBounds = bounds;
+        if (oldBounds == null)
+            oldBounds = new Rectangle2D.Double();
+        bounds = calculateBounds(oldBounds);
+    }
+
+    private Rectangle2D calculateBounds(Rectangle2D rect) {
+        return edge.getBounds(rect);
+    }
+
+    public void setDNEdge(DistrictNetworkEdge edge) {
+        this.edge = edge;
+        updateBounds();
+    }
+
+}