// Reducer requires pipe specs
public Double diameter;
+ public Double thickness;
public Double turnRadius;
// Variable length
public void setDiameter(Double diameter) {
this.diameter = diameter;
}
+
+ public double getThickness() {
+ return thickness;
+ }
+
+ public void setThickness(double thickness) {
+ this.thickness = thickness;
+ }
public Double getTurnRadius() {
return turnRadius;
public static PipelineComponent addComponent(P3DRootNode root, PipelineComponent component, InsertInstruction inst) throws Exception {
PipelineComponent newComponent = ComponentUtils.createComponent(root, inst.typeUri);
- if (inst.name != null)
- newComponent.setName(inst.name);
-
PipeControlPoint newPcp = newComponent.getControlPoint();
PipeControlPoint toPcp = component.getControlPoint();
sizeChange = ((InlineComponent)newComponent).isSizeChange();
}
+ // Calculate component position and direction vectors
+ // 'dir' is a unit vector that represents the direction from 'component' to 'newComponent'
if (toPcp.isInline()) {
switch (position) {
case NEXT:
break;
case PREVIOUS:
pos = new Vector3d(start);
+ dir.negate();
break;
case SPLIT:
pos = new Vector3d(toPcp.getWorldPosition());
default:
break;
}
-
} else if (toPcp.isDirected()) {
- dir = new Vector3d(toPcp.getDirection(Direction.NEXT));
+ // 'dir' always points out of a nozzle regardless of insertion direction
+ dir = new Vector3d(toPcp.getDirectedControlPointDirection());
pos = new Vector3d(toPcp.getWorldPosition());
} else if (toPcp.isTurn() && toPcp.asFixedAngle()) {
dir = new Vector3d(toPcp.getDirection(position == PositionType.NEXT ? Direction.NEXT : Direction.PREVIOUS));
}
}
- String name = component.getPipeRun().getUniqueName(typeName);
- newComponent.setName(name);
+ if (inst.name != null) {
+ newComponent.setName(inst.name);
+ } else {
+ String name = component.getPipeRun().getUniqueName(typeName);
+ newComponent.setName(name);
+ }
pipeRun.addChild(newComponent);
if (newPcp.isSizeChange())
} else if (newComponent instanceof TurnComponent) {
TurnComponent turnComponent = (TurnComponent)newComponent;
if (turnComponent.isVariableAngle()) {
- newPcp.setTurnAngle(inst.angle);
+ newPcp.setTurnAngle(Math.toRadians(inst.angle));
newComponent.setParameter("turnAngle", inst.angle);
}
if (inst.rotationAngle != null)
((TurnComponent) newComponent).setRotationAngle(inst.rotationAngle);
}
-
newComponent.updateParameters();
Vector3d v = new Vector3d(dir);
if (insertAdjustable) {
+ // Prevent moving of adjacent components - always insert at end of a connected variable length component
+ if (position == PositionType.NEXT && component.getNext() != null ||
+ position == PositionType.PREVIOUS && component.getPrevious() != null)
+ insertPosition = PositionType.PREVIOUS;
+
if (insertPosition == PositionType.NEXT)
v.scale(newComponent.getControlPoint().getInlineLength());
else if (insertPosition == PositionType.SPLIT)
} else {
v.scale(newComponent.getControlPoint().getInlineLength());
}
+
switch (position) {
case NEXT:
- pos.add(v);
- break;
case PREVIOUS:
- pos.sub(v);
+ pos.add(v);
break;
case SPLIT:
break;
case NEXT:
if (toPcp.isDualInline())
toPcp = toPcp.getDualSub();
- newPcp.insert(toPcp, Direction.NEXT);
newPcp.setWorldPosition(pos);
+ if (toPcp.getNext() != null)
+ PipingRules.splitVariableLengthComponent(newComponent, (InlineComponent)component, false);
+ else
+ newPcp.insert(toPcp, Direction.NEXT);
break;
case PREVIOUS:
if (toPcp.isDualSub())
toPcp = toPcp.parent;
- newPcp.insert(toPcp, Direction.PREVIOUS);
newPcp.setWorldPosition(pos);
+ if (toPcp.getPrevious() != null)
+ PipingRules.splitVariableLengthComponent(newComponent, (InlineComponent)component, false);
+ else
+ newPcp.insert(toPcp, Direction.PREVIOUS);
break;
case SPLIT:
PipingRules.splitVariableLengthComponent(newComponent, (InlineComponent)component, true);
String n = root.getUniqueName("PipeRun");
other.setName(n);
other.setPipeDiameter(inst.diameter);
+ other.setPipeThickness(inst.thickness);
other.setTurnRadius(inst.turnRadius);
root.addChild(other);