4 #include "../BulletFileLoader/btBulletFile.h" 79 for (
int m = 0; m < manifoldArray.
size(); m++)
84 int matchingManifoldIndex = -1;
85 for (
int q = 0; q < numContactManifolds; q++)
89 matchingManifoldIndex = q;
92 if (matchingManifoldIndex >= 0)
94 existingManifold->
deSerialize(contactManifolds[matchingManifoldIndex]);
102 manifoldArray.
clear();
112 bool isFixedBase = mbd->m_baseMass == 0;
113 bool canSleep =
false;
118 baseWorldPos.
deSerialize(mbd->m_baseWorldPosition);
121 baseWorldRot.
deSerialize(mbd->m_baseWorldOrientation);
126 baseAngVel.
deSerialize(mbd->m_baseAngularVelocity);
130 for (
int i = 0; i < mbd->m_numLinks; i++)
138 switch (mbd->m_links[i].m_jointType)
180 bool isFixedBase = mbd->m_baseMass == 0;
181 bool canSleep =
false;
188 baseWorldPos.
deSerialize(mbd->m_baseWorldPosition);
191 baseWorldOrn.
deSerialize(mbd->m_baseWorldOrientation);
196 for (
int i = 0; i < mbd->m_numLinks; i++)
199 localInertiaDiagonal.
deSerialize(mbd->m_links[i].m_linkInertia);
201 parentRotToThis.
deSerialize(mbd->m_links[i].m_zeroRotParentToThis);
203 parentComToThisPivotOffset.
deSerialize(mbd->m_links[i].m_parentComToThisPivotOffset);
205 thisPivotToThisComOffset.
deSerialize(mbd->m_links[i].m_thisPivotToThisComOffset);
207 switch (mbd->m_links[i].m_jointType)
213 mb->
setupFixed(i, mbd->m_links[i].m_linkMass, localInertiaDiagonal, mbd->m_links[i].m_parentIndex,
214 parentRotToThis, parentComToThisPivotOffset, thisPivotToThisComOffset);
222 jointAxis.
deSerialize(mbd->m_links[i].m_jointAxisBottom[0]);
223 bool disableParentCollision =
true;
224 mb->
setupPrismatic(i, mbd->m_links[i].m_linkMass, localInertiaDiagonal, mbd->m_links[i].m_parentIndex,
225 parentRotToThis, jointAxis, parentComToThisPivotOffset, thisPivotToThisComOffset, disableParentCollision);
233 jointAxis.
deSerialize(mbd->m_links[i].m_jointAxisTop[0]);
234 bool disableParentCollision =
true;
235 mb->
setupRevolute(i, mbd->m_links[i].m_linkMass, localInertiaDiagonal, mbd->m_links[i].m_parentIndex,
236 parentRotToThis, jointAxis, parentComToThisPivotOffset, thisPivotToThisComOffset, disableParentCollision);
244 bool disableParentCollision =
true;
245 mb->
setupSpherical(i, mbd->m_links[i].m_linkMass, localInertiaDiagonal, mbd->m_links[i].m_parentIndex,
246 parentRotToThis, parentComToThisPivotOffset, thisPivotToThisComOffset, disableParentCollision);
406 for (
int i = 0; i < bulletFile2->m_multiBodies.size(); i++)
436 for (
int i = 0; i < bulletFile2->m_multiBodyLinkColliders.size(); i++)
449 if (shapePtr && *shapePtr)
474 int mbLinkIndex = mblcd->
m_link;
476 bool isDynamic = (mbLinkIndex < 0 && multiBody->
hasFixedBase()) ?
false :
true;
481 int colGroup = 0, colMask = 0;
483 if (collisionFlags & URDF_HAS_COLLISION_GROUP)
485 collisionFilterGroup = colGroup;
487 if (collisionFlags & URDF_HAS_COLLISION_MASK)
489 collisionFilterMask = colMask;
498 printf(
"error: no shape found\n");
503 world1->addCollisionObject(col, collisionFilterGroup, collisionFilterMask);
static const btRigidBody * upcast(const btCollisionObject *colObj)
to keep collision detection and dynamics separate we don't store a rigidbody pointer but a rigidbody ...
void deSerialize(const struct btQuaternionFloatData &dataIn)
btPersistentManifold is a contact point cache, it stays persistent as long as objects are overlapping...
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
void setupRevolute(int linkIndex, btScalar mass, const btVector3 &inertia, int parentIndex, const btQuaternion &rotParentToThis, const btVector3 &jointAxis, const btVector3 &parentComToThisPivotOffset, const btVector3 &thisPivotToThisComOffset, bool disableParentCollision=false)
btAlignedObjectArray< bStructHandle * > m_contactManifolds
const btMultibodyLink & getLink(int index) const
void setupFixed(int linkIndex, btScalar mass, const btVector3 &inertia, int parent, const btQuaternion &rotParentToThis, const btVector3 &parentComToThisPivotOffset, const btVector3 &thisPivotToThisComOffset, bool deprecatedDisableParentCollision=true)
void deSerializeDouble(const struct btVector3DoubleData &dataIn)
const btVector3 getBaseVel() const
btCollisionObjectDoubleData * m_body1
virtual void updateAabbs()
static btCollisionObjectDoubleData * getBody1FromContactManifold(btPersistentManifoldDoubleData *manifold)
virtual void dispatchAllCollisionPairs(btOverlappingPairCache *pairCache, const btDispatcherInfo &dispatchInfo, btDispatcher *dispatcher)=0
btCollisionObjectFloatData * m_body1
class btMultiBodyLinkCollider * m_collider
btTransform getBaseWorldTransform() const
virtual void addMultiBody(btMultiBody *body, int group=btBroadphaseProxy::DefaultFilter, int mask=btBroadphaseProxy::AllFilter)
btCollisionObjectDoubleData m_colObjData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
void setupSpherical(int linkIndex, btScalar mass, const btVector3 &inertia, int parent, const btQuaternion &rotParentToThis, const btVector3 &parentComToThisPivotOffset, const btVector3 &thisPivotToThisComOffset, bool disableParentCollision=false)
The btCollisionShape class provides an interface for collision shapes that can be shared among btColl...
btCollisionObjectArray & getCollisionObjectArray()
int getNumCollisionObjects() const
void setBaseCollider(btMultiBodyLinkCollider *collider)
btSpatialMotionVector m_absFrameLocVelocity
const btCollisionObject * getBody0() const
btVector3DoubleData m_linearVelocity
struct btMultiBodyWorldImporterInternalData * m_data
void setJointPosMultiDof(int i, btScalar *q)
void updateCollisionObjectWorldTransforms(btAlignedObjectArray< btQuaternion > &scratch_q, btAlignedObjectArray< btVector3 > &scratch_m)
void setWorldToBaseRot(const btQuaternion &rot)
virtual void computeOverlappingPairs()
the computeOverlappingPairs is usually already called by performDiscreteCollisionDetection (or stepSi...
virtual ~btMultiBodyWorldImporter()
void setRestitution(btScalar rest)
virtual void deleteAllData()
delete all memory collision shapes, rigid bodies, constraints etc.
void setBaseVel(const btVector3 &vel)
void clear()
clear the array, deallocated memory. Generally it is better to use array.resize(0), to reduce performance overhead of run-time memory (de)allocations.
The btOverlappingPairCache provides an interface for overlapping pair management (add, remove, storage), used by the btBroadphaseInterface broadphases.
virtual void setCollisionShape(btCollisionShape *collisionShape)
virtual btOverlappingPairCache * getOverlappingPairCache()=0
void forwardKinematics(btAlignedObjectArray< btQuaternion > &scratch_q, btAlignedObjectArray< btVector3 > &scratch_m)
void setNumContacts(int cachedPoints)
the setNumContacts API is usually not used, except when you gather/fill all contacts manually ...
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
void setupPrismatic(int i, btScalar mass, const btVector3 &inertia, int parent, const btQuaternion &rotParentToThis, const btVector3 &jointAxis, const btVector3 &parentComToThisPivotOffset, const btVector3 &thisPivotToThisComOffset, bool disableParentCollision)
void setHasSelfCollision(bool hasSelfCollision)
int size() const
return the number of elements in the array
btBroadphaseProxy * getBroadphaseHandle()
void syncMultiBody(T *mbd, btMultiBody *mb, btMultiBodyWorldImporterInternalData *m_data, btAlignedObjectArray< btQuaternion > &scratchQ, btAlignedObjectArray< btVector3 > &scratchM)
void setFriction(btScalar frict)
virtual btBroadphasePairArray & getOverlappingPairArray()=0
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
void setBaseOmega(const btVector3 &omega)
btHashMap< btHashPtr, btCollisionShape * > m_shapeMap
bool hasFixedBase() const
virtual void deleteAllData()
delete all memory collision shapes, rigid bodies, constraints etc.
btMultiBodyDynamicsWorld * m_mbDynamicsWorld
btMultiBody * getMultiBody(int mbIndex)
void deSerialize(const struct btVector3DoubleData &dataIn)
void insert(const Key &key, const Value &value)
void setLinearVelocity(const btVector3 &lin_vel)
btQuaternion inverse() const
Return the inverse of this quaternion.
The btRigidBody is the main class for rigid body objects.
void setJointVel(int i, btScalar qdot)
void setJointPos(int i, btScalar q)
void syncContactManifolds(T **contactManifolds, int numContactManifolds, btMultiBodyWorldImporterInternalData *m_data)
btCollisionObjectDoubleData * m_body0
void setWorldTransform(const btTransform &worldTrans)
btDispatcher * getDispatcher()
virtual int getNumOverlappingPairs() const =0
btCollisionAlgorithm * m_algorithm
btVector3 can be used to represent 3D points and vectors.
const Value * find(const Key &key) const
btVector3DoubleData m_angularVelocity
virtual void getAllContactManifolds(btManifoldArray &manifoldArray)=0
const Value * getAtIndex(int index) const
btHashMap< btHashPtr, btMultiBody * > m_mbMap
btMultiBodyWorldImporter(class btMultiBodyDynamicsWorld *world)
virtual int getNumManifolds() const =0
The btBulletWorldImporter is a starting point to import .bullet files.
const btBroadphaseInterface * getBroadphase() const
virtual bool convertAllObjects(bParse::btBulletFile *bulletFile2)
virtual bool convertAllObjects(bParse::btBulletFile *file)
btSpatialMotionVector m_absFrameTotVelocity
btCollisionObjectDoubleData m_collisionObjectData
btDispatcherInfo & getDispatchInfo()
btVector3 getBaseOmega() const
btTransformDoubleData m_worldTransform
btAlignedObjectArray< bStructHandle * > m_multiBodies
void setAngularVelocity(const btVector3 &ang_vel)
static btCollisionObjectDoubleData * getBody0FromContactManifold(btPersistentManifoldDoubleData *manifold)
btTransform m_cachedWorldTransform
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
void setJointVelMultiDof(int i, btScalar *qdot)
void * findLibPointer(void *ptr)
The btQuaternion implements quaternion to perform linear algebra rotations in combination with btMatr...
void deSerialize(const struct btPersistentManifoldDoubleData *manifoldDataPtr)
btCollisionObjectFloatData * m_body0
The btDispatcher interface class can be used in combination with broadphase to dispatch calculations ...
void setBasePos(const btVector3 &pos)
btAlignedObjectArray< bStructHandle * > m_rigidBodies
virtual int getNumMultibodies() const
btMultiBodyDoubleData * m_multiBody
const btCollisionObject * getBody1() const
virtual void addCollisionObject(btCollisionObject *collisionObject, int collisionFilterGroup=btBroadphaseProxy::StaticFilter, int collisionFilterMask=btBroadphaseProxy::AllFilter^btBroadphaseProxy::StaticFilter)
The btMultiBodyDynamicsWorld adds Featherstone multi body dynamics to Bullet This implementation is s...
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
void convertMultiBody(T *mbd, btMultiBodyWorldImporterInternalData *m_data)
The btBroadphasePair class contains a pair of aabb-overlapping objects.