File: vtkPanelComponent.java

package info (click to toggle)
vtk7 7.1.1%2Bdfsg2-8
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 127,396 kB
  • sloc: cpp: 1,539,584; ansic: 124,382; python: 78,038; tcl: 47,013; xml: 8,142; yacc: 5,040; java: 4,439; perl: 3,132; lex: 1,926; sh: 1,500; makefile: 126; objc: 83
file content (128 lines) | stat: -rw-r--r-- 3,925 bytes parent folder | download | duplicates (14)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package vtk.rendering.awt;

import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.util.concurrent.locks.ReentrantLock;

import vtk.vtkCamera;
import vtk.vtkGenericRenderWindowInteractor;
import vtk.vtkInteractorStyle;
import vtk.vtkInteractorStyleTrackballCamera;
import vtk.vtkPanel;
import vtk.vtkRenderWindow;
import vtk.vtkRenderer;
import vtk.rendering.vtkComponent;
import vtk.rendering.vtkInteractorForwarder;

/**
 * Provide AWT based vtk rendering component using the vtkPanel class
 * while exposing everything as a new rendering component.
 *
 * @author Sebastien Jourdain - sebastien.jourdain@kitware.com
 *
 * Notes: This class should be replaced down the road by the vtkAwtComponent
 *        but on some platform such as Windows the vtkAwtComponent
 *        produce a runtime error regarding invalid pixel format while
 *        the vtkPanelComponent which use vtkPanel works fine.
 *        For now, this class provide a good substitute with just a minor overhead.
 */

public class vtkPanelComponent implements vtkComponent<vtkPanel> {
  protected vtkPanel panel;
  protected ReentrantLock lock;
  protected vtkGenericRenderWindowInteractor windowInteractor;
  protected vtkInteractorForwarder eventForwarder;

  public vtkPanelComponent() {
    this.panel = new vtkPanel();
    this.lock = new ReentrantLock();

    // Init interactor
    this.windowInteractor = new vtkGenericRenderWindowInteractor();
    this.windowInteractor.SetRenderWindow(this.panel.GetRenderWindow());
    this.windowInteractor.TimerEventResetsTimerOff();

    this.windowInteractor.SetSize(200, 200);
    this.windowInteractor.ConfigureEvent();

    // Update style
    vtkInteractorStyleTrackballCamera style = new vtkInteractorStyleTrackballCamera();
    this.windowInteractor.SetInteractorStyle(style);

    // Setup event forwarder
    this.eventForwarder = new vtkInteractorForwarder(this);
    this.windowInteractor.AddObserver("CreateTimerEvent", this.eventForwarder, "StartTimer");
    this.windowInteractor.AddObserver("DestroyTimerEvent", this.eventForwarder, "DestroyTimer");

    // Remove unwanted listeners
    this.panel.removeKeyListener(this.panel);
    this.panel.removeMouseListener(this.panel);
    this.panel.removeMouseMotionListener(this.panel);
    this.panel.removeMouseWheelListener(this.panel);

    // Add mouse listener that update interactor
    this.panel.addMouseListener(this.eventForwarder);
    this.panel.addMouseMotionListener(this.eventForwarder);
    this.panel.addMouseWheelListener(this.eventForwarder);

    // Make sure we update the light position when interacting
    this.panel.addMouseMotionListener(new MouseMotionAdapter() {
      public void mouseDragged(MouseEvent e) {
        panel.UpdateLight();
      }
    });
  }

  public void resetCamera() {
    this.panel.resetCamera();
  }

  public void resetCameraClippingRange() {
    this.panel.resetCameraClippingRange();
  }

  public vtkCamera getActiveCamera() {
    return this.panel.GetRenderer().GetActiveCamera();
  }

  public vtkRenderer getRenderer() {
    return this.panel.GetRenderer();
  }

  public vtkRenderWindow getRenderWindow() {
    return this.panel.GetRenderWindow();
  }

  public vtkGenericRenderWindowInteractor getRenderWindowInteractor() {
    return this.windowInteractor;
  }

  public void setInteractorStyle(vtkInteractorStyle style) {
    this.getRenderWindowInteractor().SetInteractorStyle(style);
  }

  public void setSize(int w, int h) {
    this.panel.setSize(w, h);
    this.getRenderWindowInteractor().SetSize(w, h);
  }

  public vtkPanel getComponent() {
    return this.panel;
  }

  public void Delete() {
    this.panel.Delete();
  }

  public void Render() {
    this.panel.Render();
  }

  public vtkInteractorForwarder getInteractorForwarder() {
    return this.eventForwarder;
  }

  public ReentrantLock getVTKLock() {
    return this.lock;
  }
}