I've the beginnings of a simple light-fixture modeling component in
wxPython and I am trying to use osgswig (2.2.0.1 version) as a base.
I've started out by copying the file loading example which uses
osgUtil.SceneView(). The code successfully loads the geometry of a
lighting fixture (considering that this is done with readNodeFile
that's not terribly surprising). Unfortunately, thereafter I can't
maneuver the view with the mouse. Sometimes, I can't even find the
fixture model. I suspect I'm doing something dumb. My code--almost
the sample code--is attached--any ideas? (Getting a newer version of
osgswig would be nice, but as I've written here, I've run into build
problems, and I would rather not spend the time chasing them down.)
Randolph
#!/usr/bin/env python
# import wxWidgets stuff
import wx
import wx.glcanvas
# import OpenSceneGraph wrapper
import osg
import osgUtil
import osgDB
class OSGLumView(wx.glcanvas.GLCanvas):
def __init__(self,parent,id):
wx.glcanvas.GLCanvas.__init__(self,parent,id)
sv = self.sceneview = osgUtil.SceneView()
self.rootnode = osg.MatrixTransformRef(osg.MatrixTransform())
sv.setSceneData(self.rootnode.get())
x,y = self.GetClientSize()
self.oldX = 0
self.oldY = 0
sv.setDefaults()
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_ENTER_WINDOW, self.OnEnterWindow)
self.Bind(wx.EVT_MOUSE_EVENTS, self.OnMouse)
sv.init()
def AddGeom(self, geom):
print "AddGeom"
self.rootnode.addChild(geom)
# self.Refresh(False)
def OnMouse(self, evt):
if ((evt.Dragging() == True) and (evt.LeftIsDown() == True)):
x = evt.GetX() - self.oldY
y = evt.GetY() - self.oldY
self.sceneview.setViewMatrixAsLookAt(
osg.Vec3f(0,y,x), osg.Vec3f(0,0,0), osg.Vec3f(0,1,0))
# self.Refresh(False)
self.oldX = evt.GetX()
self.oldY = evt.GetY()
if ((evt.Dragging() == True) and (evt.RightIsDown() == True)) :
m = self.rootnode.getMatrix()
x,y = self.GetClientSize()
rot = osg.Matrixd()
rot.makeRotate(self.oldX - evt.GetX(), osg.Vec3f(1,0,0))
m.postMult(rot)
# self.Refresh(False)
self.oldX = evt.GetX()
self.oldY = evt.GetY()
def Clear(self):
self.rootnode.removeChild(0,self.rootnode.getNumChildren())
# self.Refresh(False)
def OnEnterWindow(self, evt):
self.SetFocus()
def OnEraseBackground(self, evt):
pass
def OnSize(self, evt):
x,y = self.GetClientSize()
self.SetCurrent()
self.sceneview.setViewport(0,0,x,y)
evt.Skip()
def OnPaint(self, evt):
if (0 == self.GetContext()) :
return
dc = wx.PaintDC(self)
self.SetCurrent()
self.sceneview.update()
self.sceneview.cull()
self.sceneview.draw()
self.SwapBuffers()
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org