X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scenegraph%2Fsrc%2Forg%2Fsimantics%2Fscenegraph%2Fg2d%2Fnodes%2Fconnection%2FRouteGraphNode.java;h=0a2583fc6dd734552999376241b15b509f235086;hp=687731f4c2f9d8528ab40cc0c6189151672828f4;hb=refs%2Fchanges%2F83%2F683%2F1;hpb=edbb4df64407826271ee6423451401684e9cd68c diff --git a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/connection/RouteGraphNode.java b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/connection/RouteGraphNode.java index 687731f4c..0a2583fc6 100644 --- a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/connection/RouteGraphNode.java +++ b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/connection/RouteGraphNode.java @@ -23,7 +23,9 @@ import java.awt.geom.Path2D; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.lang.reflect.Constructor; +import java.util.ArrayList; import java.util.Collection; +import java.util.List; import java.util.Map; import org.simantics.diagram.connection.RouteGraph; @@ -59,12 +61,16 @@ import org.simantics.scenegraph.g2d.events.command.CommandEvent; import org.simantics.scenegraph.g2d.events.command.Commands; import org.simantics.scenegraph.g2d.nodes.GridNode; import org.simantics.scenegraph.g2d.nodes.LinkNode; +import org.simantics.scenegraph.g2d.nodes.SVGNodeAssignment; import org.simantics.scenegraph.g2d.nodes.connection.HighlightActionPointsAction.Action; import org.simantics.scenegraph.g2d.nodes.connection.HighlightActionPointsAction.Pick; import org.simantics.scenegraph.g2d.snap.ISnapAdvisor; +import org.simantics.scenegraph.utils.ColorUtil; import org.simantics.scenegraph.utils.GeometryUtils; import org.simantics.scenegraph.utils.InitValueSupport; import org.simantics.scenegraph.utils.NodeUtil; +import org.slf4j.LoggerFactory; +import org.slf4j.Logger; import gnu.trove.map.hash.THashMap; @@ -73,7 +79,9 @@ import gnu.trove.map.hash.THashMap; */ public class RouteGraphNode extends G2DNode implements ISelectionPainterNode, InitValueSupport { - private static final long serialVersionUID = -917194130412280965L; + private static final Logger LOGGER = LoggerFactory.getLogger(RouteGraphNode.class); + + private static final long serialVersionUID = -917194130412280965L; private static final double TOLERANCE = IAction.TOLERANCE; private static final Stroke SELECTION_STROKE = new BasicStroke(1f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER); @@ -123,7 +131,7 @@ public class RouteGraphNode extends G2DNode implements ISelectionPainterNode, In protected transient Map dynamicStyles = null; - + private transient boolean ignoreSelection = false; @Override @@ -132,6 +140,74 @@ public class RouteGraphNode extends G2DNode implements ISelectionPainterNode, In wrapRenderer(); } + private static float tryParseFloat(String s, float def) { + try { + return Float.parseFloat(s); + } catch (NumberFormatException e) { + LOGGER.error("Could not parse '" + s + "' into float."); + return def; + } + } + + /* + * 1.0 BUTT MITER 1.0 0.0 + */ + private static Stroke parseStroke(String definition) { + + float width = 1.0f; + int cap = BasicStroke.CAP_BUTT; + int join = BasicStroke.JOIN_MITER; + float miterLimit = 1.0f; + float[] dash = { 1, 0}; + float dash_phase = 0; + + String[] parts = definition.split(" "); + + if(parts.length > 0) { + width = tryParseFloat(parts[0], width); + } + if(parts.length > 1) { + if("BUTT".equals(parts[1])) cap = BasicStroke.CAP_BUTT; + else if("ROUND".equals(parts[1])) cap = BasicStroke.CAP_ROUND; + else if("SQUARE".equals(parts[1])) cap = BasicStroke.CAP_SQUARE; + } + if(parts.length > 2) { + if("BEVEL".equals(parts[2])) cap = BasicStroke.JOIN_BEVEL; + else if("MITER".equals(parts[2])) cap = BasicStroke.JOIN_MITER; + else if("ROUND".equals(parts[2])) cap = BasicStroke.JOIN_ROUND; + } + if(parts.length > 3) { + miterLimit = tryParseFloat(parts[3], miterLimit); + } + if(parts.length > 4) { + dash_phase = tryParseFloat(parts[4], dash_phase); + } + if(parts.length > 6) { + dash = new float[parts.length - 5]; + for(int i=5;i assignments) { + for(SVGNodeAssignment ass : assignments) { + if("dynamicColor".equals(ass.elementId)) { + setDynamicColor(ColorUtil.hexColor(ass.value)); + } else if("dynamicStroke".equals(ass.elementId)) { + setDynamicStroke(parseStroke(ass.value)); + } + } + } + public void setIgnoreSelection(boolean value) { ignoreSelection = value; }