X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Futils%2FComponentUtils.java;h=939d1551a5343e20526b9db50e0ad87039a43dc8;hb=8f71b333e7b1d116e55c2d39054aeb90dd93028d;hp=fb065f111f98b84c9d7ebf4ee27cb85ac4517190;hpb=a1e1faa6915445e786f482170576b9c9d0f5d982;p=simantics%2F3d.git diff --git a/org.simantics.plant3d/src/org/simantics/plant3d/utils/ComponentUtils.java b/org.simantics.plant3d/src/org/simantics/plant3d/utils/ComponentUtils.java index fb065f11..939d1551 100644 --- a/org.simantics.plant3d/src/org/simantics/plant3d/utils/ComponentUtils.java +++ b/org.simantics.plant3d/src/org/simantics/plant3d/utils/ComponentUtils.java @@ -5,7 +5,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.vecmath.Point3d; import javax.vecmath.Vector3d; import org.simantics.Simantics; @@ -330,7 +329,7 @@ public class ComponentUtils { PositionType insertPosition = inst.insertPosition; boolean lengthAdjustable = false; if (newComponent instanceof InlineComponent) { - lengthAdjustable = ((InlineComponent)newComponent).isVariableLength(); + lengthAdjustable = ((InlineComponent)newComponent).isVariableLength() || ((InlineComponent)newComponent).isModifialble(); } boolean insertAdjustable = false; if (component instanceof InlineComponent) { @@ -345,7 +344,7 @@ public class ComponentUtils { switch (position) { case NEXT: if (toPcp.isDualInline()) { - toPcp = toPcp.getSubPoint().get(0); + toPcp = toPcp.getDualSub(); pipeRun = toPcp.getPipeRun(); } @@ -356,6 +355,8 @@ public class ComponentUtils { pipeRun = toPcp.getPipeRun(); } break; + default: + break; } Vector3d start = new Vector3d(); Vector3d end = new Vector3d(); @@ -372,6 +373,8 @@ public class ComponentUtils { case SPLIT: pos = new Vector3d(toPcp.getWorldPosition()); break; + default: + break; } } else if (toPcp.isDirected()) { @@ -404,11 +407,19 @@ public class ComponentUtils { newComponent.setName(name); pipeRun.addChild(newComponent); - // TODO: these options are not stored into DB. Should they?! - if (newComponent instanceof InlineComponent && ((InlineComponent)newComponent).isVariableLength()) { - newPcp.setLength(inst.length); - } else if (newComponent instanceof TurnComponent && ((TurnComponent)newComponent).isVariableAngle()) { - newPcp.setTurnAngle(inst.angle); + + if (newComponent instanceof InlineComponent) { + InlineComponent inlineComponent = (InlineComponent)newComponent; + if (inlineComponent.isVariableLength()|| inlineComponent.isModifialble()) { + newPcp.setLength(inst.length); + newComponent.setParameter("length", inst.length); + } + } else if (newComponent instanceof TurnComponent) { + TurnComponent turnComponent = (TurnComponent)newComponent; + if (turnComponent.isVariableAngle()) { + newPcp.setTurnAngle(inst.angle); + newComponent.setParameter("turnAngle", inst.angle); + } } newComponent.updateParameters(); @@ -433,12 +444,14 @@ public class ComponentUtils { break; case SPLIT: break; + default: + break; } switch (position) { case NEXT: if (toPcp.isDualInline()) - toPcp = toPcp.getSubPoint().get(0); + toPcp = toPcp.getDualSub(); newPcp.insert(toPcp, Direction.NEXT); newPcp.setWorldPosition(pos); break; @@ -450,6 +463,8 @@ public class ComponentUtils { break; case SPLIT: PipingRules.splitVariableLengthComponent(newComponent, (InlineComponent)component, true); + default: + break; } } else { PipeRun other = new PipeRun(); @@ -479,6 +494,8 @@ public class ComponentUtils { break; case SPLIT: break; + default: + break; } newPcp.setWorldPosition(pos); @@ -529,7 +546,7 @@ public class ComponentUtils { requiresReverse = true; } PipeRun other = endCP.getPipeRun(); - boolean mergeRuns = other == null ? true : pipeRun.equalSpecs(other); + boolean mergeRuns = other == null ? true : pipeRun.canMerge(other); if (requiresReverse) { // Pipe line must be traversible with next/previous relations without direction change. @@ -537,10 +554,11 @@ public class ComponentUtils { PipingRules.reverse(other); } + if (mergeRuns) { // Runs have compatible specs and must be merged if (other != null && pipeRun != other) - PipingRules.merge(pipeRun, other); + pipeRun.merge(other); else if (other == null) { if (!(endTo instanceof Nozzle)) { pipeRun.addChild(endTo); @@ -559,7 +577,6 @@ public class ComponentUtils { // Runs do not have compatible specs, and a reducer must be attached in between. InlineComponent reducer = ComponentUtils.createReducer(root); PipeControlPoint pcp = reducer.getControlPoint(); - PipeControlPoint ocp = pcp.getSubPoint().get(0); Vector3d endPos = endCP.getWorldPosition(); Vector3d currentPos = currentCP.getWorldPosition();