]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/TurnComponent.java
ff12143bcf01dd4497299aad442e42bdd1319ff7
[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         @RelatedGetValue(Plant3D.URIs.HasRotationAngle)
106         @GetPropertyValue(name="Rotation Angle", value=Plant3D.URIs.HasRotationAngle, tabId = "Default")
107         public Double getRotationAngle() {
108                 if (!controlPoint.isFixed())
109                         return null;
110                 Double d = controlPoint.getRotationAngle();
111                 if (d == null)
112                         return 0.0;
113                 return MathTools.radToDeg(d);
114         }
115         @RelatedSetValue(Plant3D.URIs.HasRotationAngle)
116         @SetPropertyValue(value=Plant3D.URIs.HasRotationAngle)
117         public void setRotationAngle(Double angle) {
118                 if (!controlPoint.isFixed())
119                         return;
120                 
121                 if (angle == null || Double.isInfinite(angle) || Double.isNaN(angle)) {
122                         return;
123                 }
124                 angle = MathTools.degToRad(angle);
125                 if (controlPoint.getRotationAngle() != null && Math.abs(controlPoint.getRotationAngle()-angle) < MathTools.NEAR_ZERO)
126                         return;
127                 controlPoint.setRotationAngle(angle);
128                 try {
129                         PipingRules.requestUpdate(getControlPoint());
130                 } catch (Exception e) {
131                         // TODO Auto-generated catch block
132                         e.printStackTrace();
133                 }   
134         }
135         
136         @RelatedGetValue(Plant3D.URIs.IsReversed)
137         @GetPropertyValue(name="Reverse", value=Plant3D.URIs.IsReversed, tabId = "Default")
138         public Boolean isReversed() {
139                 if (!controlPoint.isFixed())
140                         return null;
141                 Boolean d = controlPoint._getReversed();
142                 return d;
143         }
144         @RelatedSetValue(Plant3D.URIs.IsReversed)
145         //@SetPropertyValue(value=Plant3D.URIs.IsReversed)
146         public void setReversed(Boolean reverse) {
147                 if (!controlPoint.isFixed())
148                         return;
149                 
150                 if (reverse == null) {
151                         return;
152                 }
153                 controlPoint.setReversed(reverse);
154                 try {
155                         PipingRules.requestUpdate(getControlPoint());
156                 } catch (Exception e) {
157                         // TODO Auto-generated catch block
158                         e.printStackTrace();
159                 }   
160         }
161         
162         @Override
163         protected double[] getColor() {
164                 if (getControlPoint() == null || !getControlPoint().isFixed())
165                         return new double[]{0.6,0.6,0.6};
166                 else
167                         return new double[]{1.0,0.0,0.0};
168         }
169 }