]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.plant3d/src/org/simantics/plant3d/utils/P3DUtil.java
SCL bindings to some G3D and Plant3D Java classes
[simantics/3d.git] / org.simantics.plant3d / src / org / simantics / plant3d / utils / P3DUtil.java
index b34f4f0739e817230b784009349433e09c5646f0..7ba42b8f9d128d511973507595fee90d9a6d59fa 100644 (file)
@@ -1,6 +1,8 @@
 package org.simantics.plant3d.utils;
 
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 
 import org.simantics.Simantics;
@@ -9,10 +11,16 @@ import org.simantics.db.Resource;
 import org.simantics.db.WriteGraph;
 import org.simantics.db.exception.DatabaseException;
 import org.simantics.db.request.Read;
+import org.simantics.g3d.scenegraph.base.INode;
 import org.simantics.layer0.Layer0;
 import org.simantics.plant3d.ontology.Plant3D;
+import org.simantics.plant3d.scenegraph.Equipment;
+import org.simantics.plant3d.scenegraph.P3DRootNode;
+import org.simantics.plant3d.scenegraph.PipeRun;
+import org.simantics.plant3d.scenegraph.PipelineComponent;
+import org.simantics.plant3d.scenegraph.controlpoint.PipeControlPoint;
+import org.simantics.plant3d.scenegraph.controlpoint.PipingRules;
 import org.simantics.plant3d.utils.Item.Type;
-import org.simantics.ui.SimanticsUI;
 
 public class P3DUtil {
        
@@ -92,6 +100,15 @@ public class P3DUtil {
                });
        }
        
+       public static List<Item> filterUserComponents(List<Item> items) {
+           List<Item> result = new ArrayList<Item>(items.size());
+           for (Item i : items) {
+               if (!i.isCode())
+                   result.add(i);
+           }
+           return result;
+       }
+       
        private static List<Item> getItems(ReadGraph graph, Resource lib, Resource type) throws DatabaseException{
                Plant3D p3d = Plant3D.getInstance(graph);
                Layer0 l0 = Layer0.getInstance(graph);
@@ -117,10 +134,16 @@ public class P3DUtil {
                                }
                        }
                }
+               Collections.sort(result, new Comparator<Item>() {
+                   @Override
+                   public int compare(Item o1, Item o2) {
+                       return o1.getName().compareTo(o2.getName());
+                   }
+        });
                return result;
        }
        
-       private static Item createItem(ReadGraph graph, Resource r) throws DatabaseException {
+       public static Item createItem(ReadGraph graph, Resource r) throws DatabaseException {
                Layer0 l0 = Layer0.getInstance(graph);
                Plant3D p3d = Plant3D.getInstance(graph);
                String name = graph.getRelatedValue(r, l0.HasName);
@@ -158,5 +181,40 @@ public class P3DUtil {
                
                return model;
        }
+       
+       public static void finalizeDBLoad(P3DRootNode rootNode) throws Exception{
+           for (INode node : rootNode.getChild()) {
+            if (node instanceof PipeRun) {
+                for (PipelineComponent pc : ((PipeRun) node).getChild())
+                    pc.sync();
+            } else if (node instanceof Equipment) {
+                for (PipelineComponent pc : ((Equipment) node).getChild())
+                    pc.sync();
+            }
+        }
+        
+        for (INode node : rootNode.getChild()) {
+            if (node instanceof PipeRun) {
+                for (PipelineComponent pc : ((PipeRun) node).getChild())
+                    pc.sync2();
+            } else if (node instanceof Equipment) {
+                for (PipelineComponent pc : ((Equipment) node).getChild())
+                    pc.sync2();
+            }
+        }
+        for (INode node : rootNode.getChild()) {
+            if (node instanceof PipeRun) {
+                PipingRules.validate((PipeRun)node);
+            }
+        }
+        PipingRules.setEnabled(true);
+        for (INode node : rootNode.getChild()) {
+            if (node instanceof PipeRun) {
+                PipeRun run = (PipeRun)node;
+                for (PipeControlPoint pcp : run.getControlPoints())
+                    PipingRules.positionUpdate(pcp);        
+            }
+        }
+       }
 
 }