package org.simantics.g3d.vtk.shape; import org.simantics.g3d.shape.Mesh; import org.simantics.g3d.vtk.common.VtkView; import org.simantics.utils.threads.ThreadUtils; import vtk.vtkRenderer; public class vtkMeshObject { private VtkView panel; private Mesh mesh; private MeshActor meshActor; public vtkMeshObject(VtkView panel, Mesh mesh) { this.mesh = mesh; this.panel = panel; } public void visualizeMesh() { clearActorsVTK(); meshActor = new MeshActor(); meshActor.setMesh(mesh); //System.out.println("Set mesh " + mesh.getVertices().size() + " " + mesh.getIndices().size() + " " + this); showActorsVTK(); } public MeshActor getActor() { assert (Thread.currentThread() == panel.getThreadQueue().getThread()); return meshActor; } public void showActorsVTK() { //System.out.println("showActorsAWT " + this + " " + meshActor != null); assert (Thread.currentThread() == panel.getThreadQueue().getThread()); panel.lock(); vtkRenderer ren = panel.getRenderer(); if (meshActor != null) ren.AddActor(meshActor); panel.unlock(); } public void showActors() { ThreadUtils.asyncExec(panel.getThreadQueue(), new Runnable() { @Override public void run() { showActorsVTK(); } }); } public void clearActorsVTK() { assert (Thread.currentThread() == panel.getThreadQueue().getThread()); if (meshActor == null) return; //System.out.println("clearActorsAwt " + this); vtkRenderer ren = panel.getRenderer(); if (ren == null) return; panel.lock(); if (meshActor.GetVTKId() != 0) { ren.RemoveActor(meshActor); meshActor.Delete(); } panel.unlock(); meshActor = null; } private void clearActorsVTK(MeshActor meshActor) { assert (Thread.currentThread() == panel.getThreadQueue().getThread()); if (meshActor == null) return; //System.out.println("clearActorsAwt2 " + this); vtkRenderer ren = panel.getRenderer(); if (ren == null) return; panel.lock(); if (meshActor.GetVTKId() != 0) { ren.RemoveActor(meshActor); meshActor.Delete(); } panel.unlock(); meshActor = null; } public void clearActors() { if (meshActor == null) return; ThreadUtils.asyncExec(panel.getThreadQueue(), new Runnable() { @Override public void run() { clearActorsVTK(meshActor); } }); } public void dispose() { mesh = null; clearActors(); } public void delete() { mesh = null; clearActorsVTK(); } }