1 package vtk.rendering.swt;
3 import org.eclipse.swt.widgets.Composite;
5 import com.jogamp.opengl.swt.GLCanvas;
7 import vtk.vtkRenderWindow;
8 import vtk.rendering.vtkAbstractComponent;
11 * Provide SWT based vtk rendering component
13 * @author Joachim Pouderoux - joachim.pouderoux@kitware.com, Kitware SAS 2012
14 * @copyright This work was supported by CEA/CESTA
15 * Commissariat a l'Energie Atomique et aux Energies Alternatives,
16 * 15 avenue des Sablieres, CS 60001, 33116 Le Barp, France.
18 public class vtkSwtComponent extends vtkAbstractComponent<GLCanvas> {
20 protected vtkInternalSwtComponent uiComponent;
21 protected boolean isWindowCreated;
23 public vtkSwtComponent(Composite parentComposite) {
24 this(new vtkRenderWindow(), parentComposite);
27 public vtkSwtComponent(vtkRenderWindow renderWindowToUse, Composite parentComposite) {
28 super(renderWindowToUse);
29 this.eventForwarder = new vtkSwtInteractorForwarderDecorator(this, this.eventForwarder);
30 this.isWindowCreated = true;
31 this.uiComponent = new vtkInternalSwtComponent(this, parentComposite);
33 renderWindow.AddObserver("StartEvent", this, "startEvent");
34 renderWindow.AddObserver("EndEvent", this, "endEvent");
39 * Set the size of the VTK component
44 public void setSize(int x, int y) {
48 this.uiComponent.setSize(x, y);
49 this.uiComponent.redraw();
50 this.uiComponent.update();
54 * Render the VTK component. Should not be called externally.
55 * Call update() to refresh the window content.
58 public void Render() {
59 // Make sure we can render
60 if (inRenderCall || renderer == null || renderWindow == null) {
66 lock.lockInterruptibly();
68 // Trigger the real render
69 renderWindow.Render();
70 } catch (InterruptedException e) {
71 // Nothing that we can do except skipping execution
79 * Redraw the VTK component
81 public void update() {
82 this.uiComponent.redraw();
83 this.uiComponent.update();
87 * @return the encapsulated SWT component (a GLCanvas instance)
88 * @see vtk.rendering.vtkAbstractComponent#getComponent()
91 public GLCanvas getComponent() {
92 return this.uiComponent;
96 public void Delete() {
98 // We prevent any further rendering
99 this.inRenderCall = true;
100 this.renderWindow.Delete();
101 this.renderWindow = null;
107 * @return true if the graphical component has been properly set and
108 * operation can be performed on it.
110 public boolean isWindowSet() {
111 return this.isWindowCreated;
115 * Just allow class in same package to affect inRenderCall boolean
119 protected void updateInRenderCall(boolean value) {
120 this.inRenderCall = value;
123 /** This method is called by the VTK JNI code. Do not remove. */
125 if (!getComponent().getContext().isCurrent()) {
126 getComponent().getContext().makeCurrent();
130 /** This method is called by the VTK JNI code. Do not remove. */
132 if (getComponent().getContext().isCurrent()) {
133 getComponent().swapBuffers();
134 getComponent().getContext().release();