]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/TurnComponent.java
Handle fixed turn components when pipe run is reversed.
[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 }