--- /dev/null
+#----------------------------------------------------------------------
+# Name: wxPython.lib.vtk
+# Purpose: Provides a wrapper around the vtkRenderWindow from the
+# VTK Visualization Toolkit. Requires the VTK Python
+# extensions from http://www.kitware.com/
+#
+# Author: Robin Dunn
+#
+# Created: 16-Nov-1999
+# RCS-ID: $Id$
+# Copyright: (c) 1999 by Total Control Software
+# Licence: wxWindows license
+#----------------------------------------------------------------------
+
+
+try: # For Win32,
+ from vtkpython import *
+except ImportError:
+ try: # for Unix. Why they do it this way is anybody's guess...
+ from libVTKCommonPython import *
+ from libVTKGraphicsPython import *
+ from libVTKImagingPython import *
+ except ImportError:
+ raise ImportError, "VTK extension module not found"
+
+from wxPython.wx import *
+import math
+
+#----------------------------------------------------------------------
+
+class wxVTKRenderWindow(wxWindow):
+ def __init__(self, parent, id, position=wxDefaultPosition,
+ size=wxDefaultSize, style=0):
+ wxWindow.__init__(self, parent, id, position, size, style)
+
+ self.renderWindow = vtkRenderWindow()
+
+ hdl = self.GetHandle()
+ self.renderWindow.SetWindowInfo(str(hdl))
+
+ EVT_LEFT_DOWN (self, self.SaveClick)
+ EVT_MIDDLE_DOWN(self, self.SaveClick)
+ EVT_RIGHT_DOWN (self, self.SaveClick)
+ EVT_LEFT_UP (self, self.Release)
+ EVT_MIDDLE_UP (self, self.Release)
+ EVT_RIGHT_UP (self, self.Release)
+ EVT_MOTION(self, self.MouseMotion)
+
+
+ def GetRenderer(self):
+ self.renderWindow.GetRenderers().InitTraversal()
+ return self.renderWindow.GetRenderers().GetNextItem()
+
+
+ def GetRenderWindow(self):
+ return self.renderWindow
+
+
+ def OnPaint(self, event):
+ dc = wxPaintDC(self)
+ self.renderWindow.Render()
+
+
+ def SaveClick(self, event):
+ self.prev_x, self.prev_y = event.GetPositionTuple()
+ self.CaptureMouse()
+
+ def Release(self, event):
+ self.ReleaseMouse()
+
+ def MouseMotion(self, event):
+ event.x, event.y = event.GetPositionTuple()
+ size = self.GetClientSize()
+ if event.LeftIsDown():
+ # rotate
+ camera = self.GetRenderer().GetActiveCamera()
+ camera.Azimuth(float(self.prev_x - event.x) / size.width * 360)
+ camera.Elevation(float(event.y - self.prev_y) / size.width * 360)
+ camera.OrthogonalizeViewUp()
+ self.MotionUpdate(event)
+
+ elif event.MiddleIsDown():
+ # pan
+ camera = self.GetRenderer().GetActiveCamera()
+ camera.Yaw(-float(self.prev_x - event.x) / size.width * 30)
+ camera.Pitch(float(event.y - self.prev_y) / size.width * 30)
+ camera.OrthogonalizeViewUp()
+ self.MotionUpdate(event)
+
+ elif event.RightIsDown():
+ # dolly
+ camera = self.GetRenderer().GetActiveCamera()
+ camera.Dolly(math.exp(float((event.x - self.prev_x) - \
+ (event.y - self.prev_y))/ \
+ size.width))
+ self.MotionUpdate(event)
+
+
+ def MotionUpdate(self,event):
+ renderer = self.GetRenderer()
+ renderer.GetLights().InitTraversal()
+ light = renderer.GetLights().GetNextItem()
+ camera = renderer.GetActiveCamera()
+ light.SetPosition(camera.GetPosition())
+ light.SetFocalPoint(camera.GetFocalPoint())
+ self.renderWindow.Render()
+ self.prev_x = event.x
+ self.prev_y = event.y
+
+
+
+
+if __name__ == '__main__':
+ class TestFrame(wxFrame):
+ def __init__(self, parent):
+ wxFrame.__init__(self, parent, -1, "VTK Test", size=(450,450))
+
+ rw = wxVTKRenderWindow(self, -1)
+
+ # Get the render window
+ renWin = rw.GetRenderWindow()
+
+ # Next, do the VTK stuff
+ ren = vtkRenderer()
+ renWin.AddRenderer(ren)
+ cone = vtkConeSource()
+ cone.SetResolution(80)
+ coneMapper = vtkPolyDataMapper()
+ coneMapper.SetInput(cone.GetOutput())
+ coneActor = vtkActor()
+ coneActor.SetMapper(coneMapper)
+ ren.AddActor(coneActor)
+ coneMapper.GetLookupTable().Build()
+
+ # Create a scalar bar
+ scalarBar = vtkScalarBarActor()
+ scalarBar.SetLookupTable(coneMapper.GetLookupTable())
+ scalarBar.SetTitle("Temperature")
+ scalarBar.GetPositionCoordinate().SetCoordinateSystemToNormalizedViewport()
+ scalarBar.GetPositionCoordinate().SetValue(0.1, 0.01)
+ scalarBar.SetOrientationToHorizontal()
+ scalarBar.SetWidth(0.8)
+ scalarBar.SetHeight(0.17)
+ ren.AddActor2D(scalarBar)
+
+
+
+ class TestApp(wxApp):
+ def OnInit(self):
+ f = TestFrame(None)
+ self.SetTopWindow(f)
+ f.Show(true)
+ return true
+
+ app = TestApp(0)
+ app.MainLoop()
+