]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/shape/vtkMeshObject.java
0e60a270f24ce699a243ed3c16c00dbe8250630e
[simantics/3d.git] / org.simantics.g3d.vtk / src / org / simantics / g3d / vtk / shape / vtkMeshObject.java
1 package org.simantics.g3d.vtk.shape;
2
3 import org.simantics.g3d.shape.Mesh;
4 import org.simantics.utils.threads.AWTThread;
5 import org.simantics.utils.threads.ThreadUtils;
6
7 import vtk.vtkPanel;
8 import vtk.vtkRenderer;
9
10 public class vtkMeshObject {
11         
12         private vtkPanel panel;
13         private Mesh mesh;
14         
15         private MeshActor meshActor;
16         
17         public vtkMeshObject(vtkPanel panel, Mesh mesh) {
18                 this.mesh = mesh;
19                 this.panel = panel;
20         }
21         
22         public void visualizeMesh() {
23                 clearActorsAWT();
24                 meshActor = new MeshActor();
25                 meshActor.setMesh(mesh);
26                 //System.out.println("Set mesh " + mesh.getVertices().size() + " " + mesh.getIndices().size() + " " + this);
27                 showActorsAWT();
28         }
29         
30         public MeshActor getActor() {
31                 assert (Thread.currentThread() == AWTThread.getThreadAccess().getThread());
32                 return meshActor;
33         }
34         
35         public void showActorsAWT() {
36                 //System.out.println("showActorsAWT " + this + " " + meshActor != null);
37                 assert (Thread.currentThread() == AWTThread.getThreadAccess().getThread());
38                 vtkRenderer ren = panel.GetRenderer();
39                 if (meshActor != null)
40                         ren.AddActor(meshActor);
41         }
42         
43         public void showActors() {
44                 ThreadUtils.asyncExec(AWTThread.getThreadAccess(), new Runnable() {
45                         
46                         @Override
47                         public void run() {
48                                 showActorsAWT();
49                         }
50                 });
51         }
52         
53         public void clearActorsAWT() {
54                 assert (Thread.currentThread() == AWTThread.getThreadAccess().getThread());
55                 
56                 if (meshActor == null)
57                         return;
58                 //System.out.println("clearActorsAwt " + this);
59                 vtkRenderer ren = panel.GetRenderer();
60                 if (ren == null)
61                         return;
62                 panel.lock();
63                 if (meshActor.GetVTKId() != 0) {
64                         ren.RemoveActor(meshActor);
65                         meshActor.Delete();
66                 }
67                 panel.unlock();
68                 meshActor = null;
69         }
70         
71         private void clearActorsAWT(MeshActor meshActor) {
72                 assert (Thread.currentThread() == AWTThread.getThreadAccess().getThread());
73                 
74                 if (meshActor == null)
75                         return;
76                 //System.out.println("clearActorsAwt2 " + this);
77                 vtkRenderer ren = panel.GetRenderer();
78                 if (ren == null)
79                         return;
80                 panel.lock();
81                 if (meshActor.GetVTKId() != 0) {
82                         ren.RemoveActor(meshActor);
83                         meshActor.Delete();
84                 }
85                 panel.unlock();
86                 meshActor = null;
87         }
88         
89         public void clearActors() {
90                 if (meshActor == null)
91                         return;
92                 ThreadUtils.asyncExec(AWTThread.getThreadAccess(), new Runnable() {
93                         
94                         @Override
95                         public void run() {
96                                 clearActorsAWT(meshActor);
97                         }
98                 });
99         }
100         
101         public void dispose() {
102                 mesh = null;
103                 clearActors();
104         }
105         
106         public void delete() {
107                 mesh = null;
108                 clearActorsAWT();
109         }
110
111 }