]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/wxPython/lib/vtk.py
7977b6c450d4d9ab34b2c65d837ab0fa74d1d028
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 if wxPlatform
!= '__WXMSW__':
39 # We can't get the handle in wxGTK until after the widget
40 # is created, the window create event happens later so we'll
42 EVT_WINDOW_CREATE(self
, self
.OnCreateWindow
)
44 # but in MSW, the window create event happens durring the above
45 # call to __init__ so we have to do it here.
46 hdl
= self
.GetHandle()
47 self
.renderWindow
.SetWindowInfo(str(hdl
))
50 EVT_LEFT_DOWN (self
, self
.SaveClick
)
51 EVT_MIDDLE_DOWN(self
, self
.SaveClick
)
52 EVT_RIGHT_DOWN (self
, self
.SaveClick
)
53 EVT_LEFT_UP (self
, self
.Release
)
54 EVT_MIDDLE_UP (self
, self
.Release
)
55 EVT_RIGHT_UP (self
, self
.Release
)
56 EVT_MOTION (self
, self
.MouseMotion
)
58 EVT_ERASE_BACKGROUND(self
, self
.OnEraseBackground
)
59 EVT_PAINT(self
, self
.OnPaint
)
62 def GetRenderer(self
):
63 self
.renderWindow
.GetRenderers().InitTraversal()
64 return self
.renderWindow
.GetRenderers().GetNextItem()
67 def GetRenderWindow(self
):
68 return self
.renderWindow
71 def OnPaint(self
, event
):
73 self
.renderWindow
.Render()
75 def OnCreateWindow(self
, event
):
76 hdl
= self
.GetHandle()
77 self
.renderWindow
.SetWindowInfo(str(hdl
))
79 def OnEraseBackground(self
, event
):
84 def SaveClick(self
, event
):
85 self
.prev_x
, self
.prev_y
= event
.GetPositionTuple()
88 def Release(self
, event
):
91 def MouseMotion(self
, event
):
92 event
.x
, event
.y
= event
.GetPositionTuple()
93 size
= self
.GetClientSize()
94 if event
.LeftIsDown():
96 camera
= self
.GetRenderer().GetActiveCamera()
97 camera
.Azimuth(float(self
.prev_x
- event
.x
) / size
.width
* 360)
98 camera
.Elevation(float(event
.y
- self
.prev_y
) / size
.width
* 360)
99 camera
.OrthogonalizeViewUp()
100 self
.MotionUpdate(event
)
102 elif event
.MiddleIsDown():
104 camera
= self
.GetRenderer().GetActiveCamera()
105 camera
.Yaw(-float(self
.prev_x
- event
.x
) / size
.width
* 30)
106 camera
.Pitch(float(event
.y
- self
.prev_y
) / size
.width
* 30)
107 camera
.OrthogonalizeViewUp()
108 self
.MotionUpdate(event
)
110 elif event
.RightIsDown():
112 camera
= self
.GetRenderer().GetActiveCamera()
113 camera
.Dolly(math
.exp(float((event
.x
- self
.prev_x
) - \
114 (event
.y
- self
.prev_y
))/ \
116 self
.MotionUpdate(event
)
119 def MotionUpdate(self
,event
):
120 renderer
= self
.GetRenderer()
121 renderer
.GetLights().InitTraversal()
122 light
= renderer
.GetLights().GetNextItem()
123 camera
= renderer
.GetActiveCamera()
124 light
.SetPosition(camera
.GetPosition())
125 light
.SetFocalPoint(camera
.GetFocalPoint())
126 self
.renderWindow
.Render()
127 self
.prev_x
= event
.x
128 self
.prev_y
= event
.y