]> gerrit.simantics Code Review - simantics/3d.git/blob - CSGSolidModelAdapter.java
30e4991d12b9120a5cb9f753f7e2f4bccf784cdf
[simantics/3d.git] / CSGSolidModelAdapter.java
1 package org.simantics.g3d.csg.adapters;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Collection;\r
5 import java.util.Collections;\r
6 import java.util.List;\r
7 \r
8 import org.eclipse.core.runtime.IAdaptable;\r
9 import org.jcae.opencascade.jni.TopoDS_Shape;\r
10 import org.simantics.db.ReadGraph;\r
11 import org.simantics.db.Resource;\r
12 import org.simantics.db.exception.DatabaseException;\r
13 import org.simantics.db.request.Read;\r
14 import org.simantics.g3d.csg.scenegraph2.CSGrootNode;\r
15 import org.simantics.g3d.csg.scenegraph2.ICSGnode;\r
16 import org.simantics.g3d.csg.scenegraph2.SchemaBuilder;\r
17 import org.simantics.objmap.graph.IMapping;\r
18 import org.simantics.objmap.graph.Mappings;\r
19 import org.simantics.objmap.graph.schema.IMappingSchema;\r
20 import org.simantics.objmap.structural.IStructuralObject;\r
21 import org.simantics.opencascade.SolidModelProvider;\r
22 import org.simantics.ui.SimanticsUI;\r
23 \r
24 public class CSGSolidModelAdapter implements SolidModelProvider, IAdaptable, IStructuralObject {\r
25         \r
26         private Resource model;\r
27         \r
28         public CSGSolidModelAdapter(Resource model) {\r
29                 this.model = model;\r
30         }\r
31         \r
32         @Override\r
33         public Collection<TopoDS_Shape> getModel() throws Exception {\r
34                 return SimanticsUI.getSession().syncRequest(new Read<Collection<TopoDS_Shape>>() {\r
35                         @Override\r
36                         public Collection<TopoDS_Shape> perform(ReadGraph graph)\r
37                                         throws DatabaseException {\r
38                                 Collection<TopoDS_Shape> shapes = new ArrayList<TopoDS_Shape>();\r
39                                 IMappingSchema<Resource,Object> schema = SchemaBuilder.getSchema(graph);\r
40                                 IMapping<Resource,Object> mapping = Mappings.createWithoutListening(schema);\r
41                                 CSGrootNode rootNode = (CSGrootNode)mapping.map(graph, model);\r
42                                 for (ICSGnode node : rootNode.getNodes("child")) {\r
43                                         TopoDS_Shape shape = node.getGeometry();\r
44                                         if (shape != null)\r
45                                                 shapes.add(shape);\r
46                                 }\r
47                                 // FIXME: clear CSG scene-graph\r
48                                 return shapes;\r
49                         }\r
50                 });\r
51         \r
52         }\r
53         \r
54         @SuppressWarnings("rawtypes")\r
55         @Override\r
56         public Object getAdapter(Class adapter) {\r
57                 if (Resource.class.equals(adapter))\r
58                         return model;\r
59                 return null;\r
60         }\r
61         \r
62         @SuppressWarnings("unchecked")\r
63         @Override\r
64         public List<IStructuralObject> getContext() {\r
65                 return Collections.EMPTY_LIST;\r
66         }\r
67         \r
68         @Override\r
69         public Resource getType() {\r
70                 return null;\r
71         }\r
72         \r
73         @Override\r
74         public void setContext(List<IStructuralObject> object) {\r
75                 throw new RuntimeException();\r
76         }\r
77         \r
78         @Override\r
79         public void setType(Resource type) {\r
80                 throw new RuntimeException();   \r
81         }\r
82 \r
83 }\r