]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d.csg/src/org/simantics/g3d/csg/adapters/CSGSolidModelAdapter.java
3D framework (Simca 2012)
[simantics/3d.git] / org.simantics.g3d.csg / src / org / simantics / g3d / csg / adapters / CSGSolidModelAdapter.java
diff --git a/org.simantics.g3d.csg/src/org/simantics/g3d/csg/adapters/CSGSolidModelAdapter.java b/org.simantics.g3d.csg/src/org/simantics/g3d/csg/adapters/CSGSolidModelAdapter.java
new file mode 100644 (file)
index 0000000..30e4991
--- /dev/null
@@ -0,0 +1,83 @@
+package org.simantics.g3d.csg.adapters;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.Collections;\r
+import java.util.List;\r
+\r
+import org.eclipse.core.runtime.IAdaptable;\r
+import org.jcae.opencascade.jni.TopoDS_Shape;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.request.Read;\r
+import org.simantics.g3d.csg.scenegraph2.CSGrootNode;\r
+import org.simantics.g3d.csg.scenegraph2.ICSGnode;\r
+import org.simantics.g3d.csg.scenegraph2.SchemaBuilder;\r
+import org.simantics.objmap.graph.IMapping;\r
+import org.simantics.objmap.graph.Mappings;\r
+import org.simantics.objmap.graph.schema.IMappingSchema;\r
+import org.simantics.objmap.structural.IStructuralObject;\r
+import org.simantics.opencascade.SolidModelProvider;\r
+import org.simantics.ui.SimanticsUI;\r
+\r
+public class CSGSolidModelAdapter implements SolidModelProvider, IAdaptable, IStructuralObject {\r
+       \r
+       private Resource model;\r
+       \r
+       public CSGSolidModelAdapter(Resource model) {\r
+               this.model = model;\r
+       }\r
+       \r
+       @Override\r
+       public Collection<TopoDS_Shape> getModel() throws Exception {\r
+               return SimanticsUI.getSession().syncRequest(new Read<Collection<TopoDS_Shape>>() {\r
+                       @Override\r
+                       public Collection<TopoDS_Shape> perform(ReadGraph graph)\r
+                                       throws DatabaseException {\r
+                               Collection<TopoDS_Shape> shapes = new ArrayList<TopoDS_Shape>();\r
+                               IMappingSchema<Resource,Object> schema = SchemaBuilder.getSchema(graph);\r
+                               IMapping<Resource,Object> mapping = Mappings.createWithoutListening(schema);\r
+                               CSGrootNode rootNode = (CSGrootNode)mapping.map(graph, model);\r
+                               for (ICSGnode node : rootNode.getNodes("child")) {\r
+                                       TopoDS_Shape shape = node.getGeometry();\r
+                                       if (shape != null)\r
+                                               shapes.add(shape);\r
+                               }\r
+                               // FIXME: clear CSG scene-graph\r
+                               return shapes;\r
+                       }\r
+               });\r
+       \r
+       }\r
+       \r
+       @SuppressWarnings("rawtypes")\r
+       @Override\r
+       public Object getAdapter(Class adapter) {\r
+               if (Resource.class.equals(adapter))\r
+                       return model;\r
+               return null;\r
+       }\r
+       \r
+       @SuppressWarnings("unchecked")\r
+       @Override\r
+       public List<IStructuralObject> getContext() {\r
+               return Collections.EMPTY_LIST;\r
+       }\r
+       \r
+       @Override\r
+       public Resource getType() {\r
+               return null;\r
+       }\r
+       \r
+       @Override\r
+       public void setContext(List<IStructuralObject> object) {\r
+               throw new RuntimeException();\r
+       }\r
+       \r
+       @Override\r
+       public void setType(Resource type) {\r
+               throw new RuntimeException();   \r
+       }\r
+\r
+}\r