]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.plant3d/src/org/simantics/plant3d/utils/ComponentUtils.java
Creating equipment with predefined nozzles.
[simantics/3d.git] / org.simantics.plant3d / src / org / simantics / plant3d / utils / ComponentUtils.java
index 69bf593156e3fa448e8a335e94de60388712c54c..9b6ea1895507f359c671c54df8b7ff4e4f65cb50 100644 (file)
@@ -180,6 +180,25 @@ public class ComponentUtils {
                return equipment;
        }
        
+       public static Equipment createEquipmentWithNozzles(P3DRootNode root, String typeURI, String nozzleTypeUri) throws Exception {
+        GeometryProvider provider = providers.get(typeURI);
+        if (provider == null) {
+            load(typeURI);
+            provider = providers.get(typeURI);
+        }
+        Equipment equipment = root.createEquipment();
+        equipment.setType(typeURI);
+        equipment.setGeometry(provider);
+        root.addChild(equipment);
+        
+        for (int i = 0; i < equipment.numberOfFixedNozzles(); i++) {
+            createNozzle(root, equipment, new Item(nozzleTypeUri, "Nozzle"));
+            
+        }
+        
+        return equipment;
+    }
+       
        public static InlineComponent createStraight(P3DRootNode root) throws Exception{
                InlineComponent component = root.createInline();
                component.setType(Plant3D.URIs.Builtin_Straight);
@@ -214,7 +233,12 @@ public class ComponentUtils {
                return equipment;
        }
        
-       
+       public static Equipment createEquipmentWithNozzles(P3DRootNode root, Item equipmentType, Item nozzleType) throws Exception {
+        Equipment equipment = createEquipmentWithNozzles(root, equipmentType.getUri(), nozzleType.getUri());
+        String n = root.getUniqueName(equipmentType.getName());
+        equipment.setName(n);
+        return equipment;
+    }
        
        public static Nozzle createDefaultNozzle(P3DRootNode root, Equipment equipment) throws Exception {
                return createNozzle(root, equipment, new Item(Plant3D.URIs.Builtin_Nozzle, "Nozzle"));
@@ -329,7 +353,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) {
@@ -407,11 +431,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();
@@ -538,7 +570,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.
@@ -546,10 +578,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);