]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.plant3d/src/org/simantics/plant3d/scenegraph/PipeRun.java
Fix error in inserting dual inline components
[simantics/3d.git] / org.simantics.plant3d / src / org / simantics / plant3d / scenegraph / PipeRun.java
index 2c334c1f2810f085f0deaad34028ea9d2a28994c..0a6e58c07c365f664263291aeee53787474f295d 100644 (file)
@@ -1,6 +1,7 @@
 package org.simantics.plant3d.scenegraph;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
@@ -31,6 +32,7 @@ import vtk.vtkRenderer;
 public class PipeRun extends P3DParentNode<IP3DNode> {
        
        private double pipeDiameter = 0.1;
+       private double pipeThickness = 0.0;
        private double[] turnRadius = new double[] {0.2};
        
        @Override
@@ -64,6 +66,8 @@ public class PipeRun extends P3DParentNode<IP3DNode> {
        @RelatedSetValue(Plant3D.URIs.HasTurnRadius)
        @SetPropertyValue(Plant3D.URIs.HasTurnRadius)
        public void setTurnRadius(double turnRadius) {
+               if (this.turnRadius[0] == turnRadius)
+                       return;
                this.turnRadius[0] = turnRadius;
                firePropertyChanged(Plant3D.URIs.HasTurnRadius);
                firePropertyChanged(Plant3D.URIs.HasTurnRadiusArray);
@@ -78,7 +82,7 @@ public class PipeRun extends P3DParentNode<IP3DNode> {
     @RelatedSetValue(Plant3D.URIs.HasTurnRadiusArray)
     @SetPropertyValue(Plant3D.URIs.HasTurnRadiusArray)
     public void setTurnRadiusArray(double[] turnRadiusArray) {
-        if (turnRadiusArray == null || turnRadiusArray.length == 0)
+        if (turnRadiusArray == null || turnRadiusArray.length == 0 || Arrays.equals(this.turnRadius, turnRadiusArray))
             return;
         this.turnRadius = turnRadiusArray;
         firePropertyChanged(Plant3D.URIs.HasTurnRadiusArray);
@@ -93,10 +97,33 @@ public class PipeRun extends P3DParentNode<IP3DNode> {
        @RelatedSetValue(Plant3D.URIs.HasPipeDiameter)
        @SetPropertyValue(Plant3D.URIs.HasPipeDiameter)
        public void setPipeDiameter(double pipeDiameter) {
-               this.pipeDiameter = pipeDiameter;       
+               if (this.pipeDiameter == pipeDiameter)
+                       return;
+               
+               this.pipeDiameter = pipeDiameter;
                firePropertyChanged(Plant3D.URIs.HasPipeDiameter);
        }
        
+       @RelatedGetValue(Plant3D.URIs.HasPipeThickness)
+       @GetPropertyValue(value=Plant3D.URIs.HasPipeThickness, name = "Wall Thickness")
+       public double getPipeThickness() {
+               return pipeThickness;
+       }
+       
+       @RelatedSetValue(Plant3D.URIs.HasPipeThickness)
+       @SetPropertyValue(Plant3D.URIs.HasPipeThickness)
+       public void setPipeThickness(double pipeThickness) {
+               if (this.pipeThickness == pipeThickness)
+                       return;
+               
+               this.pipeThickness = pipeThickness;
+               firePropertyChanged(Plant3D.URIs.HasPipeThickness);
+       }
+       
+       public double getInsideDiameter() {
+               return pipeDiameter - 2 * pipeThickness;
+       }
+       
        @RelatedElementsAdd(Plant3D.URIs.children)
        public void addChild(PipelineComponent node) {
                addNode(Plant3D.URIs.children,node);
@@ -112,8 +139,22 @@ public class PipeRun extends P3DParentNode<IP3DNode> {
        }
        
        @RelatedElementsRem(Plant3D.URIs.children)
+       public void _remChild(PipelineComponent node) {
+               //since we do not now, if DB remove is actually remove or detach, we have to use detach. NodeMap will handle Component removals.
+           deattachNode(Plant3D.URIs.children, node);
+       }
+       
        public void remChild(PipelineComponent node) {
-               removeNode(Plant3D.URIs.children, node);
+           removeNode(Plant3D.URIs.children, node);
+       }
+       
+       @Override
+       public void remove() {
+           // since we do not now, if DB remove is actually remove or detach, we have to use detach. NodeMap will handle Component removals.
+           Collection<PipelineComponent> comps = getChild();
+           for (PipelineComponent c : comps)
+               c.deattach();
+           super.remove();
        }