--- /dev/null
+package org.simantics.plant3d.scenegraph;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.vecmath.Vector3d;
+
+import org.simantics.g3d.math.MathTools;
+import org.simantics.g3d.property.annotations.GetPropertyValue;
+import org.simantics.g3d.scenegraph.base.ParentNode;
+import org.simantics.objmap.graph.annotations.DynamicGraphType;
+import org.simantics.objmap.graph.annotations.GetType;
+import org.simantics.objmap.graph.annotations.SetType;
+import org.simantics.plant3d.ontology.Plant3D;
+import org.simantics.plant3d.scenegraph.controlpoint.ControlPointFactory;
+import org.simantics.plant3d.scenegraph.controlpoint.PipeControlPoint;
+
+@DynamicGraphType(Plant3D.URIs.TurnComponent)
+public class TurnComponent extends PipelineComponent {
+
+
+ private String type;
+ private PipeControlPoint controlPoint;
+
+ @GetType(Plant3D.URIs.TurnComponent)
+ public String getType() {
+ return type;
+ }
+
+ @SetType(Plant3D.URIs.TurnComponent)
+ public void setType(String type) throws Exception{
+ this.type = type;
+ controlPoint = ControlPointFactory.create(this);
+ }
+
+ @Override
+ public PipeControlPoint getControlPoint() {
+ return controlPoint;
+ }
+
+ @Override
+ public void setParent(ParentNode<?> parent, String name) {
+ super.setParent(parent, name);
+ setPipeRun((PipeRun)parent);
+ }
+
+ @Override
+ public Map<String, Object> updateParameterMap() {
+ Map<String,Object> map = new HashMap<String, Object>();
+
+ PipeRun pipeRun = getPipeRun();
+ if (pipeRun != null) {
+ map.put("turnRadius", pipeRun.getTurnRadius());
+ map.put("radius", pipeRun.getPipeDiameter() * 0.5);
+ }
+ if (controlPoint != null && controlPoint.getTurnAngle() != null && !Double.isNaN(controlPoint.getTurnAngle())) {
+ map.put("turnAngle", controlPoint.getTurnAngle());
+ }
+ return map;
+ }
+
+
+ public Double getTurnAngle() {
+ return getControlPoint().getTurnAngle();
+ }
+
+ @GetPropertyValue(name="Turn Angle", value="turn angle", tabId = "Default")
+ public Double getTurnAngleDeg() {
+ Double d = getControlPoint().getTurnAngle();
+ if (d == null)
+ return null;
+ return MathTools.radToDeg(d);
+ }
+
+ public Vector3d getTurnAxis() {
+ return getControlPoint().getTurnAxis();
+ }
+
+ @Override
+ public Vector3d getNormal() {
+ return getTurnAxis();
+ }
+}