]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/controlpoint/ControlPointFactory.java
Yesterdays change introduced infinite loop for directed path leg updates
[simantics/3d.git] / org.simantics.plant3d / src / org / simantics / plant3d / scenegraph / controlpoint / ControlPointFactory.java
index 4dfe29c75069c22d87ac4538d06cde3de7d36e23..ff49b93a74404adf1b5164e7bcbfb2a54ba00518 100644 (file)
@@ -20,11 +20,11 @@ public class ControlPointFactory {
        private static Map<String,Instruction> cache = new HashMap<String, Instruction>();
        
        
-       public static void preloadCache() throws Exception {
-               List<Item> items = P3DUtil.getEnds();
-               items.addAll(P3DUtil.getInlines());
-               items.addAll(P3DUtil.getNozzles());
-               items.addAll(P3DUtil.getTurns());
+       public static void preloadCache(String libUri) throws Exception {
+               List<Item> items = P3DUtil.getEnds(libUri);
+               items.addAll(P3DUtil.getInlines(libUri));
+               items.addAll(P3DUtil.getNozzles(libUri));
+               items.addAll(P3DUtil.getTurns(libUri));
                
                for (Item item : items) {
                        Instruction inst = createInstruction(item.getUri());
@@ -45,6 +45,7 @@ public class ControlPointFactory {
                PipeControlPoint pcp = new PipeControlPoint(component);
                pcp.setType(inst.type);
                pcp.setFixed(inst.fixed);
+               pcp.setMod(inst.mod);
                pcp.setRotate(inst.isRotate);
                pcp.setReverse(inst.isReverse);
                switch(inst.type) {
@@ -58,12 +59,13 @@ public class ControlPointFactory {
                                sub.parent = pcp;
                                sub.setType(inst.type);
                                sub.setFixed(inst.fixed);
+                               sub.setMod(inst.mod);
                                sub.setSub(true);
                                sub.setDeletable(false);
                                if (inst.isOffset)
                                        pcp.setOffset(0.0);
                                if (inst.isSizeChange)
-                                   pcp.setSizeChange(true);
+                                       pcp.setSizeChange(true);
                        }
                        
                        break;
@@ -78,6 +80,7 @@ public class ControlPointFactory {
        private static class Instruction {
                PointType type;
                boolean fixed;
+               boolean mod;
                boolean isOffset;
                boolean isSizeChange;
                boolean isRotate;
@@ -98,6 +101,7 @@ public class ControlPointFactory {
                                i.isRotate = false;
                                i.isReverse = false;
                                i.type = PointType.INLINE;
+                               i.mod = false;
                                if (graph.isInheritedFrom(res, p3d.Nozzle)) {
                                        i.fixed = true;
                                        i.isOffset = false;
@@ -110,6 +114,11 @@ public class ControlPointFactory {
                                                i.fixed = false;
                                        } else if (graph.hasStatement(res,p3d.FixedLengthInlineComponent)) {
                                                i.fixed = true;
+                                       } else if (graph.hasStatement(res,p3d.AdjustableLengthInlineComponent)) {
+                                           i.fixed = true;
+                                           i.mod = true;
+                                       } else {
+                                           throw new DatabaseException("Inline component type " + res + " does not have length configuration.");
                                        }
                                        
                                        if (graph.hasStatement(res,p3d.SizeChangeComponent)) {
@@ -133,6 +142,8 @@ public class ControlPointFactory {
                                                i.fixed = false;
                                        } else if (graph.hasStatement(res,p3d.FixedAngleTurnComponent)) {
                                                i.fixed = true; 
+                                       } else {
+                                           throw new DatabaseException("Turn component type " + res + " does not have angle configuration.");
                                        }
                                } else if (graph.isInheritedFrom(res, p3d.EndComponent)) {
                                        i.fixed = false;