--- /dev/null
+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