Update of /cvsroot/opal/opal/src/ODE
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13316/src/ODE
Modified Files:
ODESolid.cpp ODESolid.h
Log Message:
Fixed ODESolid::setStatic(). It did not put geoms back into parent space it
was given originally.
Index: ODESolid.h
===================================================================
RCS file: /cvsroot/opal/opal/src/ODE/ODESolid.h,v
retrieving revision 1.71
retrieving revision 1.72
diff -C2 -d -r1.71 -r1.72
*** ODESolid.h 21 Jul 2005 15:59:01 -0000 1.71
--- ODESolid.h 6 Nov 2005 03:20:01 -0000 1.72
***************
*** 157,160 ****
--- 157,163 ----
void destroyGeoms();
+ /// move to geometry to current space
+ void moveToSpace();
+
virtual void applyForce(const Force& f);
Index: ODESolid.cpp
===================================================================
RCS file: /cvsroot/opal/opal/src/ODE/ODESolid.cpp,v
retrieving revision 1.90
retrieving revision 1.91
diff -C2 -d -r1.90 -r1.91
*** ODESolid.cpp 21 Jul 2005 15:59:01 -0000 1.90
--- ODESolid.cpp 6 Nov 2005 03:20:01 -0000 1.91
***************
*** 237,262 ****
mSpaceID = ((ODESpace*)newSpace)->internal_getSpaceID();
! // remove all current shapes from their spaces and add them to the
! // new one
! std::vector<GeomData*>::iterator iter;
! for (iter = mGeomDataList.begin(); iter != mGeomDataList.end();
! ++iter)
! {
! if (0 != (*iter)->transformID)
! {
! // This geom uses a transform, so apply the new space only
! // to the transform geom.
! dSpaceRemove((*iter)->spaceID, (*iter)->transformID);
! dSpaceAdd(mSpaceID, (*iter)->transformID);
! }
! else
! {
! // Normal geom with no transform.
! dSpaceRemove((*iter)->spaceID, (*iter)->geomID);
! dSpaceAdd(mSpaceID, (*iter)->geomID);
! }
!
! (*iter)->spaceID = mSpaceID;
! }
}
--- 237,241 ----
mSpaceID = ((ODESpace*)newSpace)->internal_getSpaceID();
! moveToSpace();
}
***************
*** 368,371 ****
--- 347,352 ----
}
}
+
+ moveToSpace();
}
else
***************
*** 383,386 ****
--- 364,369 ----
// destroy the body
dBodyDestroy(mBodyID);
+
+ moveToSpace();
}
else
***************
*** 391,394 ****
--- 374,403 ----
}
+ void ODESolid::moveToSpace()
+ {
+ // remove all current shapes from their spaces and add them to the
+ // new one
+ std::vector<GeomData*>::iterator iter;
+ for (iter = mGeomDataList.begin(); iter != mGeomDataList.end();
+ ++iter)
+ {
+ if (0 != (*iter)->transformID)
+ {
+ // This geom uses a transform, so apply the new space only
+ // to the transform geom.
+ dSpaceRemove((*iter)->spaceID, (*iter)->transformID);
+ dSpaceAdd(mSpaceID, (*iter)->transformID);
+ }
+ else
+ {
+ // Normal geom with no transform.
+ dSpaceRemove((*iter)->spaceID, (*iter)->geomID);
+ dSpaceAdd(mSpaceID, (*iter)->geomID);
+ }
+
+ (*iter)->spaceID = mSpaceID;
+ }
+ }
+
void ODESolid::setSleeping(bool sleeping)
{
|