]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/common/AbstractVTKNodeMap.java
Using SWT thread with Plant3d
[simantics/3d.git] / org.simantics.g3d.vtk / src / org / simantics / g3d / vtk / common / AbstractVTKNodeMap.java
index 35d3105fb451f1debc7afca7476e5d1449099007..646fbe41cdef8300e24e71ea84eba13510995e35 100644 (file)
@@ -21,15 +21,12 @@ import java.util.Set;
 import java.util.Stack;
 
 import org.simantics.db.ReadGraph;
-import org.simantics.db.Resource;
 import org.simantics.db.Session;
 import org.simantics.db.WriteGraph;
 import org.simantics.db.common.request.ReadRequest;
 import org.simantics.db.common.request.WriteRequest;
 import org.simantics.db.exception.DatabaseException;
 import org.simantics.g3d.ontology.G3D;
-import org.simantics.g3d.scenegraph.G3DNode;
-import org.simantics.g3d.scenegraph.IG3DNode;
 import org.simantics.g3d.scenegraph.RenderListener;
 import org.simantics.g3d.scenegraph.base.INode;
 import org.simantics.g3d.scenegraph.base.NodeListener;
@@ -50,19 +47,19 @@ public abstract class AbstractVTKNodeMap<E extends INode> implements VTKNodeMap<
        
        protected Session session;
        protected IMapping<Object,E> mapping;
-       protected InteractiveVtkPanel panel;
+       protected VtkView view;
        
        protected MapList<E, vtkProp> nodeToActor = new MapList<E, vtkProp>();
        protected Map<vtkProp,E> actorToNode = new HashMap<vtkProp, E>();
 
        protected ParentNode<E> rootNode;
        
-       public AbstractVTKNodeMap(Session session, IMapping<Object,E> mapping, InteractiveVtkPanel panel, ParentNode<E> rootNode) {
+       public AbstractVTKNodeMap(Session session, IMapping<Object,E> mapping, VtkView view, ParentNode<E> rootNode) {
                this.session = session;
                this.mapping = mapping;
-               this.panel = panel;
+               this.view = view;
                this.rootNode = rootNode;
-               panel.addListener(this);
+               view.addListener(this);
                mapping.addMappingListener(this);
                rootNode.addListener(this);
        }
@@ -73,7 +70,7 @@ public abstract class AbstractVTKNodeMap<E extends INode> implements VTKNodeMap<
        protected abstract void updateActor(E node,Set<String> ids);
        
        public void repaint() {
-               panel.repaint();
+               view.refresh();
        }
        
        public void populate() {
@@ -128,14 +125,16 @@ public abstract class AbstractVTKNodeMap<E extends INode> implements VTKNodeMap<
        @Override
        public void updateRenderObjectsFor(INode node) {
                List<vtkProp> toDelete = new ArrayList<vtkProp>();
+               view.lock();
                for (vtkProp prop : nodeToActor.getValues((E)node)) {
                        if (prop.GetVTKId() != 0) {
-                               panel.GetRenderer().RemoveActor(prop);
+                               view.getRenderer().RemoveActor(prop);
                                //prop.Delete();
                                toDelete.add(prop);
                        }
                        actorToNode.remove(prop);
                }
+               view.unlock();
                nodeToActor.remove((E)node);
                Collection<vtkProp> coll = getActors((E)node);
                if (coll == null)
@@ -165,7 +164,7 @@ public abstract class AbstractVTKNodeMap<E extends INode> implements VTKNodeMap<
                        added.add(new Pair<E, String>(node, id));
                        rangeModified = true;
                }
-               panel.repaint();
+               view.refresh();
        }
        
        @SuppressWarnings("unchecked")
@@ -181,7 +180,7 @@ public abstract class AbstractVTKNodeMap<E extends INode> implements VTKNodeMap<
                        removed.add(new Pair<E, String>(node, id));
                        rangeModified = true;
                }
-               panel.repaint();
+               view.refresh();
        }
        
        @SuppressWarnings("unchecked")
@@ -198,7 +197,7 @@ public abstract class AbstractVTKNodeMap<E extends INode> implements VTKNodeMap<
                        updated.add(node, id);
                        rangeModified = true;
                }
-               panel.repaint();
+               view.refresh();
        }
        
        private boolean graphUpdates = false;
@@ -461,7 +460,7 @@ public abstract class AbstractVTKNodeMap<E extends INode> implements VTKNodeMap<
        @Override
        public void delete() {
                changeTracking = false;
-               panel.removeListener(this);
+               view.removeListener(this);
                mapping.removeMappingListener(this);
 
                List<E> nodes = new ArrayList<E>(nodeToActor.getKeySize());