import org.simantics.g3d.property.annotations.GetPropertyValue;
import org.simantics.g3d.scenegraph.G3DNode;
import org.simantics.plant3d.scenegraph.IP3DNode;
+import org.simantics.plant3d.scenegraph.Nozzle;
+import org.simantics.plant3d.scenegraph.P3DRootNode;
import org.simantics.plant3d.scenegraph.PipeRun;
import org.simantics.plant3d.scenegraph.PipelineComponent;
return children.size() == 1 && children.get(0).isDualSub();
}
+ public boolean isAxial() {
+ return isInline() && !isDualInline();
+ }
+
public boolean isSizeChange() {
return isSizeChange;
// if (children.size() == 0)
return q1;
}
- public Vector3d getDirection(Direction direction) {
- if (isDirected())
- return getDirectedControlPointDirection();
- if (isTurn() && isFixed()) {
- if (direction == Direction.NEXT) {
- if (previous != null) {
- PipeControlPoint pcp = this;
- Vector3d dir = new Vector3d();
- dir.sub(pcp.getWorldPosition(),previous.getWorldPosition());
- if (dir.lengthSquared() > MathTools.NEAR_ZERO)
- dir.normalize();
- else
- return null;
- Quat4d q = getControlPointOrientationQuat(dir, pcp.getRotationAngle() != null ? pcp.getRotationAngle() : 0.0);
- AxisAngle4d aa = new AxisAngle4d(MathTools.Y_AXIS,pcp.getTurnAngle() == null ? 0.0 : pcp.getTurnAngle());
- Quat4d q2 = MathTools.getQuat(aa);
- Vector3d v = new Vector3d(1.,0.,0.);
- Vector3d offset = new Vector3d();
- MathTools.rotate(q2, v, offset);
- MathTools.rotate(q, offset, dir);
- return dir;
- }
- } else {
- if (next != null) {
- PipeControlPoint pcp = this;
- Vector3d dir = new Vector3d();
- dir.sub(next.getWorldPosition(),pcp.getWorldPosition());
- if (dir.lengthSquared() > MathTools.NEAR_ZERO)
- dir.normalize();
- else
- return null;
- Quat4d q = getControlPointOrientationQuat(dir, pcp.getRotationAngle() != null ? pcp.getRotationAngle() : 0.0);
- AxisAngle4d aa = new AxisAngle4d(MathTools.Y_AXIS,pcp.getTurnAngle() == null ? 0.0 : pcp.getTurnAngle());
- Quat4d q2 = MathTools.getQuat(aa);
- Vector3d v = new Vector3d(1.,0.,0.);
- Vector3d offset = new Vector3d();
- MathTools.rotate(q2, v, offset);
- MathTools.rotate(q, offset, dir);
- return dir;
- }
- }
- }
- return null;
- }
-
public void insert(PipeControlPoint previous, PipeControlPoint next) {
// inserting an offsetpoint is error,
if (isDualSub())
dir.normalize();
return dir;
}
+
+ public Vector3d getDirection(Direction direction) {
+ if (isDirected())
+ return getDirectedControlPointDirection();
+ if (isTurn() && isFixed()) {
+ if (direction == Direction.NEXT) {
+ if (previous != null) {
+ PipeControlPoint pcp = this;
+ Vector3d dir = new Vector3d();
+ dir.sub(pcp.getWorldPosition(),previous.getWorldPosition());
+ if (dir.lengthSquared() > MathTools.NEAR_ZERO)
+ dir.normalize();
+ else
+ return null;
+ Quat4d q = getControlPointOrientationQuat(dir, pcp.getRotationAngle() != null ? pcp.getRotationAngle() : 0.0);
+ AxisAngle4d aa = new AxisAngle4d(MathTools.Y_AXIS,pcp.getTurnAngle() == null ? 0.0 : pcp.getTurnAngle());
+ Quat4d q2 = MathTools.getQuat(aa);
+ Vector3d v = new Vector3d(1.,0.,0.);
+ Vector3d offset = new Vector3d();
+ MathTools.rotate(q2, v, offset);
+ MathTools.rotate(q, offset, dir);
+ return dir;
+ }
+ } else {
+ if (next != null) {
+ PipeControlPoint pcp = this;
+ Vector3d dir = new Vector3d();
+ dir.sub(next.getWorldPosition(),pcp.getWorldPosition());
+ if (dir.lengthSquared() > MathTools.NEAR_ZERO)
+ dir.normalize();
+ else
+ return null;
+ Quat4d q = getControlPointOrientationQuat(dir, pcp.getRotationAngle() != null ? pcp.getRotationAngle() : 0.0);
+ AxisAngle4d aa = new AxisAngle4d(MathTools.Y_AXIS,pcp.getTurnAngle() == null ? 0.0 : pcp.getTurnAngle());
+ Quat4d q2 = MathTools.getQuat(aa);
+ Vector3d v = new Vector3d(1.,0.,0.);
+ Vector3d offset = new Vector3d();
+ MathTools.rotate(q2, v, offset);
+ MathTools.rotate(q, offset, dir);
+ return dir;
+ }
+ }
+ }
+ return null;
+ }
public Vector3d getPathLegDirection(Direction direction) {
if (direction == Direction.NEXT) {
public void getInlineControlPointEnds(Tuple3d p1, Tuple3d p2) {
assert (isInline());
- Vector3d pos = getWorldPosition();
- Vector3d dir = getPathLegDirection(Direction.NEXT);
+ PipeControlPoint sub = isAxial() ? this : getSubPoint().get(0);
+ Vector3d pos = getWorldPosition(), pos2 = sub == this ? pos : sub.getWorldPosition();
+ Vector3d dir = sub.getPathLegDirection(Direction.NEXT);
+
dir.normalize();
dir.scale(length * 0.5);
p1.set(pos);
- p2.set(pos);
+ p2.set(pos2);
p1.sub(dir);
p2.add(dir);
}
public void getControlPointEnds(Tuple3d p1, Tuple3d p2) {
- Vector3d pos = getWorldPosition();
+ PipeControlPoint sub = isAxial() ? this : getSubPoint().get(0);
+ Vector3d pos = getWorldPosition(), pos2 = sub == this ? pos : sub.getWorldPosition();
+
Vector3d dir1 = getPathLegDirection(Direction.PREVIOUS);
dir1.normalize();
- Vector3d dir2 = getPathLegDirection(Direction.NEXT);
+ Vector3d dir2 = sub.getPathLegDirection(Direction.NEXT);
dir2.normalize();
if (isInline()) {
dir1.scale(length * 0.5);
dir2.scale(length);
}
p1.set(pos);
- p2.set(pos);
+ p2.set(pos2);
p1.add(dir1);
p2.add(dir2);
}
+ public void getEndDirections(Tuple3d v1, Tuple3d v2) {
+ PipeControlPoint sub = isAxial() ? this : getSubPoint().get(0);
+
+ Vector3d dir1 = getPathLegDirection(Direction.PREVIOUS);
+ dir1.normalize();
+ Vector3d dir2 = sub.getPathLegDirection(Direction.NEXT);
+ dir2.normalize();
+ v1.set(dir1);
+ v2.set(dir2);
+ }
+
public void getInlineControlPointEnds(Tuple3d p1, Tuple3d p2, Vector3d dir) {
assert (isInline());
}
}
}
-
+
public void _remove() {
+ _remove(true);
+ }
+
+ public void _remove(boolean renconnect) {
if (component == null && next == null && previous == null)
return;
if (isDualInline() || isDualSub()) {
return;
}
if (currentNext != null && currentPrev != null) {
- boolean link = true;
+ boolean link = renconnect;
if (currentNext.isBranchEnd()) {
link = false;
// currentNext.setPrevious(null);
e.printStackTrace();
}
}
+
+ public void removeAndSplit() {
+ PipeControlPoint currentPrev = previous;
+ PipeControlPoint currentNext = next;
+
+ if (next != null && previous != null) {
+ P3DRootNode root = (P3DRootNode)getPipelineComponent().getRootNode();
+ PipeRun nextPipeRun = new PipeRun();
+ nextPipeRun.setName(root.getUniqueName("PipeRun"));
+ root.addChild(nextPipeRun);
+
+ PipeRun previousRun = previous.getPipeRun();
+ nextPipeRun.setPipeDiameter(previousRun.getPipeDiameter());
+ nextPipeRun.setTurnRadius(previousRun.getTurnRadius());
+
+ PipelineComponent n = next.getPipelineComponent();
+ while (n != null) {
+ if (! (n instanceof Nozzle)) {
+ n.deattach();
+ nextPipeRun.addChild(n);
+ } else
+ n.setPipeRun(nextPipeRun);
+ n = n.getNext();
+ }
+ }
+ _remove(false);
+ try {
+ if (currentNext != null)
+ PipingRules.requestUpdate(currentNext);
+ if (currentPrev != null)
+ PipingRules.requestUpdate(currentPrev);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
private void checkRemove(PipeRun pipeRun) {
Collection<PipeControlPoint> points = pipeRun.getControlPoints();