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 updateParameterMap() { Map map = new HashMap(); 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(); } @Override protected double[] getColor() { if (getControlPoint() == null || !getControlPoint().isFixed()) return new double[]{0.6,0.6,0.6}; else return new double[]{1.0,0.0,0.0}; } }