]> git.saurik.com Git - wxWidgets.git/blob - utils/wxPython/lib/vtk.py
c79f15a3ad33b16e2b23ebd1abd9cda7f8edb1ac
[wxWidgets.git] / utils / wxPython / lib / vtk.py
1 #----------------------------------------------------------------------
2 # Name: wxPython.lib.vtk
3 # Purpose: Provides a wrapper around the vtkRenderWindow from the
4 # VTK Visualization Toolkit. Requires the VTK Python
5 # extensions from http://www.kitware.com/
6 #
7 # Author: Robin Dunn
8 #
9 # Created: 16-Nov-1999
10 # RCS-ID: $Id$
11 # Copyright: (c) 1999 by Total Control Software
12 # Licence: wxWindows license
13 #----------------------------------------------------------------------
14
15
16 try: # For Win32,
17 from vtkpython import *
18 except ImportError:
19 try: # for Unix. Why they do it this way is anybody's guess...
20 from libVTKCommonPython import *
21 from libVTKGraphicsPython import *
22 from libVTKImagingPython import *
23 except ImportError:
24 raise ImportError, "VTK extension module not found"
25
26 from wxPython.wx import *
27 import math
28
29 #----------------------------------------------------------------------
30
31 class wxVTKRenderWindow(wxScrolledWindow):
32 def __init__(self, parent, id, position=wxDefaultPosition,
33 size=wxDefaultSize, style=0):
34 wxScrolledWindow.__init__(self, parent, id, position, size, style)
35
36 self.renderWindow = vtkRenderWindow()
37
38 EVT_WINDOW_CREATE(self, self.OnCreateWindow)
39
40 EVT_LEFT_DOWN (self, self.SaveClick)
41 EVT_MIDDLE_DOWN(self, self.SaveClick)
42 EVT_RIGHT_DOWN (self, self.SaveClick)
43 EVT_LEFT_UP (self, self.Release)
44 EVT_MIDDLE_UP (self, self.Release)
45 EVT_RIGHT_UP (self, self.Release)
46 EVT_MOTION (self, self.MouseMotion)
47
48
49 def GetRenderer(self):
50 self.renderWindow.GetRenderers().InitTraversal()
51 return self.renderWindow.GetRenderers().GetNextItem()
52
53
54 def GetRenderWindow(self):
55 return self.renderWindow
56
57
58 def OnPaint(self, event):
59 dc = wxPaintDC(self)
60 self.renderWindow.Render()
61
62 def OnCreateWindow(self, event):
63 hdl = self.GetHandle()
64 self.renderWindow.SetWindowInfo(str(hdl))
65
66 def OnEraseBackground(self, event):
67 pass
68
69
70
71 def SaveClick(self, event):
72 self.prev_x, self.prev_y = event.GetPositionTuple()
73 self.CaptureMouse()
74
75 def Release(self, event):
76 self.ReleaseMouse()
77
78 def MouseMotion(self, event):
79 event.x, event.y = event.GetPositionTuple()
80 size = self.GetClientSize()
81 if event.LeftIsDown():
82 # rotate
83 camera = self.GetRenderer().GetActiveCamera()
84 camera.Azimuth(float(self.prev_x - event.x) / size.width * 360)
85 camera.Elevation(float(event.y - self.prev_y) / size.width * 360)
86 camera.OrthogonalizeViewUp()
87 self.MotionUpdate(event)
88
89 elif event.MiddleIsDown():
90 # pan
91 camera = self.GetRenderer().GetActiveCamera()
92 camera.Yaw(-float(self.prev_x - event.x) / size.width * 30)
93 camera.Pitch(float(event.y - self.prev_y) / size.width * 30)
94 camera.OrthogonalizeViewUp()
95 self.MotionUpdate(event)
96
97 elif event.RightIsDown():
98 # dolly
99 camera = self.GetRenderer().GetActiveCamera()
100 camera.Dolly(math.exp(float((event.x - self.prev_x) - \
101 (event.y - self.prev_y))/ \
102 size.width))
103 self.MotionUpdate(event)
104
105
106 def MotionUpdate(self,event):
107 renderer = self.GetRenderer()
108 renderer.GetLights().InitTraversal()
109 light = renderer.GetLights().GetNextItem()
110 camera = renderer.GetActiveCamera()
111 light.SetPosition(camera.GetPosition())
112 light.SetFocalPoint(camera.GetFocalPoint())
113 self.renderWindow.Render()
114 self.prev_x = event.x
115 self.prev_y = event.y
116
117
118