diff --git a/SimDynamics/DynamicsEngine/BulletEngine/BulletEngine.cpp b/SimDynamics/DynamicsEngine/BulletEngine/BulletEngine.cpp index ca7ea1878898a611d009a9c3c51d92bc38cfc104..f29702253db81860266d4d8be805b0aff3298187 100644 --- a/SimDynamics/DynamicsEngine/BulletEngine/BulletEngine.cpp +++ b/SimDynamics/DynamicsEngine/BulletEngine/BulletEngine.cpp @@ -529,24 +529,28 @@ std::vector<DynamicsEngine::DynamicsContactInfo> BulletEngine::getContacts() for (int j=0;j<numContacts;j++) { btManifoldPoint& pt = contactManifold->getContactPoint(j); - if (pt.getDistance()<0.f) - { - DynamicsContactInfo i; - i.objectA = dynObjA; - i.objectB = dynObjB; - const btVector3& ptA = pt.getPositionWorldOnA(); - const btVector3& ptB = pt.getPositionWorldOnB(); - const btVector3& normalOnB = pt.m_normalWorldOnB; - i.posGlobalA = getVecEigen(ptA); - i.posGlobalB = getVecEigen(ptB); - i.normalGlobalB(0) = normalOnB.x(); - i.normalGlobalB(1) = normalOnB.y(); - i.normalGlobalB(2) = normalOnB.z(); - i.combinedFriction = pt.m_combinedFriction; - i.combinedRestitution = pt.m_combinedRestitution; - i.appliedImpulse = pt.m_appliedImpulse; - result.push_back(i); - } + DynamicsContactInfo i; + i.objectA = dynObjA; + i.objectB = dynObjB; + const btVector3& ptA = pt.getPositionWorldOnA(); + const btVector3& ptB = pt.getPositionWorldOnB(); + const btVector3& normalOnB = pt.m_normalWorldOnB; + i.posGlobalA = getVecEigen(ptA); + i.posGlobalB = getVecEigen(ptB); + i.normalGlobalB(0) = normalOnB.x(); + i.normalGlobalB(1) = normalOnB.y(); + i.normalGlobalB(2) = normalOnB.z(); + i.combinedFriction = pt.m_combinedFriction; + i.combinedRestitution = pt.m_combinedRestitution; + i.appliedImpulse = pt.m_appliedImpulse; + i.frictionDir1.x() = pt.m_lateralFrictionDir1.x(); + i.frictionDir1.y() = pt.m_lateralFrictionDir1.y(); + i.frictionDir1.z() = pt.m_lateralFrictionDir1.z(); + i.frictionDir2.x() = pt.m_lateralFrictionDir2.x(); + i.frictionDir2.y() = pt.m_lateralFrictionDir2.y(); + i.frictionDir2.z() = pt.m_lateralFrictionDir2.z(); + i.distance = pt.getDistance(); + result.push_back(i); } } return result; diff --git a/SimDynamics/DynamicsEngine/DynamicsEngine.h b/SimDynamics/DynamicsEngine/DynamicsEngine.h index 35f38de3b8f62891a692a8393401852fc2c27a6a..c3d7717c52cba5f233767437e920c6c15d4fae0d 100644 --- a/SimDynamics/DynamicsEngine/DynamicsEngine.h +++ b/SimDynamics/DynamicsEngine/DynamicsEngine.h @@ -136,6 +136,9 @@ public: Eigen::Vector3f posGlobalA; Eigen::Vector3f posGlobalB; Eigen::Vector3f normalGlobalB; + Eigen::Vector3f frictionDir1; + Eigen::Vector3f frictionDir2; + double distance; double combinedFriction; double combinedRestitution; double appliedImpulse;