]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/controlpoint/PipeControlPoint.java
Processing DB changes could leave control points unsynchronized
[simantics/3d.git] / org.simantics.plant3d / src / org / simantics / plant3d / scenegraph / controlpoint / PipeControlPoint.java
index 20386b5408c11ca4477e4fb6a67a4bb4e4209ff5..8b1455ca2980a8f4927b291299efff2102d5606f 100644 (file)
@@ -36,12 +36,15 @@ public class PipeControlPoint extends G3DNode implements IP3DNode {
 
        private PointType type;
        private boolean isFixed = true;        // In-line: fixed-length Turn: fixed-angle
+       private boolean isMod = false;         // Can user modify fixed value manually 
        private boolean isRotate = false;      // rotates around path leg axis.
        private boolean isReverse = false;     // definition direction can be swapped
        private boolean isDeletable = true;    // can be removed by rules
        private boolean isSizeChange = false;  // changes size of the pipe. The next control point / component is on different PipeRun
        private boolean isSub = false;         // child point for offset / size change
 
+       private boolean disposed = false;
+       
        public PipeControlPoint(PipelineComponent component) {
                this.component = component;
                if (component.getPipeRun() != null)
@@ -88,6 +91,15 @@ public class PipeControlPoint extends G3DNode implements IP3DNode {
        public void setFixed(boolean fixed) {
                this.isFixed = fixed;
        }
+       
+       @GetPropertyValue(name="Mod",tabId="Debug",value="mod")
+       public boolean isMod() {
+        return isMod;
+    }
+    
+    public void setMod(boolean isMod) {
+        this.isMod = isMod;
+    }
 
        @GetPropertyValue(name="Rotate",tabId="Debug",value="rotate")
        public boolean isRotate() {
@@ -388,7 +400,7 @@ public class PipeControlPoint extends G3DNode implements IP3DNode {
 
        @GetPropertyValue(name="Rotation Angle",tabId="Debug",value="rotationAngle")
        public Double getRotationAngle() {
-           if (asFixedAngle())
+           if (isRotate || asFixedAngle())
                return rotationAngle;
            return null;
        }
@@ -1055,17 +1067,19 @@ public class PipeControlPoint extends G3DNode implements IP3DNode {
        
 
        public void _remove(boolean renconnect) {
-               if (component == null && next == null && previous == null)
-                       return;
-               if (DEBUG) System.out.println(this + " Remove " + renconnect);
+           if (disposed)
+               return;
+               
+           if (DEBUG) System.out.println(this + " Remove " + renconnect);
 
                if (getParentPoint() != null) {
                    getParentPoint()._remove(renconnect);
                    return;
                }
                PipeRun pipeRun = getPipeRun();
-               if (pipeRun == null)
-                       return;
+//             PipeRUn removal has been changed, so pipeRun may be null.
+//             if (pipeRun == null)
+//                     return;
 
                PipeControlPoint additionalRemove = null;
                if (!PipingRules.isEnabled()) {
@@ -1078,8 +1092,10 @@ public class PipeControlPoint extends G3DNode implements IP3DNode {
                        PipeControlPoint currentNext = next;
                        if (currentNext == null && currentPrev == null) {
                                removeComponent();
-                               pipeRun.remChild(this);
-                               checkRemove(pipeRun);
+                               if (pipeRun != null) {
+                                   pipeRun.remChild(this);
+                                   checkRemove(pipeRun);
+                               }
                                return;
                        }
                        if (currentNext != null && currentPrev != null) {
@@ -1245,12 +1261,15 @@ public class PipeControlPoint extends G3DNode implements IP3DNode {
                }
 
                removeComponent();
-               pipeRun.remChild(this);
-               checkRemove(pipeRun);
-               if (PipingRules.isEnabled() && pipeRun.getParent() != null && pipeRun.getControlPoints().size() > 0)
-                       PipingRules.validate(pipeRun);
+               if (pipeRun != null) {
+               pipeRun.remChild(this);
+               checkRemove(pipeRun);
+               if (PipingRules.isEnabled() && pipeRun.getParent() != null && pipeRun.getControlPoints().size() > 0)
+                       PipingRules.validate(pipeRun);
+               }
                if (additionalRemove != null)
                        additionalRemove.remove();
+               disposed = true;
        }
 
        /**
@@ -1295,6 +1314,8 @@ public class PipeControlPoint extends G3DNode implements IP3DNode {
             
             PipelineComponent n = next.getPipelineComponent();
             while (n != null) {
+                if (n.getPipeRun() != previousRun)
+                    break;
                 if (! (n instanceof Nozzle)) {
                     n.deattach();
                     nextPipeRun.addChild(n);
@@ -1341,6 +1362,8 @@ public class PipeControlPoint extends G3DNode implements IP3DNode {
     }
 
        private boolean checkRemove(PipeRun pipeRun) {
+           if (pipeRun == null)
+               return false;
                Collection<PipeControlPoint> points = pipeRun.getControlPoints();
                if (points.size() == 0) {
                        pipeRun.remove();