[ODE] nearcallback pointer help

Arturo Colorado Garín acolorado at telefonica.net
Sun Nov 5 16:32:50 MST 2006


> Hello,
> I've created a Physics class, here is the .h file.
>
> ----------------------------------------------------------------------------------
>
> Here is my question:
> I want to pass the nearcallback function into the dSpaceCollide();
> However, I can't cast it into a pointer because it's not a static member. 
> If I
> make it a static member it can't access the World and Space variables,
> because they are not static either.

Hi,

You can't, you need to pass a global function to dSpaceCollide(). However 
you can do this if you want to have your callback as a class member:

First, remove the 'data' parameter of your method Physics::nearCallback. 
Then, implement in your .cpp a global function (not a member of your class) 
similar to this:

void CB_nearCallback(void *data, dGeomID geom1, dGeomID geom2)
{
    ASSERT( data != NULL );

    // Let the Physics::nearCallback method do all the work
    data->nearCallback(geom1, geom2);
}

Then, your call to dSpaceCollide should look something like this:

    // Collide geoms
    dSpaceCollide( pPhysicsObject->GetOdeSpace(), pPhysicsObject, 
CB_nearCallback);

This way, when CB_nearCallback is called it will receive the pointer to your 
Physics object (pPhysicsObject), which is then used to call the method 
Physics::nearCallback.

Hope this helps,

--Arturo.



More information about the ODE mailing list