]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/DistrictNetworkVertexNode.java
Optimization of district scene graph node rendering
[simantics/district.git] / org.simantics.district.network.ui / src / org / simantics / district / network / ui / nodes / DistrictNetworkVertexNode.java
index 2e2b4293871114144b53fb50e73d99065ac7c10e..51ae30e07f58113363020d4f34b248b10c4ad331 100644 (file)
@@ -14,6 +14,7 @@ import org.simantics.scenegraph.INode;
 import org.simantics.scenegraph.ISelectionPainterNode;
 import org.simantics.scenegraph.g2d.G2DNode;
 import org.simantics.scenegraph.g2d.G2DParentNode;
+import org.simantics.scenegraph.g2d.G2DRenderingHints;
 import org.simantics.scenegraph.g2d.IG2DNode;
 import org.simantics.scenegraph.g2d.nodes.SVGNode;
 import org.simantics.scenegraph.utils.GeometryUtils;
@@ -38,7 +39,7 @@ public class DistrictNetworkVertexNode extends G2DParentNode implements ISelecti
 
     private DistrictNetworkVertex vertex;
 
-    private boolean scaleStroke = true;
+    private static boolean scaleStroke = true;
     private boolean hover;
 
     private Color color;
@@ -62,19 +63,23 @@ public class DistrictNetworkVertexNode extends G2DParentNode implements ISelecti
     public void render(Graphics2D g2d) {
         AffineTransform ot = null;
         AffineTransform t = getTransform();
+        double viewScaleRecip = scaleStroke ? (Double) g2d.getRenderingHint(DistrictRenderingHints.KEY_VIEW_SCALE_RECIPROCAL_UNDER_SPATIAL_ROOT) : 1.0;
         if (t != null && !t.isIdentity()) {
-            ot = g2d.getTransform();
+            //ot = g2d.getTransform();
+            ot = (AffineTransform) g2d.getRenderingHint(G2DRenderingHints.KEY_TRANSFORM_UNDER_SPATIAL_ROOT);
             g2d.transform(t);
+
+            if (scaleStroke) {
+                AffineTransform work = DistrictNetworkNodeUtils.sharedTransform.get();
+                work.setTransform(ot);
+                work.concatenate(t);
+                viewScaleRecip = DistrictNetworkNodeUtils.calculateScaleRecip(work);
+            }
         }
 
         // Translate lat and lon to X and Y
         Point2D p = point = DistrictNetworkNodeUtils.calculatePoint2D(vertex.getPoint(), point);
-        
-        double viewScaleRecip = 1;
-        if (scaleStroke) {
-            viewScaleRecip *= DistrictNetworkNodeUtils.calculateScaleRecip(g2d.getTransform());
-        }
-        
+
         if (!hidden && nodeSize > 0.0) {
             Object oaaHint = null;
             Object aaHint = g2d.getRenderingHint(RenderingHints.KEY_ANTIALIASING);
@@ -152,11 +157,6 @@ public class DistrictNetworkVertexNode extends G2DParentNode implements ISelecti
         updateBounds();
     }
 
-    @Override
-    public AffineTransform getTransform() {
-        return super.getTransform();
-    }
-
     private Rectangle2D calculateBounds(Rectangle2D rect) {
         Point2D calcPoint = DistrictNetworkNodeUtils.calculatePoint2D(vertex.getPoint(), point);
         AffineTransform at = NodeUtil.getLocalToGlobalTransform(this);