]>
git.saurik.com Git - wxWidgets.git/blob - utils/wxPython/lib/vtk.py
c79f15a3ad33b16e2b23ebd1abd9cda7f8edb1ac
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/
11 # Copyright: (c) 1999 by Total Control Software
12 # Licence: wxWindows license
13 #----------------------------------------------------------------------
17 from vtkpython
import *
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 *
24 raise ImportError, "VTK extension module not found"
26 from wxPython
.wx
import *
29 #----------------------------------------------------------------------
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
)
36 self
.renderWindow
= vtkRenderWindow()
38 EVT_WINDOW_CREATE(self
, self
.OnCreateWindow
)
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
)
49 def GetRenderer(self
):
50 self
.renderWindow
.GetRenderers().InitTraversal()
51 return self
.renderWindow
.GetRenderers().GetNextItem()
54 def GetRenderWindow(self
):
55 return self
.renderWindow
58 def OnPaint(self
, event
):
60 self
.renderWindow
.Render()
62 def OnCreateWindow(self
, event
):
63 hdl
= self
.GetHandle()
64 self
.renderWindow
.SetWindowInfo(str(hdl
))
66 def OnEraseBackground(self
, event
):
71 def SaveClick(self
, event
):
72 self
.prev_x
, self
.prev_y
= event
.GetPositionTuple()
75 def Release(self
, event
):
78 def MouseMotion(self
, event
):
79 event
.x
, event
.y
= event
.GetPositionTuple()
80 size
= self
.GetClientSize()
81 if event
.LeftIsDown():
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
)
89 elif event
.MiddleIsDown():
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
)
97 elif event
.RightIsDown():
99 camera
= self
.GetRenderer().GetActiveCamera()
100 camera
.Dolly(math
.exp(float((event
.x
- self
.prev_x
) - \
101 (event
.y
- self
.prev_y
))/ \
103 self
.MotionUpdate(event
)
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