1 package org.simantics.g3d.csg.editor;
\r
3 import java.util.ArrayList;
\r
4 import java.util.Collection;
\r
5 import java.util.List;
\r
6 import java.util.Set;
\r
8 import org.simantics.db.Session;
\r
9 import org.simantics.g3d.csg.scenegraph2.CSGrootNode;
\r
10 import org.simantics.g3d.csg.scenegraph2.ICSGnode;
\r
11 import org.simantics.g3d.scenegraph.base.ParentNode;
\r
12 import org.simantics.g3d.vtk.common.AbstractVTKNodeMap;
\r
13 import org.simantics.g3d.vtk.common.InteractiveVtkPanel;
\r
14 import org.simantics.objmap.graph.IMapping;
\r
15 import org.simantics.utils.threads.AWTThread;
\r
18 import vtk.vtkProp3D;
\r
19 import vtk.vtkRenderer;
\r
21 public class CSGNodeMap extends AbstractVTKNodeMap<ICSGnode> {
\r
25 public CSGNodeMap(Session session, IMapping mapping, InteractiveVtkPanel panel, CSGrootNode rootNode) {
\r
26 super(session, mapping, panel, rootNode);
\r
27 rootNode.setNodeMap(this);
\r
31 @SuppressWarnings("unchecked")
\r
32 protected void updateActor(ICSGnode node, Set<String> ids) {
\r
33 //System.out.println("CSGNodeMap.updateActor " + node);
\r
34 if (node.getParent() instanceof ICSGnode) {
\r
35 ICSGnode parent = (ICSGnode) node.getParent();
\r
36 if (!"child".equals(node.getParentRel())) {
\r
37 updateActor(parent,null);
\r
42 if (node instanceof ParentNode<?>) {
\r
43 ParentNode<ICSGnode> p = (ParentNode<ICSGnode>)node;
\r
44 for (ICSGnode n : p.getNodes())
\r
54 protected Collection<vtkProp> getActors(ICSGnode node) {
\r
55 List<vtkProp> props = new ArrayList<vtkProp>();
\r
56 for (vtkProp3D p : ((ICSGnode)node).getActors())
\r
61 protected void removeActor(ICSGnode node) {
\r
62 //System.out.println("CSGNodeMap.removeActor " + node);
\r
65 if (!"child".equals(node.getParentRel())) {
\r
66 if (node.getParent() instanceof ICSGnode)
\r
67 updateActor((ICSGnode)node.getParent(),null);
\r
71 protected void addActor(ICSGnode node) {
\r
72 //System.out.println("CSGNodeMap.addActor " + node);
\r
75 if (Thread.currentThread() != AWTThread.getThreadAccess().getThread())
\r
76 throw new RuntimeException("Illegal thread.");
\r
80 node.visualize(panel);
\r
82 for (vtkProp3D act : node.getActors()) {
\r
83 nodeToActor.add(node, act);
\r
84 actorToNode.put(act, node);
\r
93 private boolean hasActor(ICSGnode node) {
\r
94 List<vtkProp> list = nodeToActor.getValues(node);
\r
95 if (list == null || list.size() == 0)
\r
100 private void remActor(ICSGnode node) {
\r
101 if (Thread.currentThread() != AWTThread.getThreadAccess().getThread())
\r
102 throw new RuntimeException("Illegal thread.");
\r
104 List<vtkProp> list = nodeToActor.getValues(node);
\r
105 if (list != null) {
\r
106 for (vtkProp obj : list) {
\r
107 actorToNode.remove(obj);
\r
109 nodeToActor.remove(node);
\r
112 node.stopVisualize();
\r