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