def __init__(self,parent,id,x,y,width,height): style = wx.WANTS_CHARS | wx.FULL_REPAINT_ON_RESIZE wx.glcanvas.GLCanvas.__init__(self,parent,id,wx.DefaultPosition,wx.DefaultSize,style) width,height = self.GetClientSize() self.viewer = osgViewer.Viewer() self.viewer.setThreadingModel(osgViewer.Viewer.SingleThreaded) self.viewer.addEventHandler(osgViewer.StatsHandler()) self.viewer.setCameraManipulator(osgGA.TrackballManipulator()) self.graphicswindow = self.viewer.setUpViewerAsEmbeddedInWindow(0,0,width,height) if self.graphicswindow.valid(): self.old_cursor = wx.STANDARD_CURSOR self.Bind(wx.EVT_SIZE, self.OnSize) self.Bind(wx.EVT_PAINT, self.OnPaint) self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) self.Bind(wx.EVT_KEY_UP, self.OnKeyUp) self.Bind(wx.EVT_MOUSE_EVENTS, self.OnMouse)
def initializeGL (self): """initializeGL the context and create the osgViewer, also set manipulator and event handler """ self.gw = self.createContext() self.viewer = self.createViewer() #init the default eventhandler self.viewer.setCameraManipulator(osgGA.TrackballManipulator()) self.viewer.addEventHandler(osgViewer.StatsHandler()) self.viewer.addEventHandler(osgViewer.HelpHandler()) QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout ()"), self.updateGL) self.timer.start(0)
def createViewer(self): """create a osgViewer.Viewer and set the viewport, camera and previously created graphical context """ global viewerFactory viewer = viewerFactory() #init the default eventhandler # self.viewer.setCameraManipulator(osgGA.TrackballManipulator()) viewer.addEventHandler(osgViewer.StatsHandler()) viewer.addEventHandler(osgViewer.HelpHandler()) viewer.getUpdateVisitor().setTraversalMask(UPDATE_MASK) self.resetCamera(viewer) return viewer
def __init__(self, glconfig, viewer=None, window=None): gtk.DrawingArea.__init__(self) # Set OpenGL-capability to the drawing area self.set_gl_capability(glconfig) # Connect the relevant signals. self.connect_after('realize', self._on_realize) self.connect('configure_event', self._on_configure_event) self.connect('expose_event', self._on_expose_event) self.connect("key_press_event", self._on_key_press_event) self.add_events(gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK) self.__motion_events = 0 self.__motion_events |= gtk.gdk.BUTTON_MOTION_MASK self.__motion_events |= gtk.gdk.POINTER_MOTION_MASK self.add_events(self.__motion_events) self.connect('motion_notify_event', self._on_mouse_event) self.connect("button_press_event", self._on_mouse_event) self.connect("button_release_event", self._on_mouse_event) #experimental: Stereo in a window #self.ds = osg.DisplaySettings_instance() #self.ds.setStereo(True) #self.ds.setStereoMode(osg.DisplaySettings.QUAD_BUFFER) if viewer is None: self.viewer = osgViewer.Viewer() else: self.viewer = viewer self.osgwindow = self.viewer.setUpViewerAsEmbeddedInWindow( 0, 0, 200, 200) # one could try using a pythonic alternative: # self.osgwindow = self.setup_osgwindow(0,0,200,200) self.viewer.setCameraManipulator(osgGA.TrackballManipulator()) self.viewer.addEventHandler(osgViewer.StatsHandler()) self.viewer.addEventHandler(osgViewer.HelpHandler()) self.rootnode = osg.MatrixTransformRef(osg.MatrixTransform()) self.viewer.setSceneData(self.rootnode.get()) self._x, self._y = 0, 0
root.addChild(dynamicTransform4.__disown__()) #to prevent direct destruction you can create a variable for the callback #rotcb = RotateCB() #dynamicTransform.setUpdateCallback(rotcb.__disown__()) #or call the disown function: dynamicTransform.setUpdateCallback(RotateCB().__disown__()) #create the viewer, set the scene and run viewer = osgViewer.Viewer() viewer.setThreadingModel(osgViewer.Viewer.SingleThreaded) #set the scene data viewer.setSceneData(root.__disown__()) #add the stats event handler viewer.addEventHandler(osgViewer.StatsHandler()) pickhandler = PickHandler() #pickhandler = osgGA.GUIEventHandler() viewer.addEventHandler(pickhandler.__disown__()) #run the viewer viewer.run() #or call the following functions #viewer.realize() #viewer.setCameraManipulator(osgGA.TrackballManipulator()) #while not viewer.done(): # viewer.frame() #set an empty node for clean-up step viewer.setSceneData(None)
def main(): # use an ArgumentParser object to manage the program arguments. #arguments = osg.ArgumentParser() #construct the viewer. viewer = osgViewer.Viewer() #need to use singlethreaded mode viewer.setThreadingModel(viewer.SingleThreaded) # add the stats viewer.addEventHandler(osgViewer.StatsHandler()) # add the record camera path handler viewer.addEventHandler(osgViewer.RecordCameraPathHandler()) #add the threading handler viewer.addEventHandler(osgViewer.ThreadingHandler()) #if user request help write it out to cout. #if (arguments.read("-h") or arguments.read("--help")): # arguments.getApplicationUsage().write(sys.stdout) # return 1 tex_width = 1024 tex_height = 512 samples = 0 colorSamples = 0 renderImplementation = osg.Camera.FRAME_BUFFER_OBJECT useImage = False useTextureRectangle = False useHDR = False # if not loaded assume no arguments passed in, try use default mode instead. loadedModel = osgDB.readNodeFile("cessna.osg") # create a transform to spin the model. loadedModelTransform = osg.MatrixTransform() loadedModelTransform.addChild(loadedModel) nc = osg.AnimationPathCallback( osg.Vec3d(loadedModelTransform.getBound().center()), osg.Vec3d(0.0, 0.0, 1.0), osg.inDegrees(45.0)) loadedModelTransform.setUpdateCallback(nc) rootNode = osg.Group() rootNode.addChild(createPreRenderSubGraph(loadedModelTransform,\ tex_width,tex_height, \ renderImplementation, \ useImage, useTextureRectangle, \ useHDR, samples, colorSamples)) osgDB.writeNodeFile(rootNode, "test.ive") # add model to the viewer. viewer.setSceneData(rootNode) viewer.run()