import java.util.HashMap;
import java.util.Map;
+import javax.vecmath.Point3d;
+import javax.vecmath.Vector3d;
+
import org.simantics.g3d.math.MathTools;
import org.simantics.g3d.property.annotations.GetPropertyValue;
import org.simantics.g3d.property.annotations.SetPropertyValue;
return !controlPoint.isFixed();
}
+ public boolean isModifialble() {
+ return controlPoint.isMod();
+ }
+
public boolean isSizeChange() {
- return controlPoint.isSizeChange();
+ return controlPoint.isSizeChange();
}
@RelatedGetValue(Plant3D.URIs.HasRotationAngle)
return 0.0;
return MathTools.radToDeg(d);
}
+
@RelatedSetValue(Plant3D.URIs.HasRotationAngle)
@SetPropertyValue(value=Plant3D.URIs.HasRotationAngle)
public void setRotationAngle(Double angle) {
if (controlPoint.getRotationAngle() != null && Math.abs(controlPoint.getRotationAngle()-angle) < MathTools.NEAR_ZERO)
return;
controlPoint.setRotationAngle(angle);
- try {
- PipingRules.requestUpdate(getControlPoint());
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
+ PipingRules.requestUpdate(getControlPoint());
+
}
@RelatedGetValue(Plant3D.URIs.IsReversed)
public Boolean isReversed() {
if (!controlPoint.isReverse())
return null;
- Boolean d = controlPoint.getReversed();
- if (d == null)
- return false;
+ Boolean d = controlPoint._getReversed();
return d;
}
@RelatedSetValue(Plant3D.URIs.IsReversed)
return;
}
controlPoint.setReversed(reverse);
- try {
- PipingRules.requestUpdate(getControlPoint());
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
+ PipingRules.requestUpdate(getControlPoint());
}
@Override
super.updateParameters();
if (!isVariableLength()) {
Map<String,Object> calculated = getCalculatedParameters();
- if (calculated.containsKey("length")) {
- controlPoint.setLength((Double)calculated.get("length"));
- }
+
if (calculated.containsKey("offset")) {
controlPoint.setOffset((Double)calculated.get("offset"));
componentCalculatedOffset = true;
} else {
componentCalculatedOffset = false;
}
+
+ Map<String,Object> total = getTotalParameters();
+
+ if (total.containsKey("length")) {
+ controlPoint.setLength((Double)total.get("length"));
+ }
+
+ PipingRules.requestUpdate(getControlPoint());
}
}
public Map<String, Object> updateParameterMap() {
Map<String,Object> map = new HashMap<String, Object>();
if (controlPoint != null) {
- if (!Double.isNaN(controlPoint.getLength()))
+ if (!Double.isNaN(controlPoint.getLength()) && controlPoint.isVariableLength())
map.put("length", controlPoint.getLength());
if (controlPoint.isDualInline()) {
- PipeControlPoint sub = controlPoint.getSubPoint().get(0);
+ PipeControlPoint sub = controlPoint.getDualSub();
PipeRun pipeRun2 = sub.getPipeRun();
if (pipeRun2 != null) {
map.put("radius2", pipeRun2.getPipeDiameter() * 0.5);
return map;
}
-
+ @SetPropertyValue("flowlength")
+ public void setFlowLength(double l) {
+ // Not allowed, if not at the end of a run
+ if (getNext() != null)
+ throw new IllegalStateException("Cannot edit length of a connected component");
+
+ double length = getFlowLength();
+ Point3d p1 = new Point3d(), p2 = new Point3d();
+ controlPoint.getControlPointEnds(p1, p2);
+ Vector3d dir = new Vector3d();
+ dir.sub(p2, p1);
+ dir.normalize();
+ dir.scale((l - length)/2);
+ Vector3d pos = new Vector3d(getPosition());
+ pos.add(dir);
+ setPosition(pos);
+ }
}