1 package org.simantics.g3d.vtk.utils;
\r
3 import java.util.ArrayList;
\r
4 import java.util.List;
\r
6 import org.simantics.g3d.vtk.Activator;
\r
7 import org.simantics.g3d.vtk.preferences.CloseMethod;
\r
8 import org.simantics.g3d.vtk.preferences.PreferenceConstants;
\r
9 import org.simantics.utils.threads.AWTThread;
\r
11 import vtk.vtkCamera;
\r
12 import vtk.vtkObject;
\r
13 import vtk.vtkPanel;
\r
14 import vtk.vtkReferenceInformation;
\r
15 import vtk.vtkRenderWindow;
\r
16 import vtk.vtkRenderer;
\r
18 public class vtkPanelUtil {
\r
20 private static List<vtkPanel> activePanels = new ArrayList<vtkPanel>();
\r
21 private static List<vtkPanel> waitingToDeletePanels = new ArrayList<vtkPanel>();
\r
23 public static void registerPanel(vtkPanel panel) {
\r
24 activePanels.add(panel);
\r
27 public static void unregisterPanel(vtkPanel panel) {
\r
28 assert (Thread.currentThread() == AWTThread.getThreadAccess().getThread());
\r
29 if (!activePanels.remove(panel))
\r
31 CloseMethod method = getCloseMethod();
\r
32 if (method == CloseMethod.ON_LAST_CLOSE) {
\r
33 waitingToDeletePanels.add(panel);
\r
35 if (activePanels.size() == 0) {
\r
38 } else if (method == CloseMethod.ON_CLOSE) {
\r
41 } else if (method == CloseMethod.NO_CLOSE) {
\r
42 waitingToDeletePanels.add(panel);
\r
46 public static CloseMethod getCloseMethod() {
\r
47 return CloseMethod.valueOf(Activator.getDefault().getPreferenceStore().getString(PreferenceConstants.CLOSE_METHOD));
\r
50 private static void cleanup() {
\r
52 for (vtkPanel p : waitingToDeletePanels) {
\r
55 waitingToDeletePanels.clear();
\r
59 private static void vtkGC() {
\r
60 vtkReferenceInformation info = vtkObject.JAVA_OBJECT_MANAGER.gc(true);
\r
61 System.out.println("Referenced objects when closing editor: " + info.getTotalNumberOfObjects() + "\n");
\r
62 System.out.println(info.listRemovedReferenceToString());
\r
63 System.out.println(info.listKeptReferenceToString());
\r
67 private static void dPanel(vtkPanel panel) {
\r
69 vtkCamera camera = panel.GetRenderer().GetActiveCamera();
\r
70 vtkRenderer ren = panel.GetRenderer();
\r
71 vtkRenderWindow win = panel.GetRenderWindow();
\r
72 win.SetForceMakeCurrent();
\r