]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.plant3d/src/org/simantics/plant3d/utils/ComponentUtils.java
Previous change caused ClassCastExceptions.
[simantics/3d.git] / org.simantics.plant3d / src / org / simantics / plant3d / utils / ComponentUtils.java
index fb065f111f98b84c9d7ebf4ee27cb85ac4517190..939d1551a5343e20526b9db50e0ad87039a43dc8 100644 (file)
@@ -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();