123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- import wx
- from vtk.wx.wxVTKRenderWindowInteractor import wxVTKRenderWindowInteractor
- import vedo
- #####################################################
- # Every wx app needs an app
- app = wx.App(False)
- # create the top-level frame, sizer and wxVTKRWI
- frame = wx.Frame(None, -1, "vedo with wxpython", size=(600,600))
- widget = wxVTKRenderWindowInteractor(frame, -1)
- sizer = wx.BoxSizer(wx.VERTICAL)
- sizer.Add(widget, 1, wx.EXPAND)
- frame.SetSizer(sizer)
- frame.Layout()
- # It would be more correct (API-wise) to call widget.Initialize() and
- # widget.Start() here, but Initialize() calls RenderWindow.Render().
- # That Render() call will get through before we can setup the
- # RenderWindow() to render via the wxWidgets-created context; this
- # causes flashing on some platforms and downright breaks things on
- # other platforms. Instead, we call widget.Enable().
- widget.Enable(1)
- widget.AddObserver("ExitEvent", lambda o,e,f=frame: f.Close())
- ##################################################### vedo example
- def func(evt):
- print("Event dump:\n", evt)
- plt.azimuth(10) # rotate by one degree the camera
- cone = vedo.shapes.Cone(c='green8')
- axes = vedo.Axes(cone, c='white')
- cube = vedo.shapes.Cube()
- # Create 2 subwindows with a cone and a cube
- plt = vedo.Plotter(N=2, bg='blue2', bg2='blue8', wx_widget=widget)
- plt.add_callback("right mouse click", func)
- plt.at(0).add([cone, axes, "right-click anywhere"]).reset_camera()
- plt.at(1).add(cube).reset_camera()
- # plt.show() # vedo.show() is now disabled in wx
- #####################################################
- # Show everything
- frame.Show()
- app.MainLoop()
|