[Opal-commits] opal/src/ODE ODESimulator.cpp,1.89,1.90 ODESimulator.h,1.62,1.63
Status: Inactive
Brought to you by:
tylerstreeter
|
From: tylerstreeter <tyl...@us...> - 2005-03-12 01:21:27
|
Update of /cvsroot/opal/opal/src/ODE In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17179/src/ODE Modified Files: ODESimulator.cpp ODESimulator.h Log Message: added VolumeSensor Index: ODESimulator.h =================================================================== RCS file: /cvsroot/opal/opal/src/ODE/ODESimulator.h,v retrieving revision 1.62 retrieving revision 1.63 diff -C2 -d -r1.62 -r1.63 *** ODESimulator.h 11 Mar 2005 05:31:57 -0000 1.62 --- ODESimulator.h 12 Mar 2005 01:21:15 -0000 1.63 *************** *** 33,36 **** --- 33,37 ---- #include "../Simulator.h" #include "../RaycastSensor.h" + #include "../VolumeSensor.h" #include "ODESolid.h" #include "ODEJoint.h" *************** *** 73,83 **** // No ODE-specific Motor implementations at this time. // SPACES virtual Space* OPAL_CALL createSpace(); - //virtual void OPAL_CALL collide(const Solid* solid, - // std::vector<Solid*>* solids); - virtual void OPAL_CALL setGravity(const Vec3r& gravity); --- 74,85 ---- // No ODE-specific Motor implementations at this time. + // SENSORS + + // No ODE-specific Sensor implementations at this time. + // SPACES virtual Space* OPAL_CALL createSpace(); virtual void OPAL_CALL setGravity(const Vec3r& gravity); *************** *** 94,100 **** virtual dJointGroupID OPAL_CALL internal_getJointGroupID()const; - /// Helper function for volume collision checking. - void OPAL_CALL internal_addCollidedSolid(Solid* solid); - virtual const RaycastResult& OPAL_CALL internal_fireRay( const Rayr& r, real length); --- 96,99 ---- *************** *** 104,107 **** --- 103,112 ---- const Point3r& intersection, const Vec3r& normal, real distance); + /// Helper function for volume collision checking. + virtual void OPAL_CALL internal_addCollidedSolid(Solid* solid); + + virtual const VolumeQueryResult& OPAL_CALL internal_queryVolume( + const Solid* volume); + protected: *************** *** 123,127 **** /// Temporary list of Solids that collided in a volume collision /// check. ! std::vector<Solid*> mCollidedSolids; /// Used for ray casting. --- 128,132 ---- /// Temporary list of Solids that collided in a volume collision /// check. ! VolumeQueryResult mVolumeQueryResult; /// Used for ray casting. Index: ODESimulator.cpp =================================================================== RCS file: /cvsroot/opal/opal/src/ODE/ODESimulator.cpp,v retrieving revision 1.89 retrieving revision 1.90 diff -C2 -d -r1.89 -r1.90 *** ODESimulator.cpp 11 Mar 2005 05:31:57 -0000 1.89 --- ODESimulator.cpp 12 Mar 2005 01:21:08 -0000 1.90 *************** *** 28,32 **** #include "ODESimulator.h" #include "../ShapeData.h" - //#include <ode/config.h> namespace opal --- 28,31 ---- *************** *** 794,798 **** if (solidPtr->internal_getCollisionCount() != mCollisionCount) { ! mCollidedSolids.push_back(solid); solidPtr->internal_setCollisionCount(mCollisionCount); } --- 793,797 ---- if (solidPtr->internal_getCollisionCount() != mCollisionCount) { ! mVolumeQueryResult.internal_addSolid(solid); solidPtr->internal_setCollisionCount(mCollisionCount); } *************** *** 877,906 **** } ! //void ODESimulator::collide(const Solid* solid, std::vector<Solid*>* solids) ! //{ ! // mCollisionCount++; ! // mCollidedSolids.clear(); ! // const std::vector<GeomData*>* geomList = ! // ((ODESolid*)solid)->internal_getGeomDataList(); ! // ! // //check for collisions; this will fill up mCollidedSolids ! // std::vector<GeomData*>::const_iterator iter; ! // for (iter = geomList->begin(); iter != geomList->end(); ++iter) ! // { ! // dSpaceCollide2((*iter)->geomID, (dGeomID)mRootSpaceID, this, ! // &ode_hidden::internal_pickingCollisionCallback); ! // } ! // std::vector<Solid*>::iterator solidIter; ! // for (solidIter = mCollidedSolids.begin(); ! // solidIter != mCollidedSolids.end(); ++solidIter) ! // { ! // //we don't want the volume solid to be added ! // if (*solidIter != solid) ! // { ! // solids->push_back(*solidIter); ! // } ! // } ! //} void ODESimulator::setGravity(const Vec3r& gravity) --- 876,902 ---- } ! const VolumeQueryResult& ODESimulator::internal_queryVolume( ! const Solid* volume) ! { ! mCollisionCount++; ! mVolumeQueryResult.internal_clearSolids(); ! const std::vector<GeomData*>* geomList = ! ((ODESolid*)volume)->internal_getGeomDataList(); ! // Check for collisions with each of the volume Solid's geoms. ! // This will fill up mVolumeQueryResult with those Solids that ! // collide with these geoms. ! std::vector<GeomData*>::const_iterator iter; ! for (iter = geomList->begin(); iter != geomList->end(); ++iter) ! { ! dSpaceCollide2((*iter)->geomID, (dGeomID)mRootSpaceID, this, ! &ode_hidden::internal_volumeCollisionCallback); ! } ! ! // We don't want the volume Solid to be listed in the results. ! mVolumeQueryResult.internal_removeSolid(volume); ! ! return mVolumeQueryResult; ! } void ODESimulator::setGravity(const Vec3r& gravity) |