⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wxvtkrenderwindow.py

📁 a very goog book
💻 PY
📖 第 1 页 / 共 2 页
字号:
            if event.ControlDown():                self._Mode = "Zoom"            elif event.ShiftDown():                self._Mode = "Pan"            else:                self._Mode = "Rotate"    def OnRightDown(self,event):        if not self._Mode:            self._Mode = "Zoom"    def OnMiddleDown(self,event):        if not self._Mode:            self._Mode = "Pan"    def _OnButtonUp(self,event):        # helper function for releasing mouse capture        self._RenderWindow.SetDesiredUpdateRate(self._StillUpdateRate)        if event.RightUp():            button = "Right"        elif event.LeftUp():            button = "Left"        elif event.MiddleUp():            button = "Middle"        else:            button = None        # if the ActiveButton is realeased, then release mouse capture        if self._ActiveButton and button == self._ActiveButton:            if WX_USE_X_CAPTURE:                self.ReleaseMouse()            self._ActiveButton = None        self.OnButtonUp(event)    def OnButtonUp(self,event):        if event.LeftUp():            self.OnLeftUp(event)        elif event.RightUp():            self.OnRightUp(event)        elif event.MiddleUp():            self.OnMiddleUp(event)        # if not interacting, then do nothing more        if self._Mode:            if self._CurrentRenderer:                self.Render()        self._Mode = None    def OnLeftUp(self,event):        pass    def OnRightUp(self,event):        pass    def OnMiddleUp(self,event):        pass    def OnMotion(self,event):        if self._Mode == "Pan":            self.Pan(event)        elif self._Mode == "Rotate":            self.Rotate(event)        elif self._Mode == "Zoom":            self.Zoom(event)    def OnChar(self,event):        pass    def OnKeyDown(self,event):        if event.GetKeyCode() == ord('r'):            self.Reset(event)        if event.GetKeyCode() == ord('w'):            self.Wireframe()        if event.GetKeyCode() == ord('s'):            self.Surface()        if event.GetKeyCode() == ord('p'):            self.PickActor(event)        if event.GetKeyCode() < 256:            self.OnChar(event)    def OnKeyUp(self,event):        pass    def GetZoomFactor(self):        return self._CurrentZoom    def GetRenderWindow(self):        return self._RenderWindow    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())        if self.__handle and self.__handle == self.GetHandle():            self._RenderWindow.Render()                    elif self.GetHandle():            # this means the user has reparented us            # let's adapt to the new situation by doing the WindowRemap dance            self._RenderWindow.SetNextWindowInfo(str(self.GetHandle()))            self._RenderWindow.WindowRemap()            # store the new situation            self.__handle = self.GetHandle()            self._RenderWindow.Render()    def UpdateRenderer(self,event):        """        UpdateRenderer will identify the renderer under the mouse and set        up _CurrentRenderer, _CurrentCamera, and _CurrentLight.        """        x = event.GetX()        y = event.GetY()        windowX, windowY = self._RenderWindow.GetSize()        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 Rotate(self,event):        if self._CurrentRenderer:            x = event.GetX()            y = event.GetY()                        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 Pan(self,event):        if self._CurrentRenderer:            x = event.GetX()            y = event.GetY()                        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+self._LastX,                                         fy+y-self._LastY,                                         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+self._LastX,                                         fy+y-self._LastY,                                         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 - self._LastX)                aPoint1 = self._ViewportCenterY - (y - self._LastY)                                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._LastX = x            self._LastY = y            self.Render()    def Zoom(self,event):        if self._CurrentRenderer:            x = event.GetX()            y = event.GetY()            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,event=None):        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,event):        if self._CurrentRenderer:            x = event.GetX()            y = event.GetY()            renderer = self._CurrentRenderer            picker = self._Picker                        windowX, windowY = self._RenderWindow.GetSize()            picker.Pick(x,(windowY - y - 1),0.0,renderer)            actor = picker.GetActor()            if (self._PickedActor != None and                self._PrePickedProperty != None):                self._PickedActor.SetProperty(self._PrePickedProperty)                # release hold of the property                self._PrePickedProperty.UnRegister(self._PrePickedProperty)                self._PrePickedProperty = None            if (actor != None):                self._PickedActor = actor                self._PrePickedProperty = self._PickedActor.GetProperty()                # hold onto the property                self._PrePickedProperty.Register(self._PrePickedProperty)                self._PickedActor.SetProperty(self._PickedProperty)            self.Render()#----------------------------------------------------------------------------  def wxVTKRenderWindowConeExample():    """Like it says, just a simple example    """    # every wx app needs an app    app = wxPySimpleApp()    # create the widget    frame = wxFrame(None, -1, "wxRenderWindow", size=wxSize(400,400))    widget = wxVTKRenderWindow(frame, -1)    ren = vtkRenderer()    widget.GetRenderWindow().AddRenderer(ren)    cone = vtkConeSource()    cone.SetResolution(8)        coneMapper = vtkPolyDataMapper()    coneMapper.SetInput(cone.GetOutput())        coneActor = vtkActor()    coneActor.SetMapper(coneMapper)    ren.AddActor(coneActor)    # show the window        frame.Show(1)    app.MainLoop()if __name__ == "__main__":    from vtkpython import *    wxVTKRenderWindowConeExample()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -