Commit 3bf52d95 authored by Ben Boeckel's avatar Ben Boeckel
Browse files

vtkmodules: use the vtkmodules Python package

parent e96f8eef
......@@ -27,7 +27,7 @@ pygtk.require('2.0')
import gtk
import gtk.gtkgl
from gtk import gdk
import vtk
from vtkmodules.vtkRenderingCore import vtkActor, vtkCellPicker, vtkProperty, vtkRenderWindow
class GtkGLExtVTKRenderWindowBase(gtk.gtkgl.DrawingArea):
......@@ -43,7 +43,7 @@ class GtkGLExtVTKRenderWindowBase(gtk.gtkgl.DrawingArea):
gtk.gtkgl.DrawingArea.__init__(self)
self.set_double_buffered(gtk.FALSE)
self._RenderWindow = vtk.vtkRenderWindow()
self._RenderWindow = vtkRenderWindow()
# private attributes
self.__Created = 0
......@@ -188,9 +188,9 @@ class GtkGLExtVTKRenderWindow(GtkGLExtVTKRenderWindowBase):
self._ViewportCenterX = 0
self._ViewportCenterY = 0
self._Picker = vtk.vtkCellPicker()
self._Picker = vtkCellPicker()
self._PickedAssembly = None
self._PickedProperty = vtk.vtkProperty()
self._PickedProperty = vtkProperty()
self._PickedProperty.SetColor(1, 0, 0)
self._PrePickedProperty = None
......@@ -496,6 +496,9 @@ class GtkGLExtVTKRenderWindow(GtkGLExtVTKRenderWindowBase):
def main():
from vtkmodules.vtkFiltersSources import vtkConeSource
from vtkmodules.vtkRenderingCore import vtkActor, vtkPolyDataMapper, vtkRenderer
# The main window
window = gtk.Window()
window.set_title("A GtkGLExtVTKRenderWindow Demo!")
......@@ -518,15 +521,15 @@ def main():
window.set_size_request(400, 400)
# The VTK stuff.
cone = vtk.vtkConeSource()
cone = vtkConeSource()
cone.SetResolution(80)
coneMapper = vtk.vtkPolyDataMapper()
coneMapper = vtkPolyDataMapper()
coneMapper.SetInputConnection(cone.GetOutputPort())
#coneActor = vtk.vtkLODActor()
coneActor = vtk.vtkActor()
#coneActor = vtkLODActor()
coneActor = vtkActor()
coneActor.SetMapper(coneMapper)
coneActor.GetProperty().SetColor(0.5, 0.5, 1.0)
ren = vtk.vtkRenderer()
ren = vtkRenderer()
vtkgtk.GetRenderWindow().AddRenderer(ren)
ren.AddActor(coneActor)
......
......@@ -29,7 +29,7 @@ pygtk.require('2.0')
import gtk
from gtk import gdk
import gtk.gtkgl
import vtk
from vtkmodules.vtkRenderingCore import vtkGenericRenderWindowInteractor, vtkRenderWindow
class GtkGLExtVTKRenderWindowInteractor(gtk.gtkgl.DrawingArea):
......@@ -44,13 +44,13 @@ class GtkGLExtVTKRenderWindowInteractor(gtk.gtkgl.DrawingArea):
self.set_double_buffered(gtk.FALSE)
self._RenderWindow = vtk.vtkRenderWindow()
self._RenderWindow = vtkRenderWindow()
# private attributes
self.__Created = 0
self._ActiveButton = 0
self._Iren = vtk.vtkGenericRenderWindowInteractor()
self._Iren = vtkGenericRenderWindowInteractor()
self._Iren.SetRenderWindow(self._RenderWindow)
self._Iren.GetInteractorStyle().SetCurrentStyleToTrackballCamera()
self._Iren.AddObserver('CreateTimerEvent', self.CreateTimer)
......@@ -253,6 +253,9 @@ class GtkGLExtVTKRenderWindowInteractor(gtk.gtkgl.DrawingArea):
def main():
from vtkmodules.vtkFiltersSources import vtkConeSource
from vtkmodules.vtkRenderingCore import vtkActor, vtkPolyDataMapper, vtkRenderer
# The main window
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.set_title("A GtkVTKRenderWindow Demo!")
......@@ -277,15 +280,15 @@ def main():
gvtk.AddObserver("ExitEvent", lambda o,e,x=None: x)
# The VTK stuff.
cone = vtk.vtkConeSource()
cone = vtkConeSource()
cone.SetResolution(80)
coneMapper = vtk.vtkPolyDataMapper()
coneMapper = vtkPolyDataMapper()
coneMapper.SetInputConnection(cone.GetOutputPort())
#coneActor = vtk.vtkLODActor()
coneActor = vtk.vtkActor()
#coneActor = vtkLODActor()
coneActor = vtkActor()
coneActor.SetMapper(coneMapper)
coneActor.GetProperty().SetColor(0.5, 0.5, 1.0)
ren = vtk.vtkRenderer()
ren = vtkRenderer()
gvtk.GetRenderWindow().AddRenderer(ren)
ren.AddActor(coneActor)
......
......@@ -37,7 +37,7 @@ Bugs:
"""
import gtk, GDK, gtkgl
import vtk
from vtkmodules.vtkRenderingCore import vtkCellPicker, vtkProperty, vtkRenderWindow
import math
......@@ -56,7 +56,7 @@ class GtkVTKRenderWindowBase(gtkgl.GtkGLArea):
l.insert(0, self)
l.insert(1, attr)
apply(gtkgl.GtkGLArea.__init__, l)
self._RenderWindow = vtk.vtkRenderWindow()
self._RenderWindow = vtkRenderWindow()
# private attributes
self.__Created = 0
......@@ -195,9 +195,9 @@ class GtkVTKRenderWindow(GtkVTKRenderWindowBase):
self._ViewportCenterX = 0
self._ViewportCenterY = 0
self._Picker = vtk.vtkCellPicker()
self._Picker = vtkCellPicker()
self._PickedAssembly = None
self._PickedProperty = vtk.vtkProperty()
self._PickedProperty = vtkProperty()
self._PickedProperty.SetColor(1, 0, 0)
self._PrePickedProperty = None
......@@ -482,6 +482,9 @@ class GtkVTKRenderWindow(GtkVTKRenderWindowBase):
def main():
from vtkmodules.vtkFiltersSources import vtkConeSource
from vtkmodules.vtkRenderingCore import vtkActor, vtkPolyDataMapper, vtkRenderer
# The main window
window = gtk.GtkWindow(gtk.WINDOW_TOPLEVEL)
window.set_title("A GtkVTKRenderWindow Demo!")
......@@ -502,15 +505,15 @@ def main():
gvtk.show()
# The VTK stuff.
cone = vtk.vtkConeSource()
cone = vtkConeSource()
cone.SetResolution(80)
coneMapper = vtk.vtkPolyDataMapper()
coneMapper = vtkPolyDataMapper()
coneMapper.SetInputConnection(cone.GetOutputPort())
#coneActor = vtk.vtkLODActor()
coneActor = vtk.vtkActor()
#coneActor = vtkLODActor()
coneActor = vtkActor()
coneActor.SetMapper(coneMapper)
coneActor.GetProperty().SetColor(0.5, 0.5, 1.0)
ren = vtk.vtkRenderer()
ren = vtkRenderer()
gvtk.GetRenderWindow().AddRenderer(ren)
ren.AddActor(coneActor)
......
......@@ -27,7 +27,7 @@ Bugs:
"""
import gtk, GDK, gtkgl
import vtk
from vtkmodules.vtkRenderingCore import vtkGenericRenderWindowInteractor
import math
......@@ -45,13 +45,13 @@ class GtkVTKRenderWindowInteractor(gtkgl.GtkGLArea):
l.insert(0, self)
l.insert(1, attr)
apply(gtkgl.GtkGLArea.__init__, l)
self._RenderWindow = vtk.vtkRenderWindow()
self._RenderWindow = vtkRenderWindow()
# private attributes
self.__Created = 0
self._ActiveButton = 0
self._Iren = vtk.vtkGenericRenderWindowInteractor()
self._Iren = vtkGenericRenderWindowInteractor()
self._Iren.SetRenderWindow(self._RenderWindow)
self._Iren.AddObserver('CreateTimerEvent', self.CreateTimer)
......@@ -246,6 +246,9 @@ class GtkVTKRenderWindowInteractor(gtkgl.GtkGLArea):
def main():
from vtkmodules.vtkFiltersSources import vtkConeSource
from vtkmodules.vtkRenderingCore import vtkActor, vtkPolyDataMapper, vtkRenderer
# The main window
window = gtk.GtkWindow(gtk.WINDOW_TOPLEVEL)
window.set_title("A GtkVTKRenderWindow Demo!")
......@@ -270,15 +273,15 @@ def main():
gvtk.AddObserver("ExitEvent", lambda o,e,x=None: x)
# The VTK stuff.
cone = vtk.vtkConeSource()
cone = vtkConeSource()
cone.SetResolution(80)
coneMapper = vtk.vtkPolyDataMapper()
coneMapper = vtkPolyDataMapper()
coneMapper.SetInputConnection(cone.GetOutputPort())
#coneActor = vtk.vtkLODActor()
coneActor = vtk.vtkActor()
#coneActor = vtkLODActor()
coneActor = vtkActor()
coneActor.SetMapper(coneMapper)
coneActor.GetProperty().SetColor(0.5, 0.5, 1.0)
ren = vtk.vtkRenderer()
ren = vtkRenderer()
gvtk.GetRenderWindow().AddRenderer(ren)
ren.AddActor(coneActor)
......
......@@ -245,7 +245,7 @@ def bitwise_or(array1, array2):
def make_point_mask_from_NaNs(dataset, array):
"""This method will create a ghost array corresponding to an
input with NaN values. For each NaN value, the output array will
have a corresponding value of vtk.vtkDataSetAttributes.HIDDENPOINT.
have a corresponding value of vtkmodules.vtkCommonDataModel.vtkDataSetAttributes.HIDDENPOINT.
These values are also combined with any ghost values that the
dataset may have."""
from ..vtkCommonDataModel import vtkDataSetAttributes
......@@ -255,7 +255,7 @@ def make_point_mask_from_NaNs(dataset, array):
def make_cell_mask_from_NaNs(dataset, array):
"""This method will create a ghost array corresponding to an
input with NaN values. For each NaN value, the output array will
have a corresponding value of vtk.vtkDataSetAttributes.HIDDENCELL.
have a corresponding value of vtkmodules.vtkCommonDataModel.vtkDataSetAttributes.HIDDENCELL.
These values are also combined with any ghost values that the
dataset may have."""
from ..vtkCommonDataModel import vtkDataSetAttributes
......@@ -265,7 +265,7 @@ def make_cell_mask_from_NaNs(dataset, array):
def make_mask_from_NaNs(array, ghost_array=dsa.NoneArray, is_cell=False):
"""This method will create a ghost array corresponding to an
input with NaN values. For each NaN value, the output array will
have a corresponding value of vtk.vtkDataSetAttributes.HIDDENPOINT or
have a corresponding value of vtkmodules.vtkCommonDataModel.vtkDataSetAttributes.HIDDENPOINT or
HIDDENCELL is the is_cell argument is true. If an input ghost_array
is passed, the array is bitwise_or'ed with it, simply adding
the new ghost values to it."""
......@@ -292,7 +292,7 @@ def sum(array, axis=None, controller=None):
defined. To disable parallel summing when running in parallel, pass
a dummy controller as follows:
sum(array, controller=vtk.vtkDummyController()).
sum(array, controller=vtkmodules.vtkParallelCore.vtkDummyController()).
"""
class SumImpl:
def op(self):
......@@ -332,7 +332,7 @@ def max(array, axis=None, controller=None):
is defined. To disable parallel summing when running in parallel, pass a
dummy controller as follows:
max(array, controller=vtk.vtkDummyController()).
max(array, controller=vtkmodules.vtkParallelCore.vtkDummyController()).
"""
class MaxImpl:
def op(self):
......@@ -370,7 +370,7 @@ def min(array, axis=None, controller=None):
when a controller argument is passed or the global controller is defined.
To disable parallel summing when running in parallel, pass a dummy controller as follows:
min(array, controller=vtk.vtkDummyController()).
min(array, controller=vtkmodules.vtkParallelCore.vtkDummyController()).
"""
class MinImpl:
def op(self):
......@@ -543,7 +543,7 @@ def sum_per_block(array, axis=None, controller=None):
defined. To disable parallel summing when running in parallel, pass
a dummy controller as follows:
sum_per_block(array, controller=vtk.vtkDummyController()).
sum_per_block(array, controller=vtkmodules.vtkParallelCore.vtkDummyController()).
"""
class SumPerBlockImpl:
def op(self):
......@@ -605,7 +605,7 @@ def mean_per_block(array, axis=None, controller=None):
is defined. To disable parallel summing when running in parallel, pass a
dummy controller as follows:
mean(array, controller=vtk.vtkDummyController()).
mean(array, controller=vtkmodules.vtkParallelCore.vtkDummyController()).
"""
if axis is None or axis == 0:
return sum_per_block(array, axis, controller) / count_per_block(array, axis, controller)
......@@ -627,7 +627,7 @@ def max_per_block(array, axis=None, controller=None):
is defined. To disable parallel summing when running in parallel, pass a
dummy controller as follows:
max_per_block(array, controller=vtk.vtkDummyController()).
max_per_block(array, controller=vtkmodules.vtkParallelCore.vtkDummyController()).
"""
class MaxPerBlockImpl:
def op(self):
......@@ -660,7 +660,7 @@ def min_per_block(array, axis=None, controller=None):
is defined. To disable parallel summing when running in parallel, pass a
dummy controller as follows:
min_per_block(array, controller=vtk.vtkDummyController()).
min_per_block(array, controller=vtkmodules.vtkParallelCore.vtkDummyController()).
"""
class MinPerBlockImpl:
def op(self):
......@@ -755,7 +755,7 @@ def mean(array, axis=None, controller=None, size=None):
is defined. To disable parallel summing when running in parallel, pass a
dummy controller as follows:
mean(array, controller=vtk.vtkDummyController()).
mean(array, controller=vtkmodules.vtkParallelCore.vtkDummyController()).
"""
if axis is None or axis == 0:
......@@ -782,7 +782,7 @@ def var(array, axis=None, controller=None):
is defined. To disable parallel summing when running in parallel, pass a
dummy controller as follows:
var(array, controller=vtk.vtkDummyController()).
var(array, controller=vtkmodules.vtkParallelCore.vtkDummyController()).
"""
if axis is None or axis == 0:
......@@ -810,7 +810,7 @@ def std(array, axis=None, controller=None):
is defined. To disable parallel summing when running in parallel, pass a dummy
controller as follows:
std(array, controller=vtk.vtkDummyController()).
std(array, controller=vtkmodules.vtkParallelCore.vtkDummyController()).
"""
return sqrt(var(array, axis, controller))
......
......@@ -3,11 +3,11 @@ to VTK datasets and arrays. This is best described with some examples.
To normalize a VTK array:
import vtk
import vtk.numpy_interface.dataset_adapter as dsa
import vtk.numpy_interface.algorithms as algs
from vtkmodules.vtkImagingCore vtkRTAnalyticSource
import vtkmodules.numpy_interface.dataset_adapter as dsa
import vtkmodules.numpy_interface.algorithms as algs
rt = vtk.vtkRTAnalyticSource()
rt = vtkRTAnalyticSource()
rt.Update()
image = dsa.WrapDataObject(rt.GetOutput())
rtdata = image.PointData['RTData']
......@@ -48,7 +48,8 @@ algorithms module.
This module also provides an API to access composite datasets.
For example:
mb = vtk.vtkMultiBlockDataSet()
from vtkmodules.vtkCommonDataModel import vtkMultiBlockDataSet
mb = vtkMultiBlockDataSet()
mb.SetBlock(0, image.VTKObject)
mb.SetBlock(1e, image.VTKObject)
cds = dsa.WrapDataObject(mb)
......
from __future__ import absolute_import
from . import dataset_adapter as dsa
import numpy
from vtk.util import numpy_support
import vtk
from vtkmodules.util import numpy_support
from vtkmodules.vtkCommonDataModel import vtkImageData
from vtkmodules.vtkFiltersCore import vtkCellDataToPointData, vtkPolyDataNormals
from vtkmodules.vtkFiltersGeneral import vtkCellDerivatives
from vtkmodules.vtkFiltersVerdict import vtkCellSizeFilter, vtkCellQuality, vtkMatrixMathFilter
def _cell_derivatives (narray, dataset, attribute_type, filter):
if not dataset :
......@@ -56,7 +59,7 @@ def _cell_derivatives (narray, dataset, attribute_type, filter):
if attribute_type == 'scalars' : ds2.GetCellData().SetScalars(varray)
else : ds2.GetCellData().SetVectors(varray)
c2p = vtk.vtkCellDataToPointData()
c2p = vtkCellDataToPointData()
c2p.SetInputData(ds2)
c2p.Update()
......@@ -71,7 +74,7 @@ def _cell_derivatives (narray, dataset, attribute_type, filter):
if dsa.ArrayAssociation.POINT == narray.Association :
# Since the data is associated with cell and the query is on points
# we have to convert to point data before returning
c2p = vtk.vtkCellDataToPointData()
c2p = vtkCellDataToPointData()
c2p.SetInputConnection(filter.GetOutputPort())
c2p.Update()
return c2p.GetOutput().GetPointData()
......@@ -90,7 +93,7 @@ def _cell_quality (dataset, quality) :
ds.UnRegister(None)
ds.CopyStructure(dataset.VTKObject)
filter = vtk.vtkCellQuality()
filter = vtkCellQuality()
filter.SetInputData(ds)
if "area" == quality : filter.SetQualityMeasureToArea()
......@@ -138,14 +141,14 @@ def _matrix_math_filter (narray, operation) :
ncols = narray.shape[1] * narray.shape[2]
narray = narray.reshape(nrows, ncols)
ds = vtk.vtkImageData()
ds = vtkImageData()
ds.SetDimensions(nrows, 1, 1)
varray = numpy_support.numpy_to_vtk(narray)
varray.SetName('tensors')
ds.GetPointData().SetTensors(varray)
filter = vtk.vtkMatrixMathFilter()
filter = vtkMatrixMathFilter()
if operation == 'Determinant' : filter.SetOperationToDeterminant()
elif operation == 'Inverse' : filter.SetOperationToInverse()
......@@ -226,7 +229,7 @@ def curl (narray, dataset=None):
raise RuntimeError('Curl only works with an array of 3D vectors.' +
'Input shape ' + str(narray.shape))
cd = vtk.vtkCellDerivatives()
cd = vtkCellDerivatives()
cd.SetVectorModeToComputeVorticity()
res = _cell_derivatives(narray, dataset, 'vectors', cd)
......@@ -310,7 +313,7 @@ def gradient(narray, dataset=None):
raise RuntimeError('Gradient only works with scalars (1 component) and vectors (3 component)' +
' Input shape ' + str(narray.shape))
cd = vtk.vtkCellDerivatives()
cd = vtkCellDerivatives()
if ncomp == 1 : attribute_type = 'scalars'
else : attribute_type = 'vectors'
......@@ -420,7 +423,7 @@ def strain (narray, dataset=None) :
raise RuntimeError('strain only works with an array of 3D vectors' +
'Input shape ' + str(narray.shape))
cd = vtk.vtkCellDerivatives()
cd = vtkCellDerivatives()
cd.SetTensorModeToComputeStrain()
res = _cell_derivatives(narray, dataset, 'vectors', cd)
......@@ -450,7 +453,7 @@ def surface_normal (dataset) :
ds.UnRegister(None)
ds.CopyStructure(dataset.VTKObject)
filter = vtk.vtkPolyDataNormals()
filter = vtkPolyDataNormals()
filter.SetInputData(ds)
filter.ComputeCellNormalsOn()
filter.ComputePointNormalsOff()
......@@ -497,7 +500,7 @@ def volume (dataset) :
ds.UnRegister(None)
ds.CopyStructure(dataset.VTKObject)
filter = vtk.vtkCellSizeFilter()
filter = vtkCellSizeFilter()
filter.SetInputData(ds)
filter.ComputeVertexCountOff()
filter.ComputeLengthOff()
......@@ -526,7 +529,7 @@ def vertex_normal (dataset) :
ds.UnRegister(None)
ds.CopyStructure(dataset.VTKObject)
filter = vtk.vtkPolyDataNormals()
filter = vtkPolyDataNormals()
filter.SetInputData(ds)
filter.ComputeCellNormalsOff()
filter.ComputePointNormalsOn()
......
......@@ -42,8 +42,8 @@ Changes by Fabian Wenzel, Jan. 2016
# Check whether a specific PyQt implementation was chosen
try:
import vtk.qt
PyQtImpl = vtk.qt.PyQtImpl
import vtkmodules.qt
PyQtImpl = vtkmodules.qt.PyQtImpl
except ImportError:
pass
......@@ -51,11 +51,13 @@ except ImportError:
# class was chosen, can be set to "QGLWidget"
QVTKRWIBase = "QWidget"
try:
import vtk.qt
QVTKRWIBase = vtk.qt.QVTKRWIBase
import vtkmodules.qt
QVTKRWIBase = vtkmodules.qt.QVTKRWIBase
except ImportError:
pass
from vtkmodules.vtkRenderingCore import vtkGenericRenderWindowInteractor, vtkRenderWindow
if PyQtImpl is None:
# Autodetect the PyQt implementation to use
try:
......@@ -237,7 +239,7 @@ class QVTKRenderWindowInteractor(QVTKRWIBaseClass):
if rw: # user-supplied render window
self._RenderWindow = rw
else:
self._RenderWindow = vtk.vtkRenderWindow()
self._RenderWindow = vtkRenderWindow()
WId = self.winId()
......@@ -273,7 +275,7 @@ class QVTKRenderWindowInteractor(QVTKRWIBaseClass):
try:
self._Iren = kw['iren']
except KeyError:
self._Iren = vtk.vtkGenericRenderWindowInteractor()
self._Iren = vtkGenericRenderWindowInteractor()
self._Iren.SetRenderWindow(self._RenderWindow)
# do all the necessary qt setup
......@@ -356,7 +358,7 @@ class QVTKRenderWindowInteractor(QVTKRWIBaseClass):
def resizeEvent(self, ev):
w = self.width()
h = self.height()
vtk.vtkRenderWindow.SetSize(self._RenderWindow, w, h)
vtkRenderWindow.SetSize(self._RenderWindow, w, h)
self._Iren.SetSize(w, h)
self._Iren.ConfigureEvent()
self.update()
......@@ -479,6 +481,9 @@ class QVTKRenderWindowInteractor(QVTKRWIBaseClass):
def QVTKRenderWidgetConeExample():
"""A simple example that uses the QVTKRenderWindowInteractor class."""
from vtkmodules.vtkFiltersSources import vtkConeSource
from vtkmodules.vtkRenderingCore import vtkActor, vtkPolyDataMapper, vtkRenderer
# every QT app needs an app
app = QApplication(['QVTKRenderWindowInteractor'])
......@@ -489,16 +494,16 @@ def QVTKRenderWidgetConeExample():
# if you don't want the 'q' key to exit comment this.
widget.AddObserver("ExitEvent", lambda o, e, a=app: a.quit())
ren = vtk.vtkRenderer()
ren = vtkRenderer()
widget.GetRenderWindow().AddRenderer(ren)
cone = vtk.vtkConeSource()
cone = vtkConeSource()
cone.SetResolution(8)
coneMapper = vtk.vtkPolyDataMapper()
coneMapper = vtkPolyDataMapper()
coneMapper.SetInputConnection(cone.GetOutputPort())
coneActor = vtk.vtkActor()
coneActor = vtkActor()
coneActor.SetMapper(coneMapper)
ren.AddActor(coneActor)
......
......@@ -5,7 +5,7 @@ Example usage:
import sys
import PyQt5
from PyQt5.QtWidgets import QApplication
from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
from vtkmodules.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
app = QApplication(sys.argv)
......
import vtk.qt
import vtkmodules.qt
try:
import PyQt4
vtk.qt.PyQtImpl = "PyQt4"
vtkmodules.qt.PyQtImpl = "PyQt4"
except ImportError:
try:
import PySide
vtk.qt.PyQtImpl = "PySide"
vtkmodules.qt.PyQtImpl = "PySide"
except ImportError:
raise ImportError("Cannot load either PyQt or PySide")
from vtk.qt.QVTKRenderWindowInteractor import *
from vtkmodules.qt.QVTKRenderWindowInteractor import *
if __name__ == "__main__":
print(PyQtImpl)
......
"""PyQt v4 widget for VTK.
This module is a version of the vtk.qt module that requires Qt4.
If you do not specifically require Qt4, then use vtk.qt instead.
This module is a version of the vtkmodules.qt module that requires Qt4.
If you do not specifically require Qt4, then use vtkmodules.qt instead.
"""
__all__ = ['QVTKRenderWindowInteractor']