NTRT Simulator
 All Classes Files Functions Variables Typedefs Friends Pages
tgRigidInfo.h
Go to the documentation of this file.
1 /*
2  * Copyright © 2012, United States Government, as represented by the
3  * Administrator of the National Aeronautics and Space Administration.
4  * All rights reserved.
5  *
6  * The NASA Tensegrity Robotics Toolkit (NTRT) v1 platform is licensed
7  * under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * http://www.apache.org/licenses/LICENSE-2.0.
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
15  * either express or implied. See the License for the specific language
16  * governing permissions and limitations under the License.
17 */
18 
19 #ifndef TG_RIGID_INFO_H
20 #define TG_RIGID_INFO_H
21 
29 // The Bullet Physics library
30 #include "btBulletDynamicsCommon.h"
31 #include "BulletSoftBody/btSoftRigidDynamicsWorld.h"
32 // The C++ Standard Library
33 #include <set>
34 // This library
35 
36 // @todo: move these includes to tgRigidInfo.cpp
37 #include "core/tgTaggable.h"
38 #include "core/tgBulletUtil.h"
39 #include "core/tgWorld.h"
40 #include "core/tgModel.h"
41 
42 // Forward references
44 class tgTaggable;
45 class tgNode;
46 class tgNodes;
47 class tgPair;
48 class tgPairs;
49 class tgTagSearch;
50 
51 #include "tgUtil.h" // Testing/debugging only
52 
75 class tgRigidInfo : public tgTaggable {
76 public:
77 
78  tgRigidInfo() :
79  m_collisionShape(NULL),
80  m_rigidInfoGroup(NULL),
81  m_rigidBody(NULL),
82  tgTaggable()
83  {}
84 
85  tgRigidInfo(tgTags tags) :
86  m_collisionShape(NULL),
87  m_rigidInfoGroup(NULL),
88  m_rigidBody(NULL),
89  tgTaggable(tags)
90  {}
91 
92  tgRigidInfo(const std::string& space_separated_tags) :
93  m_collisionShape(NULL),
94  m_rigidInfoGroup(NULL),
95  m_rigidBody(NULL),
96  tgTaggable(space_separated_tags)
97  {}
98 
100  virtual ~tgRigidInfo()
101  {
102  }
103 
104  // To be overridden by subclasses
105  virtual tgRigidInfo* createRigidInfo(const tgNode& node)
106  {
107  return 0;
108  }
109 
110  virtual tgRigidInfo* createRigidInfo(const tgPair& pair)
111  {
112  return 0;
113  }
114 
115  virtual tgRigidInfo* createRigidInfo(const tgNode& node, const tgTagSearch& tagSearch);
116 
117  virtual tgRigidInfo* createRigidInfo(const tgPair& pair, const tgTagSearch& tagSearch);
118 
119  virtual std::vector<tgRigidInfo*> createRigidInfos(const tgNodes& nodes, const tgTagSearch& tagSearch);
120 
121  virtual std::vector<tgRigidInfo*> createRigidInfos(const tgPairs& pairs, const tgTagSearch& tagSearch);
122 
123 
124  // @todo: move this to .cpp file
125  virtual void initRigidBody(tgWorld& world);
126 
127  virtual tgModel* createModel(tgWorld& world) = 0;
128 
133  virtual btCollisionShape* getCollisionShape(tgWorld& world) const = 0;
134 
139  void setCollisionShape(btCollisionShape* p_btCollisionShape)
140  {
142  m_collisionShape = p_btCollisionShape;
143  }
144 
152  {
153  return m_rigidInfoGroup;
154  }
155 
156  virtual const tgRigidInfo* getRigidInfoGroup() const
157  {
158  return m_rigidInfoGroup;
159  }
160 
165  virtual void setRigidInfoGroup(tgRigidInfo* rigidInfoGroup)
166  {
167  m_rigidInfoGroup = rigidInfoGroup;
168  }
169 
174  virtual btRigidBody* getRigidBody()
175  {
176  return m_rigidBody;
177  }
178 
183  virtual const btRigidBody* getRigidBody() const {
184  return m_rigidBody;
185  }
186 
191  virtual void setRigidBody(btRigidBody* rigidBody)
192  {
194  m_rigidBody = rigidBody;
195  }
196 
201  virtual btTransform getTransform() const = 0;
202 
207  virtual double getMass() const = 0;
208 
213  virtual btVector3 getCenterOfMass() const = 0;
214 
234  virtual btVector3
235  getConnectionPoint(const btVector3& referencePoint,
236  const btVector3& destinationPoint) const = 0;
237 
242  virtual btVector3
243  getConnectionPoint(const btVector3& referencePoint,
244  const btVector3& destinationPoint,
245  const double rotation) const
246  {
247  return getConnectionPoint(referencePoint, destinationPoint);
248  }
249 
256  bool isCompound() const { return getCompound() != 0; }
257 
265  virtual tgCompoundRigidInfo* getCompound() = 0;
266 
274  virtual const tgCompoundRigidInfo* getCompound() const = 0;
275 
281  virtual std::set<tgRigidInfo*> getLeafRigids() = 0;
282 
288  virtual bool containsNode(const btVector3& nodeVector) const = 0;
289 
295  virtual std::set<btVector3> getContainedNodes() const = 0;
296 
304  virtual bool sharesNodesWith(const tgRigidInfo& other) const = 0;
305 
306  // Need these in order to see if we've already build a pair/node
307  // @todo: maybe -- don't like having to know about pairs and nodes here...
308  // virtual bool matches(const tgPair& pair) = 0;
309  // virtual bool matches(const tgNode& node) = 0;
310 
311 protected: // Protected, not private -- subclasses need access
312 
316  mutable btCollisionShape* m_collisionShape;
317 
326 
330  mutable btRigidBody* m_rigidBody;
331 
332 };
333 
334 
343 inline std::ostream&
344 operator<<(std::ostream& os, const tgRigidInfo& obj)
345 {
346  os << "tgRigidInfo(" << obj.getRigidInfoGroup() << ", " << obj.getRigidBody() << ")";
347  return os;
348 }
349 
350 
351 #endif
bool isCompound() const
Definition: tgRigidInfo.h:256
virtual ~tgRigidInfo()
Definition: tgRigidInfo.h:100
std::ostream & operator<<(std::ostream &os, const tgRigidInfo &obj)
Definition: tgRigidInfo.h:344
btRigidBody * m_rigidBody
Definition: tgRigidInfo.h:330
virtual tgRigidInfo * getRigidInfoGroup()
Definition: tgRigidInfo.h:151
virtual bool containsNode(const btVector3 &nodeVector) const =0
tgRigidInfo * m_rigidInfoGroup
Definition: tgRigidInfo.h:325
virtual tgCompoundRigidInfo * getCompound()=0
virtual btCollisionShape * getCollisionShape(tgWorld &world) const =0
virtual std::set< tgRigidInfo * > getLeafRigids()=0
virtual void setRigidInfoGroup(tgRigidInfo *rigidInfoGroup)
Definition: tgRigidInfo.h:165
virtual btRigidBody * getRigidBody()
Definition: tgRigidInfo.h:174
Contains the definition of class tgModel. $Id$.
virtual void setRigidBody(btRigidBody *rigidBody)
Definition: tgRigidInfo.h:191
virtual bool sharesNodesWith(const tgRigidInfo &other) const =0
virtual btVector3 getCenterOfMass() const =0
Definition: tgPair.h:47
Contains the definition of class tgWorld $Id$.
Contains the definition of class tgBulletUtil.
Definition: tgNode.h:43
virtual btVector3 getConnectionPoint(const btVector3 &referencePoint, const btVector3 &destinationPoint, const double rotation) const
Definition: tgRigidInfo.h:243
Contains the definition of class tgTaggable $Id$.
virtual double getMass() const =0
virtual btTransform getTransform() const =0
virtual const btRigidBody * getRigidBody() const
Definition: tgRigidInfo.h:183
Contains the definition of class tgUtil and overloaded operator<<() free functions.
virtual btVector3 getConnectionPoint(const btVector3 &referencePoint, const btVector3 &destinationPoint) const =0
virtual std::set< btVector3 > getContainedNodes() const =0
Definition: tgTags.h:43
void setCollisionShape(btCollisionShape *p_btCollisionShape)
Definition: tgRigidInfo.h:139
btCollisionShape * m_collisionShape
Definition: tgRigidInfo.h:316