]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/TurnComponent.java
Support for fixed turn components
[simantics/3d.git] / org.simantics.plant3d / src / org / simantics / plant3d / scenegraph / TurnComponent.java
1 package org.simantics.plant3d.scenegraph;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 import javax.vecmath.Vector3d;
7
8 import org.simantics.g3d.math.MathTools;
9 import org.simantics.g3d.property.annotations.GetPropertyValue;
10 import org.simantics.g3d.property.annotations.SetPropertyValue;
11 import org.simantics.g3d.scenegraph.base.ParentNode;
12 import org.simantics.objmap.graph.annotations.DynamicGraphType;
13 import org.simantics.objmap.graph.annotations.GetType;
14 import org.simantics.objmap.graph.annotations.RelatedGetValue;
15 import org.simantics.objmap.graph.annotations.RelatedSetValue;
16 import org.simantics.objmap.graph.annotations.SetType;
17 import org.simantics.plant3d.ontology.Plant3D;
18 import org.simantics.plant3d.scenegraph.controlpoint.ControlPointFactory;
19 import org.simantics.plant3d.scenegraph.controlpoint.PipeControlPoint;
20 import org.simantics.plant3d.scenegraph.controlpoint.PipingRules;
21
22 @DynamicGraphType(Plant3D.URIs.TurnComponent)
23 public class TurnComponent extends PipelineComponent {
24
25         
26         private String type;
27         private PipeControlPoint controlPoint;
28         
29         @GetType(Plant3D.URIs.TurnComponent)
30         public String getType() {
31                 return type;
32         }
33         
34         @SetType(Plant3D.URIs.TurnComponent)
35         public void setType(String type) throws Exception{
36                 this.type = type;
37                 controlPoint = ControlPointFactory.create(this);
38         }
39         
40         @Override
41         public PipeControlPoint getControlPoint() {
42                 return controlPoint;
43         }
44         
45         @Override
46         public void setParent(ParentNode<?> parent, String name) {
47                 super.setParent(parent, name);
48                 setPipeRun((PipeRun)parent);
49         }
50         
51         @Override
52         public Map<String, Object> updateParameterMap() {
53                 Map<String,Object> map = new HashMap<String, Object>();
54                 
55                 PipeRun pipeRun = getPipeRun();
56                 if (pipeRun != null) {
57                         map.put("turnRadius", pipeRun.getTurnRadius());
58                         map.put("radius", pipeRun.getPipeDiameter() * 0.5);
59                 }
60                 if (controlPoint != null && controlPoint.getTurnAngle() != null  && !Double.isNaN(controlPoint.getTurnAngle())) {
61                         map.put("turnAngle", controlPoint.getTurnAngle());
62                 }
63                 return map;
64         }
65         
66         public boolean isVariableAngle() {
67         return !controlPoint.isFixed();
68     }
69         
70         @Override
71         public void updateParameters() {
72             super.updateParameters();
73             if (!isVariableAngle()) {
74             Map<String,Object> calculated = getCalculatedParameters();
75             if (calculated.containsKey("length")) {
76                 controlPoint.setLength((Double)calculated.get("length"));
77             }
78         }
79         }
80         
81         @RelatedGetValue(Plant3D.URIs.HasTurnAngle)
82         public Double getTurnAngle() {
83                 return getControlPoint().getTurnAngle();
84         }
85         
86         @RelatedSetValue(Plant3D.URIs.HasTurnAngle)
87         public void setTurnAngle(Double a) {
88             if (!getControlPoint().isFixed())
89                 return;
90             getControlPoint().setTurnAngle(a);            
91         }
92         
93         @GetPropertyValue(name="Turn Angle", value="turn angle", tabId = "Default")
94         public Double getTurnAngleDeg() {
95                 Double d = getControlPoint().getTurnAngle();
96                 if (d == null)
97                         return null;
98                 return MathTools.radToDeg(d);
99         }
100         
101         public Vector3d getTurnAxis() {
102                 return getControlPoint().getTurnAxis();
103         }
104         
105         @Override
106         public Vector3d getNormal() {
107                 return getTurnAxis();
108         }
109         
110         @RelatedGetValue(Plant3D.URIs.HasRotationAngle)
111     @GetPropertyValue(name="Rotation Angle", value=Plant3D.URIs.HasRotationAngle, tabId = "Default")
112     public Double getRotationAngle() {
113         if (!controlPoint.isFixed())
114             return null;
115         Double d = controlPoint.getRotationAngle();
116         if (d == null)
117             return 0.0;
118         return MathTools.radToDeg(d);
119     }
120     @RelatedSetValue(Plant3D.URIs.HasRotationAngle)
121     @SetPropertyValue(value=Plant3D.URIs.HasRotationAngle)
122     public void setRotationAngle(Double angle) {
123         if (!controlPoint.isFixed())
124             return;
125         
126         if (angle == null || Double.isInfinite(angle) || Double.isNaN(angle)) {
127             return;
128         }
129         angle = MathTools.degToRad(angle);
130         if (controlPoint.getRotationAngle() != null && Math.abs(controlPoint.getRotationAngle()-angle) < MathTools.NEAR_ZERO)
131             return;
132         controlPoint.setRotationAngle(angle);
133         try {
134             PipingRules.requestUpdate(getControlPoint());
135         } catch (Exception e) {
136             // TODO Auto-generated catch block
137             e.printStackTrace();
138         }   
139     }
140         
141         @Override
142         protected double[] getColor() {
143                 if (getControlPoint() == null || !getControlPoint().isFixed())
144                         return new double[]{0.6,0.6,0.6};
145                 else
146                         return new double[]{1.0,0.0,0.0};
147         }
148 }