35 #include "LinearMath/btVector3.h"
36 #include "BulletDynamics/Dynamics/btRigidBody.h"
44 if(tagSearch.
matches(pair.getTags())) {
45 connectorInfo = createConnectorInfo(pair);
50 std::vector<tgConnectorInfo*> tgConnectorInfo::createConnectorInfos(
const tgPairs& pairs,
const tgTagSearch& tagSearch)
52 std::vector<tgConnectorInfo*> result;
53 for(
int i = 0; i < pairs.size(); i++) {
62 void tgConnectorInfo::chooseRigids(std::set<tgRigidInfo*> rigids)
67 if(getFromRigidInfo() == 0) {
68 tgRigidInfo* fromRigidInfo = chooseRigid(rigids, getFrom());
70 setFromRigidInfo(fromRigidInfo);
74 if(getToRigidInfo() == 0) {
75 tgRigidInfo* toRigidInfo = chooseRigid(rigids, getTo());
77 setToRigidInfo(toRigidInfo);
82 tgRigidInfo* tgConnectorInfo::chooseRigid(std::set<tgRigidInfo*> rigids,
const btVector3& v) {
84 std::set<tgRigidInfo*> candidateRigids = findRigidsContaining(rigids, v);
87 if (candidateRigids.size() == 1) {
89 chosenRigid = *(candidateRigids.begin());
92 chosenRigid = findClosestCenterOfMass(candidateRigids, v);
98 btRigidBody* tgConnectorInfo::getToRigidBody() {
103 btRigidBody* tgConnectorInfo::getFromRigidBody() {
112 tgRigidInfo* tgConnectorInfo::findClosestCenterOfMass(std::set<tgRigidInfo*> rigids,
const btVector3& v) {
113 if (rigids.size() == 0) {
116 std::set<tgRigidInfo*>::iterator it;
120 for(; it != rigids.end(); ++it) {
130 std::set<tgRigidInfo*> tgConnectorInfo::findRigidsContaining(std::set<tgRigidInfo*> rigids,
const btVector3& toFind) {
131 std::set<tgRigidInfo*> found;
132 std::set<tgRigidInfo*>::iterator it;
133 for(it=rigids.begin(); it != rigids.end(); ++it) {
134 if ((*it)->containsNode(toFind)) {
142 bool tgConnectorInfo::rigidFoundIn(std::set<tgRigidInfo*> rigids,
tgRigidInfo* rigid) {
144 std::set<tgRigidInfo*>::iterator it;
145 for(it = rigids.begin(); it != rigids.end(); ++it) {
Contains the definition of class tgTagSearch.
Definition of abstract class tgRigidInfo.
virtual tgRigidInfo * getRigidInfoGroup()
Definition of class tgPair.
Definition of class tgPairs.
Definition of class tgConnectorInfo.
virtual btRigidBody * getRigidBody()
const bool matches(const tgTags &tags) const
virtual btVector3 getCenterOfMass() const =0