]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/wxPython/lib/vtk.py
Added support for current version of "emxomf".
[wxWidgets.git] / wxPython / wxPython / lib / vtk.py
index ad784dba0b19ee1f292723d1bc61ff8a54ecd030..1cb1c4b6e7d2b1808c845bdb60a9b0b10e2243db 100644 (file)
@@ -1,569 +1,8 @@
-"""
-VTK is now including a package for using VTK with wxPython, so this
-module is now officially nothing but ancient history.  If for some
-strange reason you really need this code (I don't know why, it didn't
-work all that well anyway,) then just remove the triple quotes below.
-I'm told that the module from Kitware is excellent and so you should
-really use it.  See the URL below to get a copy from CVS.
+## This file imports items from the wx package into the wxPython package for
+## backwards compatibility.  Some names will also have a 'wx' added on if
+## that is how they used to be named in the old wxPython package.
 
-http://public.kitware.com/cgi-bin/cvsweb.cgi/VTK/Wrapping/Python/vtk/wx/
-"""
+import wx.lib.vtk
 
-print __doc__
+__doc__ =  wx.lib.vtk.__doc__
 
-"""
-#----------------------------------------------------------------------
-# 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
-#----------------------------------------------------------------------
-
-# This class has been rewritten and improved by Prabhu Ramachandran
-# <prabhu@aero.iitm.ernet.in>.  It has been tested under Win32 and
-# Linux.  Many thanks to Eric Boix <frog@creatis.insa-lyon.fr> for
-# testing it under Windows and finding and fixing many errors.
-# Thanks also to Sebastien BARRE <sebastien@barre.nom.fr> for his
-# suggestions.
-
-
-try:
-    from vtkpython import *
-except ImportError:
-    raise ImportError, "VTK extension module not found"
-
-from wxPython.wx import *
-import math
-
-#----------------------------------------------------------------------
-
-DEBUG = 0
-
-def debug(msg):
-    if DEBUG:
-        print msg
-
-
-class wxVTKRenderWindowBase(wxWindow):
-    """
-    A base class that enables one to embed a vtkRenderWindow into
-    a wxPython widget.  This class embeds the RenderWindow correctly
-    under different platforms.  Provided are some empty methods that
-    can be overloaded to provide a user defined interaction behaviour.
-    The event handling functions have names that are similar to the
-    ones in the vtkInteractorStyle class included with VTK.
-    """
-
-    def __init__(self, parent, id, position=wxDefaultPosition,
-                 size=wxDefaultSize, style=0):
-        wxWindow.__init__(self, parent, id, position, size, style | wxWANTS_CHARS)
-        self._RenderWindow = vtkRenderWindow()
-
-        self.__InExpose = 0
-        self.__Created = 0
-
-        if wxPlatform != '__WXMSW__':
-            # We can't get the handle in wxGTK until after the widget
-            # is created, the window create event happens later so we'll
-            # catch it there
-            EVT_WINDOW_CREATE(self, self.OnCreateWindow)
-            EVT_PAINT       (self, self.OnExpose)
-        else:
-            # but in MSW, the window create event happens durring the above
-            # call to __init__ so we have to do it here.
-            hdl = self.GetHandle()
-            self._RenderWindow.SetWindowInfo(str(hdl))
-            EVT_PAINT       (self, self.OnExpose)
-            self.__Created = 1
-
-        # common for all platforms
-        EVT_SIZE        (self, self.OnConfigure)
-
-        # setup the user defined events.
-        self.SetupEvents()
-
-
-    def SetupEvents(self):
-        "Setup the user defined event bindings."
-        # Remember to bind everything to self.box and NOT self
-        EVT_LEFT_DOWN    (self, self.OnLeftButtonDown)
-        EVT_MIDDLE_DOWN  (self, self.OnMiddleButtonDown)
-        EVT_RIGHT_DOWN   (self, self.OnRightButtonDown)
-        EVT_LEFT_UP      (self, self.OnLeftButtonUp)
-        EVT_MIDDLE_UP    (self, self.OnMiddleButtonUp)
-        EVT_RIGHT_UP     (self, self.OnRightButtonUp)
-        EVT_MOTION       (self, self.OnMouseMove)
-        EVT_ENTER_WINDOW (self, self.OnEnter)
-        EVT_LEAVE_WINDOW (self, self.OnLeave)
-        EVT_CHAR         (self, self.OnChar)
-        # Add your bindings if you want them in the derived class.
-
-
-    def GetRenderer(self):
-        self._RenderWindow.GetRenderers().InitTraversal()
-        return self._RenderWindow.GetRenderers().GetNextItem()
-
-
-    def GetRenderWindow(self):
-        return self._RenderWindow
-
-
-    def Render(self):
-        if self.__Created:
-            # if block needed because calls to render before creation
-            # will prevent the renderwindow from being embedded into a
-            # wxPython widget.
-            self._RenderWindow.Render()
-
-
-    def OnExpose(self, event):
-        # I need this for the MDIDemo.  Somehow OnCreateWindow was
-        # not getting called.
-        if not self.__Created:
-            self.OnCreateWindow(event)
-        if (not self.__InExpose):
-            self.__InExpose = 1
-            dc = wxPaintDC(self)
-            self._RenderWindow.Render()
-            self.__InExpose = 0
-
-
-    def OnCreateWindow(self, event):
-       hdl = self.GetHandle()
-        try:
-            self._RenderWindow.SetParentInfo(str(hdl))
-        except:
-            self._RenderWindow.SetWindowInfo(str(hdl))
-            msg = "Warning:\n "\
-                  "Unable to call vtkRenderWindow.SetParentInfo\n\n"\
-                  "Using the SetWindowInfo method instead.  This\n"\
-                  "is likely to cause a lot of flicker when\n"\
-                  "rendering in the vtkRenderWindow.  Please\n"\
-                  "use a recent Nightly VTK release (later than\n"\
-                  "March 10 2001) to eliminate this problem."
-            dlg = wxMessageDialog(NULL, msg, "Warning!",
-                                   wxOK |wxICON_INFORMATION)
-            dlg.ShowModal()
-            dlg.Destroy()
-        self.__Created = 1
-
-
-    def OnConfigure(self, event):
-        sz = self.GetSize()
-        self.SetSize(sz)
-        # Ugly hack that according to Eric Boix is necessary under
-        # Windows.  If possible Try commenting this out and test under
-        # Windows.
-        #self._RenderWindow.GetSize()
-        #
-       self._RenderWindow.SetSize(sz.width, sz.height)
-
-
-    def OnLeftButtonDown(self, event):
-        "Left mouse button pressed."
-        pass
-
-
-    def OnMiddleButtonDown(self, event):
-        "Middle mouse button pressed."
-        pass
-
-
-    def OnRightButtonDown(self, event):
-        "Right mouse button pressed."
-        pass
-
-
-    def OnLeftButtonUp(self, event):
-        "Left mouse button released."
-        pass
-
-
-    def OnMiddleButtonUp(self, event):
-        "Middle mouse button released."
-        pass
-
-
-    def OnRightButtonUp(self, event):
-        "Right mouse button released."
-        pass
-
-
-    def OnMouseMove(self, event):
-        "Mouse has moved."
-        pass
-
-
-    def OnEnter(self, event):
-        "Entering the vtkRenderWindow."
-        pass
-
-
-    def OnLeave(self, event):
-        "Leaving the vtkRenderWindow."
-        pass
-
-
-    def OnChar(self, event):
-        "Process Key events."
-        pass
-
-
-    def OnKeyDown(self, event):
-        "Key pressed down."
-        pass
-
-
-    def OnKeyUp(self, event):
-        "Key released."
-        pass
-
-
-
-
-class wxVTKRenderWindow(wxVTKRenderWindowBase):
-    """
-    An example of a fully functional wxVTKRenderWindow that is
-    based on the vtkRenderWidget.py provided with the VTK sources.
-    """
-
-    def __init__(self, parent, id, position=wxDefaultPosition,
-                 size=wxDefaultSize, style=0):
-        wxVTKRenderWindowBase.__init__(self, parent, id, position, size,
-                                       style)
-
-        self._CurrentRenderer = None
-        self._CurrentCamera = None
-        self._CurrentZoom = 1.0
-        self._CurrentLight = None
-
-        self._ViewportCenterX = 0
-        self._ViewportCenterY = 0
-
-        self._Picker = vtkCellPicker()
-        self._PickedAssembly = None
-        self._PickedProperty = vtkProperty()
-        self._PickedProperty.SetColor(1,0,0)
-        self._PrePickedProperty = None
-
-        self._OldFocus = None
-
-        # these record the previous mouse position
-        self._LastX = 0
-        self._LastY = 0
-
-
-    def OnLeftButtonDown(self, event):
-        "Left mouse button pressed."
-        self.StartMotion(event)
-
-
-    def OnMiddleButtonDown(self, event):
-        "Middle mouse button pressed."
-        self.StartMotion(event)
-
-
-    def OnRightButtonDown(self, event):
-        "Right mouse button pressed."
-        self.StartMotion(event)
-
-
-    def OnLeftButtonUp(self, event):
-        "Left mouse button released."
-        self.EndMotion(event)
-
-
-    def OnMiddleButtonUp(self, event):
-        "Middle mouse button released."
-        self.EndMotion(event)
-
-
-    def OnRightButtonUp(self, event):
-        "Right mouse button released."
-        self.EndMotion(event)
-
-
-    def OnMouseMove(self, event):
-        event.x, event.y = event.GetPositionTuple()
-        if event.LeftIsDown():
-            if event.ShiftDown():
-                self.Pan(event.x, event.y)
-            else:
-                self.Rotate(event.x, event.y)
-
-        elif event.MiddleIsDown():
-            self.Pan(event.x, event.y)
-
-        elif event.RightIsDown():
-            self.Zoom(event.x, event.y)
-
-
-    def OnEnter(self, event):
-        self.__OldFocus = wxWindow_FindFocus()
-        self.SetFocus()
-        x, y = event.GetPositionTuple()
-        self.UpdateRenderer(x,y)
-
-
-    def OnLeave(self, event):
-        if (self._OldFocus != None):
-            self.__OldFocus.SetFocus()
-
-
-    def OnChar(self, event):
-        key = event.KeyCode()
-        if (key == ord('r')) or (key == ord('R')):
-            self.Reset()
-        elif (key == ord('w')) or (key == ord('W')):
-            self.Wireframe()
-        elif (key == ord('s')) or (key == ord('S')):
-            self.Surface()
-        elif (key == ord('p')) or (key == ord('P')):
-            x, y = event.GetPositionTuple()
-            self.PickActor(x, y)
-        else:
-            event.Skip()
-
-
-    # Start of internal functions
-    def GetZoomFactor(self):
-        return self._CurrentZoom
-
-
-    def SetZoomFactor(self, zf):
-        self._CurrentZoom = zf
-
-
-    def GetPicker(self):
-        return self._Picker
-
-
-    def Render(self):
-        if (self._CurrentLight):
-            light = self._CurrentLight
-            light.SetPosition(self._CurrentCamera.GetPosition())
-            light.SetFocalPoint(self._CurrentCamera.GetFocalPoint())
-
-        wxVTKRenderWindowBase.Render(self)
-
-
-    def UpdateRenderer(self, x, y):
-        """
-        UpdateRenderer will identify the renderer under the mouse and set
-        up _CurrentRenderer, _CurrentCamera, and _CurrentLight.
-        """
-        sz = self.GetSize()
-        windowX = sz.width
-        windowY = sz.height
-
-        renderers = self._RenderWindow.GetRenderers()
-        numRenderers = renderers.GetNumberOfItems()
-
-        self._CurrentRenderer = None
-        renderers.InitTraversal()
-        for i in range(0,numRenderers):
-            renderer = renderers.GetNextItem()
-            vx,vy = (0,0)
-            if (windowX > 1):
-                vx = float (x)/(windowX-1)
-            if (windowY > 1):
-                vy = (windowY-float(y)-1)/(windowY-1)
-            (vpxmin,vpymin,vpxmax,vpymax) = renderer.GetViewport()
-
-            if (vx >= vpxmin and vx <= vpxmax and
-                vy >= vpymin and vy <= vpymax):
-                self._CurrentRenderer = renderer
-                self._ViewportCenterX = float(windowX)*(vpxmax-vpxmin)/2.0\
-                                        +vpxmin
-                self._ViewportCenterY = float(windowY)*(vpymax-vpymin)/2.0\
-                                        +vpymin
-                self._CurrentCamera = self._CurrentRenderer.GetActiveCamera()
-                lights = self._CurrentRenderer.GetLights()
-                lights.InitTraversal()
-                self._CurrentLight = lights.GetNextItem()
-                break
-
-        self._LastX = x
-        self._LastY = y
-
-
-    def GetCurrentRenderer(self):
-        return self._CurrentRenderer
-
-
-    def StartMotion(self, event):
-        x, y = event.GetPositionTuple()
-        self.UpdateRenderer(x,y)
-        self.CaptureMouse()
-
-
-    def EndMotion(self, event=None):
-        if self._CurrentRenderer:
-            self.Render()
-        self.ReleaseMouse()
-
-
-    def Rotate(self,x,y):
-        if self._CurrentRenderer:
-
-            self._CurrentCamera.Azimuth(self._LastX - x)
-            self._CurrentCamera.Elevation(y - self._LastY)
-            self._CurrentCamera.OrthogonalizeViewUp()
-
-            self._LastX = x
-            self._LastY = y
-
-            self._CurrentRenderer.ResetCameraClippingRange()
-            self.Render()
-
-
-    def PanAbsolute(self, x_vec, y_vec):
-        if self._CurrentRenderer:
-
-            renderer = self._CurrentRenderer
-            camera = self._CurrentCamera
-            (pPoint0,pPoint1,pPoint2) = camera.GetPosition()
-            (fPoint0,fPoint1,fPoint2) = camera.GetFocalPoint()
-
-            if (camera.GetParallelProjection()):
-                renderer.SetWorldPoint(fPoint0,fPoint1,fPoint2,1.0)
-                renderer.WorldToDisplay()
-                fx,fy,fz = renderer.GetDisplayPoint()
-                renderer.SetDisplayPoint(fx+x_vec,
-                                         fy+y_vec,
-                                         fz)
-                renderer.DisplayToWorld()
-                fx,fy,fz,fw = renderer.GetWorldPoint()
-                camera.SetFocalPoint(fx,fy,fz)
-
-                renderer.SetWorldPoint(pPoint0,pPoint1,pPoint2,1.0)
-                renderer.WorldToDisplay()
-                fx,fy,fz = renderer.GetDisplayPoint()
-                renderer.SetDisplayPoint(fx+x_vec,
-                                         fy+y_vec,
-                                         fz)
-                renderer.DisplayToWorld()
-                fx,fy,fz,fw = renderer.GetWorldPoint()
-                camera.SetPosition(fx,fy,fz)
-
-            else:
-                (fPoint0,fPoint1,fPoint2) = camera.GetFocalPoint()
-                # Specify a point location in world coordinates
-                renderer.SetWorldPoint(fPoint0,fPoint1,fPoint2,1.0)
-                renderer.WorldToDisplay()
-                # Convert world point coordinates to display coordinates
-                dPoint = renderer.GetDisplayPoint()
-                focalDepth = dPoint[2]
-
-                aPoint0 = self._ViewportCenterX + x_vec
-                aPoint1 = self._ViewportCenterY + y_vec
-
-                renderer.SetDisplayPoint(aPoint0,aPoint1,focalDepth)
-                renderer.DisplayToWorld()
-
-                (rPoint0,rPoint1,rPoint2,rPoint3) = renderer.GetWorldPoint()
-                if (rPoint3 != 0.0):
-                    rPoint0 = rPoint0/rPoint3
-                    rPoint1 = rPoint1/rPoint3
-                    rPoint2 = rPoint2/rPoint3
-
-                camera.SetFocalPoint((fPoint0 - rPoint0) + fPoint0,
-                                     (fPoint1 - rPoint1) + fPoint1,
-                                     (fPoint2 - rPoint2) + fPoint2)
-
-                camera.SetPosition((fPoint0 - rPoint0) + pPoint0,
-                                   (fPoint1 - rPoint1) + pPoint1,
-                                   (fPoint2 - rPoint2) + pPoint2)
-
-            self.Render()
-
-
-    def Pan(self, x, y):
-        self.PanAbsolute(x - self._LastX, - y + self._LastY)
-        self._LastX = x
-        self._LastY = y
-
-
-    def Zoom(self,x,y):
-        if self._CurrentRenderer:
-
-            renderer = self._CurrentRenderer
-            camera = self._CurrentCamera
-
-            zoomFactor = math.pow(1.02,(0.5*(self._LastY - y)))
-            self._CurrentZoom = self._CurrentZoom * zoomFactor
-
-            if camera.GetParallelProjection():
-                parallelScale = camera.GetParallelScale()/zoomFactor
-                camera.SetParallelScale(parallelScale)
-            else:
-                camera.Dolly(zoomFactor)
-                renderer.ResetCameraClippingRange()
-
-            self._LastX = x
-            self._LastY = y
-
-            self.Render()
-
-
-    def Reset(self):
-        if self._CurrentRenderer:
-            self._CurrentRenderer.ResetCamera()
-
-        self.Render()
-
-
-    def Wireframe(self):
-        actors = self._CurrentRenderer.GetActors()
-        numActors = actors.GetNumberOfItems()
-        actors.InitTraversal()
-        for i in range(0,numActors):
-            actor = actors.GetNextItem()
-            actor.GetProperty().SetRepresentationToWireframe()
-
-        self.Render()
-
-
-    def Surface(self):
-        actors = self._CurrentRenderer.GetActors()
-        numActors = actors.GetNumberOfItems()
-        actors.InitTraversal()
-        for i in range(0,numActors):
-            actor = actors.GetNextItem()
-            actor.GetProperty().SetRepresentationToSurface()
-
-        self.Render()
-
-
-    def PickActor(self,x,y):
-        if self._CurrentRenderer:
-            renderer = self._CurrentRenderer
-            picker = self._Picker
-
-            windowY = self.GetSize().height
-            picker.Pick(x,(windowY - y - 1),0.0,renderer)
-            assembly = picker.GetAssembly()
-
-            if (self._PickedAssembly != None and
-                self._PrePickedProperty != None):
-                self._PickedAssembly.SetProperty(self._PrePickedProperty)
-                # release hold of the property
-                self._PrePickedProperty.UnRegister(self._PrePickedProperty)
-                self._PrePickedProperty = None
-
-            if (assembly != None):
-                self._PickedAssembly = assembly
-                self._PrePickedProperty = self._PickedAssembly.GetProperty()
-                # hold onto the property
-                self._PrePickedProperty.Register(self._PrePickedProperty)
-                self._PickedAssembly.SetProperty(self._PickedProperty)
-
-            self.Render()
-"""