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 0.0;
return MathTools.radToDeg(d);
}
+
@RelatedSetValue(Plant3D.URIs.HasRotationAngle)
@SetPropertyValue(value=Plant3D.URIs.HasRotationAngle)
public void setRotationAngle(Double angle) {
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);
+ }
}