33 #include "LinearMath/btVector3.h"
73 tgRigidInfo::initRigidBody(world);
90 std::cout <<
"creating rod with tags " << getTags() << std::endl;
102 const double radius = m_config.
radius;
105 new btCylinderShape(btVector3(radius, length / 2.0, radius));
118 const double radius = m_config.
radius;
119 const double density = m_config.
density;
120 const double volume = M_PI * radius * radius * length;
121 return volume * density;
126 const btVector3& destinationPoint)
const
133 const btVector3& destinationPoint,
134 const double rotation)
const
136 if (referencePoint == destinationPoint)
139 std::invalid_argument(
"Destination point is the reference point.");
142 const btVector3 cylinderAxis = (
getTo() -
getFrom()).normalize();
143 const btVector3 cylinderAxis2 = (
getTo() -
getFrom()).normalize();
145 const btVector3 refToDest =
146 (referencePoint - destinationPoint).normalize();
149 btVector3 rotationAxis = cylinderAxis.cross(refToDest);
152 if (rotationAxis.length() == 0.0)
154 btScalar a = cylinderAxis[0];
155 btScalar b = cylinderAxis[1];
156 btScalar c = cylinderAxis[2];
158 rotationAxis = btVector3(b - c, -a, a).normalize();
161 const btVector3 directional =
162 cylinderAxis.rotate(rotationAxis, -M_PI / 2.0).normalize();
170 const btVector3 surfaceVector = directional.rotate(cylinderAxis2, rotation).normalize()
175 return referencePoint + surfaceVector;
180 std::set<tgRigidInfo*> leaves;
191 std::set<btVector3> intersection;
193 std::set_intersection(s1.begin(), s1.end(),
194 s2.begin(), s2.end(),
195 intersection.begin());
196 return intersection.empty();
198 std::set<btVector3>::const_iterator ii;
199 std::set<btVector3>::const_iterator ij;
200 for (ii = s1.begin(); ii != s1.end(); ++ii) {
201 for (ij = s2.begin(); ij != s2.end(); ++ij) {
211 std::set<btVector3> contained;
213 contained.insert(
getTo());
const btVector3 & getFrom() const
virtual void initRigidBody(tgWorld &world)
const double rollFriction
Definition of class tgRodInfo.
tgRodInfo(const tgRod::Config &config)
virtual btCollisionShape * getCollisionShape(tgWorld &world) const
btRigidBody * m_rigidBody
Contains the definition of class tgWorldBulletPhysicsImpl.
virtual std::set< tgRigidInfo * > getLeafRigids()
tgRigidInfo * createRigidInfo(const tgPair &pair)
virtual std::set< btVector3 > getContainedNodes() const
virtual btRigidBody * getRigidBody()
virtual bool sharesNodesWith(const tgRigidInfo &other) const
virtual btVector3 getConnectionPoint(const btVector3 &referencePoint, const btVector3 &destinationPoint) const
tgWorldImpl & implementation() const
const btVector3 & getTo() const
void addCollisionShape(btCollisionShape *pShape)
virtual std::set< btVector3 > getContainedNodes() const =0
virtual double getMass() const
btCollisionShape * m_collisionShape