--- /dev/null
+/*******************************************************************************\r
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
+ * in Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ * VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.g2d.elementclass.operationsymbols;\r
+\r
+import java.awt.Color;\r
+import java.awt.geom.AffineTransform;\r
+import java.awt.geom.Rectangle2D;\r
+\r
+import org.simantics.g2d.diagram.handler.Topology.Terminal;\r
+import org.simantics.g2d.element.ElementClass;\r
+import org.simantics.g2d.element.ElementUtils;\r
+import org.simantics.g2d.element.IElement;\r
+import org.simantics.g2d.element.SceneGraphNodeKey;\r
+import org.simantics.g2d.element.handler.AdditionalColor;\r
+import org.simantics.g2d.element.handler.BorderColor;\r
+import org.simantics.g2d.element.handler.Clickable;\r
+import org.simantics.g2d.element.handler.Clickable.PressStatus;\r
+import org.simantics.g2d.element.handler.FillColor;\r
+import org.simantics.g2d.element.handler.SceneGraph;\r
+import org.simantics.g2d.element.handler.impl.AdditionalColorImpl;\r
+import org.simantics.g2d.element.handler.impl.BorderColorImpl;\r
+import org.simantics.g2d.element.handler.impl.DefaultTransform;\r
+import org.simantics.g2d.element.handler.impl.FillColorImpl;\r
+import org.simantics.g2d.element.handler.impl.FixedSize;\r
+import org.simantics.g2d.element.handler.impl.Resizeable;\r
+import org.simantics.g2d.element.handler.impl.StaticTerminals;\r
+import org.simantics.g2d.element.handler.impl.TerminalImpl;\r
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.BoilerSymbol;\r
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.BoilerSymbol2;\r
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.ChimneySymbol;\r
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.CompressorSymbol;\r
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.ControlValveSymbol;\r
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.GeneratorSymbol;\r
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.HeatExchangerSymbol;\r
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.NoSpinSymbol;\r
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.PumpSymbol;\r
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.ShutoffValveSymbol;\r
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.SwitchSymbol;\r
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.Tank2Symbol;\r
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.TankSymbol;\r
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.ThreeWayValveSymbol;\r
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.TurbineSymbol;\r
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.VoltageTransformerSymbol;\r
+import org.simantics.g2d.image.Image;\r
+import org.simantics.g2d.utils.geom.DirectionSet;\r
+import org.simantics.scenegraph.Node;\r
+import org.simantics.scenegraph.g2d.G2DParentNode;\r
+import org.simantics.utils.datastructures.hints.IHintContext.Key;\r
+\r
+/**\r
+ * Operation symbol handlers.\r
+ * \r
+ * @author Toni Kalajainen\r
+ */\r
+public class OperationClasses {\r
+ \r
+ static final FillColor FILL_COLOR_HANDLER = FillColorImpl.handlerOf(Color.WHITE);\r
+ static final BorderColor BORDER_COLOR_HANDLER = BorderColorImpl.handlerOf(Color.BLACK);\r
+ static final AdditionalColor ADDITIONAL_COLOR_HANDLER = AdditionalColorImpl.handlerOf(Color.GREEN);\r
+ \r
+ public static final Terminal TERMINAL_IN = new TerminalImpl(); \r
+ public static final Terminal TERMINAL_OUT = new TerminalImpl(); \r
+ \r
+ public static ElementClass BOILER_CLASS =\r
+ ElementClass.compile(\r
+ DefaultTransform.INSTANCE,\r
+ BoilerPaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(-10, 0, 20, 125),\r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, 0.0, -BoilerSymbol.DIM*3, DirectionSet.N,\r
+ TERMINAL_OUT, 0.0, BoilerSymbol.DIM*3, DirectionSet.S\r
+ )\r
+ );\r
+ public static ElementClass BOILER_BUTTON_CLASS =\r
+ ElementClass.compile(\r
+ Clickable.INSTANCE,\r
+ DefaultTransform.INSTANCE,\r
+ BoilerPaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(-10, 0, 20, 125),\r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, 0.0, -BoilerSymbol.DIM*3, DirectionSet.N,\r
+ TERMINAL_OUT, 0.0, BoilerSymbol.DIM*3, DirectionSet.S\r
+ )\r
+ );\r
+ public static ElementClass NO_SPIN_CLASS =\r
+ ElementClass.compile(\r
+ DefaultTransform.INSTANCE,\r
+ NoSpinPaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(NoSpinSymbol.BOUNDS),\r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, 0.0, 0.0, DirectionSet.NESW\r
+ ) \r
+ );\r
+ public static ElementClass NO_SPIN_BUTTON_CLASS =\r
+ ElementClass.compile(\r
+ Clickable.INSTANCE,\r
+ DefaultTransform.INSTANCE,\r
+ NoSpinPaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(NoSpinSymbol.BOUNDS),\r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, 0.0, 0.0, DirectionSet.NESW\r
+ ) \r
+ ); \r
+ public static ElementClass COMPRESSOR_CLASS =\r
+ ElementClass.compile(\r
+ DefaultTransform.INSTANCE,\r
+ CompressorPaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(CompressorSymbol.BOUNDS),\r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, 0.0, 0.0, DirectionSet.NESW\r
+ ) \r
+ );\r
+ public static ElementClass COMPRESSOR_BUTTON_CLASS =\r
+ ElementClass.compile(\r
+ Clickable.INSTANCE,\r
+ DefaultTransform.INSTANCE,\r
+ CompressorPaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(CompressorSymbol.BOUNDS),\r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, 0.0, 0.0, DirectionSet.NESW\r
+ ) \r
+ ); \r
+ public static ElementClass CONTROLVALVE_CLASS =\r
+ ElementClass.compile(\r
+ DefaultTransform.INSTANCE,\r
+ ControlValvePaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(ControlValveSymbol.BOUNDS), \r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, -ControlValveSymbol.D, 0.0, DirectionSet.N,\r
+ TERMINAL_OUT, ControlValveSymbol.D, 0.0, DirectionSet.S\r
+ ) \r
+ ); \r
+ public static ElementClass CONTROLVALVE_BUTTON_CLASS =\r
+ ElementClass.compile(\r
+ Clickable.INSTANCE,\r
+ DefaultTransform.INSTANCE,\r
+ ControlValvePaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(ControlValveSymbol.BOUNDS), \r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, -ControlValveSymbol.D, 0.0, DirectionSet.N,\r
+ TERMINAL_OUT, ControlValveSymbol.D, 0.0, DirectionSet.S\r
+ ) \r
+ ); \r
+ public static ElementClass THREEWAYVALVE_CLASS =\r
+ ElementClass.compile(\r
+ DefaultTransform.INSTANCE,\r
+ ThreeWayValvePaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(ControlValveSymbol.BOUNDS), \r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, -ThreeWayValveSymbol.D, 0.0, DirectionSet.N,\r
+ TERMINAL_OUT, ThreeWayValveSymbol.D, 0.0, DirectionSet.S\r
+ ) \r
+ ); \r
+ public static ElementClass THREEWAYVALVE_BUTTON_CLASS =\r
+ ElementClass.compile(\r
+ Clickable.INSTANCE,\r
+ DefaultTransform.INSTANCE,\r
+ ThreeWayValvePaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(ControlValveSymbol.BOUNDS), \r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, -ThreeWayValveSymbol.D, 0.0, DirectionSet.N,\r
+ TERMINAL_OUT, ThreeWayValveSymbol.D, 0.0, DirectionSet.S\r
+ ) \r
+ ); \r
+ public static ElementClass HEATEXCHANGER_CLASS =\r
+ ElementClass.compile(\r
+ DefaultTransform.INSTANCE,\r
+ HeatExchangerPaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(HeatExchangerSymbol.BOUNDS),\r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, HeatExchangerSymbol.BOUNDS.getMinX(), HeatExchangerSymbol.BOUNDS.getMaxY()*0.5, DirectionSet.SW,\r
+ TERMINAL_OUT, HeatExchangerSymbol.BOUNDS.getMaxX(), HeatExchangerSymbol.BOUNDS.getMinY()*0.5, DirectionSet.NE\r
+ ) \r
+ ); \r
+ public static ElementClass HEATEXCHANGER_BUTTON_CLASS =\r
+ ElementClass.compile(\r
+ Clickable.INSTANCE,\r
+ DefaultTransform.INSTANCE,\r
+ HeatExchangerPaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(HeatExchangerSymbol.BOUNDS),\r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, HeatExchangerSymbol.BOUNDS.getMinX(), HeatExchangerSymbol.BOUNDS.getMaxY(), DirectionSet.SW,\r
+ TERMINAL_OUT, HeatExchangerSymbol.BOUNDS.getMaxX(), HeatExchangerSymbol.BOUNDS.getMinY(), DirectionSet.NE \r
+ ) \r
+ ); \r
+ public static ElementClass PUMP_CLASS =\r
+ ElementClass.compile(\r
+ DefaultTransform.INSTANCE,\r
+ PumpPaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(PumpSymbol.BOUNDS),\r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, -PumpSymbol.D2, 0.0, DirectionSet.N,\r
+ TERMINAL_OUT, PumpSymbol.D2, 0.0, DirectionSet.S\r
+ ) \r
+ );\r
+ public static ElementClass PUMP_BUTTON_CLASS =\r
+ ElementClass.compile(\r
+ Clickable.INSTANCE,\r
+ DefaultTransform.INSTANCE,\r
+ PumpPaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(PumpSymbol.BOUNDS),\r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, -PumpSymbol.D2, 0.0, DirectionSet.N,\r
+ TERMINAL_OUT, PumpSymbol.D2, 0.0, DirectionSet.S\r
+ ) \r
+ ); \r
+ public static ElementClass SHUTOFFVALVE_CLASS =\r
+ ElementClass.compile(\r
+ DefaultTransform.INSTANCE,\r
+ ShutoffValvePaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(ShutoffValveSymbol.SHAPE.getBounds()),\r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, -ShutoffValveSymbol.DIM, 0.0, DirectionSet.N,\r
+ TERMINAL_OUT, ShutoffValveSymbol.DIM, 0.0, DirectionSet.S\r
+ ) \r
+ ); \r
+ public static ElementClass SHUTOFFVALVE_BUTTON_CLASS =\r
+ ElementClass.compile(\r
+ Clickable.INSTANCE,\r
+ DefaultTransform.INSTANCE,\r
+ ShutoffValvePaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(ShutoffValveSymbol.SHAPE.getBounds()),\r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, -ShutoffValveSymbol.DIM, 0.0, DirectionSet.N,\r
+ TERMINAL_OUT, ShutoffValveSymbol.DIM, 0.0, DirectionSet.S\r
+ ) \r
+ ); \r
+ public static ElementClass SWITCH_CLASS =\r
+ ElementClass.compile(\r
+ DefaultTransform.INSTANCE,\r
+ SwitchPaint.INSTANCE,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(SwitchSymbol.BOUNDS),\r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, SwitchSymbol.BOUNDS.getCenterX(), SwitchSymbol.BOUNDS.getMinY(), DirectionSet.N,\r
+ TERMINAL_OUT, SwitchSymbol.BOUNDS.getCenterX(), SwitchSymbol.BOUNDS.getMaxY(), DirectionSet.S \r
+ ) \r
+ ); \r
+ public static ElementClass SWITCH_BUTTON_CLASS =\r
+ ElementClass.compile(\r
+ Clickable.INSTANCE,\r
+ DefaultTransform.INSTANCE,\r
+ SwitchPaint.INSTANCE,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(SwitchSymbol.BOUNDS),\r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, SwitchSymbol.BOUNDS.getCenterX(), SwitchSymbol.BOUNDS.getMinY(), DirectionSet.N,\r
+ TERMINAL_OUT, SwitchSymbol.BOUNDS.getCenterX(), SwitchSymbol.BOUNDS.getMaxY(), DirectionSet.S \r
+ ) \r
+ ); \r
+ public static ElementClass TURBINE_CLASS =\r
+ ElementClass.compile(\r
+ DefaultTransform.INSTANCE,\r
+ TurbinePaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(TurbineSymbol.SHAPE.getBounds()),\r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, -TurbineSymbol.DIM, 0.0, DirectionSet.N,\r
+ TERMINAL_OUT, TurbineSymbol.DIM, 0.0, DirectionSet.S\r
+ ) \r
+ ); \r
+ public static ElementClass TURBINE_BUTTON_CLASS =\r
+ ElementClass.compile(\r
+ Clickable.INSTANCE,\r
+ DefaultTransform.INSTANCE,\r
+ TurbinePaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(TurbineSymbol.BOUNDS),\r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, -TurbineSymbol.DIM, 0.0, DirectionSet.N,\r
+ TERMINAL_OUT, TurbineSymbol.DIM, 0.0, DirectionSet.S\r
+ ) \r
+ ); \r
+ public static ElementClass VOLTAGETRANSFORMER_CLASS =\r
+ ElementClass.compile(\r
+ DefaultTransform.INSTANCE,\r
+ VoltageTransformerPaint.INSTANCE,\r
+ ADDITIONAL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(VoltageTransformerSymbol.BOUNDS),\r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, VoltageTransformerSymbol.BOUNDS.getCenterX(), VoltageTransformerSymbol.BOUNDS.getMinY(), DirectionSet.N,\r
+ TERMINAL_OUT, VoltageTransformerSymbol.BOUNDS.getCenterX(), VoltageTransformerSymbol.BOUNDS.getMaxY(), DirectionSet.S\r
+ ) \r
+ );\r
+ public static ElementClass VOLTAGETRANSFORMER_BUTTON_CLASS =\r
+ ElementClass.compile(\r
+ Clickable.INSTANCE,\r
+ DefaultTransform.INSTANCE,\r
+ VoltageTransformerPaint.INSTANCE,\r
+ ADDITIONAL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(VoltageTransformerSymbol.BOUNDS),\r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, VoltageTransformerSymbol.BOUNDS.getCenterX(), VoltageTransformerSymbol.BOUNDS.getMinY(), DirectionSet.N,\r
+ TERMINAL_OUT, VoltageTransformerSymbol.BOUNDS.getCenterX(), VoltageTransformerSymbol.BOUNDS.getMaxY(), DirectionSet.S\r
+ ) \r
+ ); \r
+ public static ElementClass CHIMNEY_CLASS =\r
+ ElementClass.compile(\r
+ DefaultTransform.INSTANCE,\r
+ ChimneyPaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(ChimneySymbol.BOUNDS)\r
+ ); \r
+ public static ElementClass CHIMNEY_BUTTON_CLASS =\r
+ ElementClass.compile(\r
+ Clickable.INSTANCE,\r
+ DefaultTransform.INSTANCE,\r
+ ChimneyPaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(ChimneySymbol.BOUNDS)\r
+ ); \r
+ public static ElementClass GENERATOR_CLASS =\r
+ ElementClass.compile(\r
+ DefaultTransform.INSTANCE,\r
+ GeneratorPaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(GeneratorSymbol.BOUNDS),\r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, -GeneratorSymbol.DIM, 0.0, DirectionSet.W,\r
+ TERMINAL_OUT, GeneratorSymbol.DIM, 0.0, DirectionSet.E\r
+ ) \r
+ ); \r
+ public static ElementClass GENERATOR_BUTTON_CLASS =\r
+ ElementClass.compile(\r
+ Clickable.INSTANCE,\r
+ DefaultTransform.INSTANCE,\r
+ GeneratorPaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ FixedSize.of(GeneratorSymbol.BOUNDS),\r
+ StaticTerminals.compile(\r
+ TERMINAL_IN, -GeneratorSymbol.DIM, 0.0, DirectionSet.W,\r
+ TERMINAL_OUT, GeneratorSymbol.DIM, 0.0, DirectionSet.E\r
+ ) \r
+ );\r
+ public static ElementClass TANK_CLASS =\r
+ ElementClass.compile(\r
+ DefaultTransform.INSTANCE,\r
+ TankPaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ Resizeable.initialSize(40, 15)\r
+ ); \r
+ public static ElementClass TANK_BUTTON_CLASS =\r
+ ElementClass.compile(\r
+ Clickable.INSTANCE,\r
+ DefaultTransform.INSTANCE,\r
+ TankPaint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ Resizeable.initialSize(40, 15)\r
+ ); \r
+ public static ElementClass TANK2_CLASS =\r
+ ElementClass.compile(\r
+ DefaultTransform.INSTANCE,\r
+ Tank2Paint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ BORDER_COLOR_HANDLER,\r
+ ADDITIONAL_COLOR_HANDLER, \r
+ Resizeable.initialSize(40, 15)\r
+ ); \r
+ public static ElementClass TANK2_BUTTON_CLASS =\r
+ ElementClass.compile(\r
+ Clickable.INSTANCE,\r
+ DefaultTransform.INSTANCE,\r
+ Tank2Paint.INSTANCE,\r
+ FILL_COLOR_HANDLER,\r
+ ADDITIONAL_COLOR_HANDLER, \r
+ BORDER_COLOR_HANDLER,\r
+ Resizeable.initialSize(40, 15)\r
+ ); \r
+ \r
+ \r
+ \r
+ public static class BoilerPaint implements SceneGraph { \r
+\r
+ private static final long serialVersionUID = -4545277680608759806L;\r
+ public static final BoilerPaint INSTANCE = new BoilerPaint();\r
+ \r
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
+\r
+ @Override\r
+ public void cleanup(IElement e) {\r
+ Node node = e.removeHint(SG_NODE);\r
+ if (node != null)\r
+ node.remove();\r
+ }\r
+\r
+ @Override\r
+ public void init(IElement e, G2DParentNode parent) {\r
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
+ if (node == null) {\r
+ node = parent.addNode(G2DParentNode.class);\r
+ e.setHint(SG_NODE, node);\r
+ }\r
+ AffineTransform at = ElementUtils.getTransform(e);\r
+ if(at != null) node.setTransform(at);\r
+\r
+ Color fc = ElementUtils.getFillColor(e);\r
+ Color bc = ElementUtils.getBorderColor(e);\r
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
+ Image ps = null;\r
+ \r
+ if (press==null) {\r
+ ps = new BoilerSymbol2(fc, bc, OperationSymbols.BOILER_HES);\r
+ } else {\r
+ ps = OperationSymbols.BOILER_SHADOW;\r
+// ????????? \r
+// if (press==PressStatus.NORMAL) \r
+// gc.getGraphics2D().translate(-2, -3);\r
+ }\r
+ \r
+ ps.init(node);\r
+ }\r
+ }\r
+ \r
+ \r
+ public static class NoSpinPaint implements SceneGraph {\r
+\r
+ private static final long serialVersionUID = 801958319361745846L;\r
+ public static final NoSpinPaint INSTANCE = new NoSpinPaint();\r
+ \r
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
+\r
+ @Override\r
+ public void cleanup(IElement e) {\r
+ Node node = e.removeHint(SG_NODE);\r
+ if (node != null)\r
+ node.remove();\r
+ }\r
+\r
+ @Override\r
+ public void init(IElement e, G2DParentNode parent) {\r
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
+ if (node == null) {\r
+ node = parent.addNode(G2DParentNode.class);\r
+ e.setHint(SG_NODE, node);\r
+ }\r
+ AffineTransform at = ElementUtils.getTransform(e);\r
+ if(at != null) node.setTransform(at);\r
+\r
+ Color fc = ElementUtils.getFillColor(e);\r
+ Color bc = ElementUtils.getBorderColor(e);\r
+ if (bc==null) return;\r
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
+ Image ps = null;\r
+ \r
+ if (press==null) {\r
+ ps = new NoSpinSymbol(fc, bc);\r
+ } else {\r
+ ps = OperationSymbols.NO_SPIN_SHADOW;\r
+// ????????? \r
+// if (press==PressStatus.NORMAL)\r
+// gc.getGraphics2D().translate(-2, -3);\r
+ }\r
+ \r
+ ps.init(node);\r
+ }\r
+ }\r
+\r
+ \r
+ public static class ControlValvePaint implements SceneGraph {\r
+\r
+ private static final long serialVersionUID = -8208633777668762027L;\r
+ public static final ControlValvePaint INSTANCE = new ControlValvePaint();\r
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
+\r
+ @Override\r
+ public void cleanup(IElement e) {\r
+ Node node = e.removeHint(SG_NODE);\r
+ if (node != null)\r
+ node.remove();\r
+ }\r
+\r
+ @Override\r
+ public void init(IElement e, G2DParentNode parent) {\r
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
+ if (node == null) {\r
+ node = parent.addNode(G2DParentNode.class);\r
+ e.setHint(SG_NODE, node);\r
+ }\r
+ AffineTransform at = ElementUtils.getTransform(e);\r
+ if(at != null) node.setTransform(at);\r
+\r
+ Color fc = ElementUtils.getFillColor(e);\r
+ Color bc = ElementUtils.getBorderColor(e);\r
+ if (bc==null) return;\r
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
+ Image ps = null;\r
+ \r
+ if (press==null) {\r
+ ps = new ControlValveSymbol(fc, bc);\r
+ } else {\r
+ ps = OperationSymbols.CONTROLVALVE_SHADOW;\r
+// ????????? \r
+// if (press==PressStatus.NORMAL)\r
+// gc.getGraphics2D().translate(-2, -3);\r
+ }\r
+ \r
+ ps.init(node);\r
+ }\r
+ } \r
+ \r
+ public static class ThreeWayValvePaint implements SceneGraph {\r
+\r
+ private static final long serialVersionUID = -1848763601182093048L;\r
+ public static final ThreeWayValvePaint INSTANCE = new ThreeWayValvePaint();\r
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
+\r
+ @Override\r
+ public void cleanup(IElement e) {\r
+ Node node = e.removeHint(SG_NODE);\r
+ if (node != null)\r
+ node.remove();\r
+ }\r
+\r
+ @Override\r
+ public void init(IElement e, G2DParentNode parent) {\r
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
+ if (node == null) {\r
+ node = parent.addNode(G2DParentNode.class);\r
+ e.setHint(SG_NODE, node);\r
+ }\r
+ AffineTransform at = ElementUtils.getTransform(e);\r
+ if(at != null) node.setTransform(at);\r
+\r
+ Color fc = ElementUtils.getFillColor(e);\r
+ Color bc = ElementUtils.getBorderColor(e);\r
+ if (bc==null) return;\r
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
+ Image ps = null;\r
+ \r
+ if (press==null) {\r
+ ps = new ThreeWayValveSymbol(fc, bc);\r
+ } else {\r
+ ps = OperationSymbols.THREEWAYVALVE_SHADOW;\r
+// ????????? \r
+// if (press==PressStatus.NORMAL)\r
+// gc.getGraphics2D().translate(-2, -3);\r
+ }\r
+ \r
+ ps.init(node);\r
+ }\r
+ } \r
+ \r
+ public static class HeatExchangerPaint implements SceneGraph {\r
+\r
+ private static final long serialVersionUID = -5482316746105556083L;\r
+ public static final HeatExchangerPaint INSTANCE = new HeatExchangerPaint(); \r
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
+\r
+ @Override\r
+ public void cleanup(IElement e) {\r
+ Node node = e.removeHint(SG_NODE);\r
+ if (node != null)\r
+ node.remove();\r
+ }\r
+\r
+ @Override\r
+ public void init(IElement e, G2DParentNode parent) {\r
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
+ if (node == null) {\r
+ node = parent.addNode(G2DParentNode.class);\r
+ e.setHint(SG_NODE, node);\r
+ }\r
+ AffineTransform at = ElementUtils.getTransform(e);\r
+ if(at != null) node.setTransform(at);\r
+\r
+ Color fc = ElementUtils.getFillColor(e);\r
+ Color bc = ElementUtils.getBorderColor(e);\r
+ if (bc==null) return;\r
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
+ Image ps = null;\r
+ \r
+ if (press==null) {\r
+ ps = new HeatExchangerSymbol(fc, bc);\r
+ } else {\r
+ ps = OperationSymbols.HEATEXCHANGER_SHADOW;\r
+// ????????? \r
+// if (press==PressStatus.NORMAL)\r
+// gc.getGraphics2D().translate(-2, -3);\r
+ }\r
+ \r
+ ps.init(node);\r
+ }\r
+ } \r
+ \r
+ \r
+ \r
+ public static class PumpPaint implements SceneGraph {\r
+\r
+ private static final long serialVersionUID = 5899800511420262337L;\r
+ public static final PumpPaint INSTANCE = new PumpPaint(); \r
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
+\r
+ @Override\r
+ public void cleanup(IElement e) {\r
+ Node node = e.removeHint(SG_NODE);\r
+ if (node != null)\r
+ node.remove();\r
+ }\r
+\r
+ @Override\r
+ public void init(IElement e, G2DParentNode parent) {\r
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
+ if (node == null) {\r
+ node = parent.addNode(G2DParentNode.class);\r
+ e.setHint(SG_NODE, node);\r
+ }\r
+ AffineTransform at = ElementUtils.getTransform(e);\r
+ if(at != null) node.setTransform(at);\r
+\r
+ Color fc = ElementUtils.getFillColor(e);\r
+ Color bc = ElementUtils.getBorderColor(e);\r
+ if (bc==null) return;\r
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
+ Image ps = null;\r
+ \r
+ if (press==null) {\r
+ ps = new PumpSymbol(fc, bc);\r
+ } else {\r
+ ps = OperationSymbols.PUMP_SHADOW;\r
+// ????????? \r
+// if (press==PressStatus.NORMAL)\r
+// gc.getGraphics2D().translate(-2, -3);\r
+ }\r
+ \r
+ ps.init(node);\r
+ }\r
+ } \r
+ \r
+ \r
+ public static class ShutoffValvePaint implements SceneGraph {\r
+\r
+ private static final long serialVersionUID = 6258753947743405959L;\r
+ public static final ShutoffValvePaint INSTANCE = new ShutoffValvePaint(); \r
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
+\r
+ @Override\r
+ public void cleanup(IElement e) {\r
+ Node node = e.removeHint(SG_NODE);\r
+ if (node != null)\r
+ node.remove();\r
+ }\r
+\r
+ @Override\r
+ public void init(IElement e, G2DParentNode parent) {\r
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
+ if (node == null) {\r
+ node = parent.addNode(G2DParentNode.class);\r
+ e.setHint(SG_NODE, node);\r
+ }\r
+ AffineTransform at = ElementUtils.getTransform(e);\r
+ if(at != null) node.setTransform(at);\r
+\r
+ Color fc = ElementUtils.getFillColor(e);\r
+ Color bc = ElementUtils.getBorderColor(e);\r
+ if (bc==null) return;\r
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
+ Image ps = null;\r
+ \r
+ if (press==null) {\r
+ ps = new ShutoffValveSymbol(fc, bc);\r
+ } else {\r
+ ps = OperationSymbols.SHUTOFFVALVE_SHADOW;\r
+// ????????? \r
+// if (press==PressStatus.NORMAL)\r
+// gc.getGraphics2D().translate(-2, -3);\r
+ }\r
+ \r
+ ps.init(node);\r
+ }\r
+ } \r
+ \r
+ \r
+ \r
+ public static class SwitchPaint implements SceneGraph {\r
+\r
+ private static final long serialVersionUID = -171980746141963729L;\r
+ public static final SwitchPaint INSTANCE = new SwitchPaint();\r
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
+\r
+ @Override\r
+ public void cleanup(IElement e) {\r
+ Node node = e.removeHint(SG_NODE);\r
+ if (node != null)\r
+ node.remove();\r
+ }\r
+\r
+ @Override\r
+ public void init(IElement e, G2DParentNode parent) {\r
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
+ if (node == null) {\r
+ node = parent.addNode(G2DParentNode.class);\r
+ e.setHint(SG_NODE, node);\r
+ }\r
+ AffineTransform at = ElementUtils.getTransform(e);\r
+ if(at != null) node.setTransform(at);\r
+\r
+ Color bc = ElementUtils.getBorderColor(e);\r
+ if (bc==null) return;\r
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
+ Image ps = null;\r
+ \r
+ if (press==null) {\r
+ ps = new SwitchSymbol(bc);\r
+ } else {\r
+ ps = OperationSymbols.SWITCH_SHADOW;\r
+// ????????? \r
+// if (press==PressStatus.NORMAL)\r
+// gc.getGraphics2D().translate(-2, -3);\r
+ }\r
+ ps.init(node);\r
+ }\r
+ } \r
+\r
+ \r
+ public static class TurbinePaint implements SceneGraph {\r
+\r
+ private static final long serialVersionUID = -920598007509848402L;\r
+ public static final TurbinePaint INSTANCE = new TurbinePaint(); \r
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
+\r
+ @Override\r
+ public void cleanup(IElement e) {\r
+ Node node = e.removeHint(SG_NODE);\r
+ if (node != null)\r
+ node.remove();\r
+ }\r
+\r
+ @Override\r
+ public void init(IElement e, G2DParentNode parent) {\r
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
+ if (node == null) {\r
+ node = parent.addNode(G2DParentNode.class);\r
+ e.setHint(SG_NODE, node);\r
+ }\r
+ \r
+ AffineTransform at = ElementUtils.getTransform(e);\r
+ if(at != null) node.setTransform(at);\r
+\r
+ Color fc = ElementUtils.getFillColor(e);\r
+ Color bc = ElementUtils.getBorderColor(e);\r
+ if (bc==null) return;\r
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
+ Image ps = null;\r
+ \r
+ if (press==null) {\r
+ ps = new TurbineSymbol(bc, fc);\r
+ } else {\r
+ ps = OperationSymbols.TURBINE_SHADOW;\r
+// ????????? \r
+// if (press==PressStatus.NORMAL)\r
+// gc.getGraphics2D().translate(-2, -3);\r
+ }\r
+ ps.init(node);\r
+ }\r
+ } \r
+\r
+ public static class CompressorPaint implements SceneGraph {\r
+\r
+ private static final long serialVersionUID = 6961201125549409431L;\r
+ public static final CompressorPaint INSTANCE = new CompressorPaint(); \r
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
+\r
+ @Override\r
+ public void cleanup(IElement e) {\r
+ Node node = e.removeHint(SG_NODE);\r
+ if (node != null)\r
+ node.remove();\r
+ }\r
+\r
+ @Override\r
+ public void init(IElement e, G2DParentNode parent) {\r
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
+ if (node == null) {\r
+ node = parent.addNode(G2DParentNode.class);\r
+ e.setHint(SG_NODE, node);\r
+ }\r
+ \r
+ AffineTransform at = ElementUtils.getTransform(e);\r
+ if(at != null) node.setTransform(at);\r
+\r
+ Color fc = ElementUtils.getFillColor(e);\r
+ Color bc = ElementUtils.getBorderColor(e);\r
+ if (bc==null) return;\r
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
+ Image ps = null;\r
+ \r
+ if (press==null) {\r
+ ps = new CompressorSymbol(bc, fc);\r
+ } else {\r
+ ps = OperationSymbols.COMPRESSOR_SHADOW;\r
+// ????????? \r
+// if (press==PressStatus.NORMAL)\r
+// gc.getGraphics2D().translate(-2, -3);\r
+ }\r
+ ps.init(node);\r
+ }\r
+ } \r
+ \r
+ public static class VoltageTransformerPaint implements SceneGraph {\r
+\r
+ private static final long serialVersionUID = -4935588203299292629L;\r
+ public static final VoltageTransformerPaint INSTANCE = new VoltageTransformerPaint(); \r
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
+\r
+ @Override\r
+ public void cleanup(IElement e) {\r
+ Node node = e.removeHint(SG_NODE);\r
+ if (node != null)\r
+ node.remove();\r
+ }\r
+\r
+ @Override\r
+ public void init(IElement e, G2DParentNode parent) {\r
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
+ if (node == null) {\r
+ node = parent.addNode(G2DParentNode.class);\r
+ e.setHint(SG_NODE, node);\r
+ }\r
+ AffineTransform at = ElementUtils.getTransform(e);\r
+ if(at != null) node.setTransform(at);\r
+\r
+ Color color1 = ElementUtils.getBorderColor(e);\r
+ Color color2 = ElementUtils.getAdditionalColor(e);\r
+ if (color1==null || color2==null) return;\r
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
+ Image ps = null;\r
+ \r
+ if (press==null) {\r
+ ps = new VoltageTransformerSymbol(color1, color2);\r
+ } else {\r
+ ps = OperationSymbols.VOLTAGETRANSFORMER_SHADOW;\r
+// ????????? \r
+// if (press==PressStatus.NORMAL)\r
+// gc.getGraphics2D().translate(-2, -3);\r
+ }\r
+ ps.init(node);\r
+ }\r
+ } \r
+ \r
+ public static class ChimneyPaint implements SceneGraph {\r
+\r
+ private static final long serialVersionUID = 1001249555587430505L;\r
+ public static final ChimneyPaint INSTANCE = new ChimneyPaint(); \r
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
+\r
+ @Override\r
+ public void cleanup(IElement e) {\r
+ Node node = e.removeHint(SG_NODE);\r
+ if (node != null)\r
+ node.remove();\r
+ }\r
+\r
+ @Override\r
+ public void init(IElement e, G2DParentNode parent) {\r
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
+ if (node == null) {\r
+ node = parent.addNode(G2DParentNode.class);\r
+ e.setHint(SG_NODE, node);\r
+ }\r
+ AffineTransform at = ElementUtils.getTransform(e);\r
+ if(at != null) node.setTransform(at);\r
+\r
+ Color fc = ElementUtils.getFillColor(e);\r
+ Color bc = ElementUtils.getBorderColor(e);\r
+ if (bc==null) return;\r
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
+ Image ps = null;\r
+ \r
+ if (press==null) {\r
+ ps = new ChimneySymbol(fc, bc);\r
+ } else {\r
+ ps = OperationSymbols.CHIMNEY_SHADOW;\r
+// ????????? \r
+// if (press==PressStatus.NORMAL)\r
+// gc.getGraphics2D().translate(-2, -3);\r
+ }\r
+ ps.init(node);\r
+ }\r
+ } \r
+ \r
+ public static class GeneratorPaint implements SceneGraph {\r
+\r
+ private static final long serialVersionUID = -1080419588160841727L;\r
+ public static final GeneratorPaint INSTANCE = new GeneratorPaint(); \r
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
+\r
+ @Override\r
+ public void cleanup(IElement e) {\r
+ Node node = e.removeHint(SG_NODE);\r
+ if (node != null)\r
+ node.remove();\r
+ }\r
+\r
+ @Override\r
+ public void init(IElement e, G2DParentNode parent) {\r
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
+ if (node == null) {\r
+ node = parent.addNode(G2DParentNode.class);\r
+ e.setHint(SG_NODE, node);\r
+ }\r
+ AffineTransform at = ElementUtils.getTransform(e);\r
+ if(at != null) node.setTransform(at);\r
+\r
+ Color fc = ElementUtils.getFillColor(e);\r
+ Color bc = ElementUtils.getBorderColor(e);\r
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
+ Image ps = null;\r
+ \r
+ if (press==null) {\r
+ ps = new GeneratorSymbol(fc, bc);\r
+ } else {\r
+ ps = OperationSymbols.GENERATOR_SHADOW;\r
+// ????????? \r
+// if (press==PressStatus.NORMAL)\r
+// gc.getGraphics2D().translate(-2, -3);\r
+ }\r
+ ps.init(node);\r
+ }\r
+ } \r
+ \r
+ public static class TankPaint implements SceneGraph {\r
+\r
+ private static final long serialVersionUID = -461979630655554477L;\r
+ public static final TankPaint INSTANCE = new TankPaint(); \r
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
+\r
+ @Override\r
+ public void cleanup(IElement e) {\r
+ Node node = e.removeHint(SG_NODE);\r
+ if (node != null)\r
+ node.remove();\r
+ }\r
+\r
+ @Override\r
+ public void init(IElement e, G2DParentNode parent) {\r
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
+ if (node == null) {\r
+ node = parent.addNode(G2DParentNode.class);\r
+ e.setHint(SG_NODE, node);\r
+ }\r
+ AffineTransform at = ElementUtils.getTransform(e);\r
+ if(at != null) node.setTransform(at);\r
+\r
+ Color fc = ElementUtils.getFillColor(e);\r
+ Color bc = ElementUtils.getBorderColor(e);\r
+ Rectangle2D bounds = ElementUtils.getElementBounds(e);\r
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
+ Image ps = null;\r
+ \r
+ if (press==null) {\r
+ ps = new TankSymbol(bounds, 5.0, bc, fc);\r
+ } else {\r
+ ps = OperationSymbols.TANK_SHADOW;\r
+// ????????? \r
+// if (press==PressStatus.NORMAL)\r
+// gc.getGraphics2D().translate(-2, -3);\r
+ }\r
+ ps.init(node);\r
+ }\r
+ }\r
+ \r
+ public static class Tank2Paint implements SceneGraph {\r
+\r
+ private static final long serialVersionUID = 5232349098800595743L;\r
+ public static final Tank2Paint INSTANCE = new Tank2Paint();\r
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
+\r
+ @Override\r
+ public void cleanup(IElement e) {\r
+ Node node = e.removeHint(SG_NODE);\r
+ if (node != null)\r
+ node.remove();\r
+ }\r
+\r
+ @Override\r
+ public void init(IElement e, G2DParentNode parent) {\r
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
+ if (node == null) {\r
+ node = parent.addNode(G2DParentNode.class);\r
+ e.setHint(SG_NODE, node);\r
+ }\r
+ AffineTransform at = ElementUtils.getTransform(e);\r
+ if(at != null) node.setTransform(at);\r
+\r
+ Color fc = ElementUtils.getFillColor(e);\r
+ Color bc = ElementUtils.getBorderColor(e);\r
+ Color ac = ElementUtils.getAdditionalColor(e);\r
+ Rectangle2D bounds = ElementUtils.getElementBounds(e);\r
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
+ Image ps = null;\r
+ \r
+ if (press==null) {\r
+ ps = new Tank2Symbol(bounds, 5.0, bc, fc, ac);\r
+ } else {\r
+ ps = OperationSymbols.TANK2_SHADOW;\r
+// ????????? \r
+// if (press==PressStatus.NORMAL)\r
+// gc.getGraphics2D().translate(-2, -3);\r
+ }\r
+ ps.init(node);\r
+ }\r
+ } \r
+ \r
+}
\ No newline at end of file