mouseRay =
self.ogreRoot.sceneEntities.Camera.getCameraToViewportRay( self.mouseX,
self.mouseY )
raySceneQuery = self.ogreRoot.sceneManager.createRayQuery(ogre.Ray())
raySceneQuery.setRay(mouseRay)
raySceneQuery.setSortByDistance(True)
result = raySceneQuery.execute()
I've this error:
result = raySceneQuery.execute()
Boost.Python.ArgumentError: Python argument types in
DefaultRaySceneQuery.execute(DefaultRaySceneQuery)
did not match C++ signature:
execute(struct DefaultRaySceneQuery_wrapper {lvalue}, class
Ogre::RaySceneQueryListener * listener)
execute(class Ogre::DefaultRaySceneQuery {lvalue}, class
Ogre::RaySceneQueryListener * listener)
I've seen the api but I don't understand where is the problem.
I use python 2.4.3.
Any advice?
thankyou very much
w
Whenever I try:
mVolQuery =
mSceneMgr.createPlaneBoundedVolumeQuery(PlaneBoundedVolumeList())
mVolQuery.execute()
Error
=====
Boost.Python.ArgumentError: Python argument types in
PlaneBoundedVolumeListSceneQuery.execute(PlaneBoundedVolumeListSceneQuery)
did not match C++ signature:
execute(PlaneBoundedVolumeListSceneQuery_wrapper {lvalue},
Ogre::SceneQueryListener*)
execute(Ogre::PlaneBoundedVolumeListSceneQuery {lvalue},
Ogre::SceneQueryListener* listener)
Pretty much the same happens for other SceneQueries (except
raySceneQuery), basically forcing me to subclass SceneQueryListener
and mVolQuery.execute(MyListener).
Is this a known issue or more likely some code error that should I
debug further.
According to the ogre reference http://www.ogre3d.org/docs/api/html/classOgre_1_1RaySceneQuery.html,
there are two versions of the execute() method:
virtual RaySceneQueryResult & execute (void)
Executes the query, returning the results back in one list.
virtual void execute (RaySceneQueryListener *listener)=0
Executes the query and returns each match through a listener
interface.
Apparently, only one works in python-ogre, if you don't import
SampleFramework. So basically you need to use something like this:
class MyRaySceneQueryListener ( ogre.RaySceneQueryListener ):
def __init__( self ):
super ( MyRaySceneQueryListener, self ).__init__()
def getCoords( self, ms ):
pos_w = float( ms.X.abs ) / app.window.Width
pos_h = float( ms.Y.abs ) / app.window.Height
self.mouseRay = app.camera.getCameraToViewportRay ( pos_w,
pos_h )
self.raySceneQuery = app.sceneManager.createRayQuery
( ogre.Ray() )
self.raySceneQuery.setRay ( self.mouseRay )
self.raySceneQuery.setSortByDistance ( True )
self.raySceneQuery.execute ( self )
def queryResult ( self, entity, distance ):
print entity.getName(), self.mouseRay.getPoint ( distance )
...and then call getCoords from an instance of the class.
:)
On Oct 20, 12:18 pm, "Andy Miller" <nzmill...@gmail.com> wrote:
> I will have to take a look -- it's not something I'm specifically aware of..
>
> Andy
>