b2Joint.h
Go to the documentation of this file.
1 /*
2 * Copyright (c) 2006-2007 Erin Catto http://www.box2d.org
3 *
4 * This software is provided 'as-is', without any express or implied
5 * warranty. In no event will the authors be held liable for any damages
6 * arising from the use of this software.
7 * Permission is granted to anyone to use this software for any purpose,
8 * including commercial applications, and to alter it and redistribute it
9 * freely, subject to the following restrictions:
10 * 1. The origin of this software must not be misrepresented; you must not
11 * claim that you wrote the original software. If you use this software
12 * in a product, an acknowledgment in the product documentation would be
13 * appreciated but is not required.
14 * 2. Altered source versions must be plainly marked as such, and must not be
15 * misrepresented as being the original software.
16 * 3. This notice may not be removed or altered from any source distribution.
17 */
18 
19 #ifndef B2_JOINT_H
20 #define B2_JOINT_H
21 
22 #include <Box2D/Common/b2Math.h>
23 
24 class b2Body;
25 class b2Joint;
26 struct b2SolverData;
27 class b2BlockAllocator;
28 
30 {
43 };
44 
46 {
51 };
52 
53 struct b2Jacobian
54 {
58 };
59 
66 {
71 };
72 
74 struct b2JointDef
75 {
77  {
79  userData = NULL;
80  bodyA = NULL;
81  bodyB = NULL;
82  collideConnected = false;
83  }
84 
87 
89  void* userData;
90 
93 
96 
99 };
100 
103 class b2Joint
104 {
105 public:
106 
108  b2JointType GetType() const;
109 
111  b2Body* GetBodyA();
112 
114  b2Body* GetBodyB();
115 
117  virtual b2Vec2 GetAnchorA() const = 0;
118 
120  virtual b2Vec2 GetAnchorB() const = 0;
121 
123  virtual b2Vec2 GetReactionForce(float32 inv_dt) const = 0;
124 
126  virtual float32 GetReactionTorque(float32 inv_dt) const = 0;
127 
129  b2Joint* GetNext();
130  const b2Joint* GetNext() const;
131 
133  void* GetUserData() const;
134 
136  void SetUserData(void* data);
137 
139  bool IsActive() const;
140 
144  bool GetCollideConnected() const;
145 
147  virtual void Dump() { b2Log("// Dump is not supported for this joint type.\n"); }
148 
150  virtual void ShiftOrigin(const b2Vec2& newOrigin) { B2_NOT_USED(newOrigin); }
151 
152 protected:
153  friend class b2World;
154  friend class b2Body;
155  friend class b2Island;
156  friend class b2GearJoint;
157 
158  static b2Joint* Create(const b2JointDef* def, b2BlockAllocator* allocator);
159  static void Destroy(b2Joint* joint, b2BlockAllocator* allocator);
160 
161  b2Joint(const b2JointDef* def);
162  virtual ~b2Joint() {}
163 
164  virtual void InitVelocityConstraints(const b2SolverData& data) = 0;
165  virtual void SolveVelocityConstraints(const b2SolverData& data) = 0;
166 
167  // This returns true if the position errors are within tolerance.
168  virtual bool SolvePositionConstraints(const b2SolverData& data) = 0;
169 
177 
179 
182 
183  void* m_userData;
184 };
185 
187 {
188  return m_type;
189 }
190 
192 {
193  return m_bodyA;
194 }
195 
197 {
198  return m_bodyB;
199 }
200 
202 {
203  return m_next;
204 }
205 
206 inline const b2Joint* b2Joint::GetNext() const
207 {
208  return m_next;
209 }
210 
211 inline void* b2Joint::GetUserData() const
212 {
213  return m_userData;
214 }
215 
216 inline void b2Joint::SetUserData(void* data)
217 {
218  m_userData = data;
219 }
220 
221 inline bool b2Joint::GetCollideConnected() const
222 {
223  return m_collideConnected;
224 }
225 
226 #endif
This is an internal class.
Definition: b2Island.h:34
void b2Log(const char *string,...)
Logging function.
Definition: b2Settings.cpp:38
static void Destroy(b2Joint *joint, b2BlockAllocator *allocator)
Definition: b2Joint.cpp:128
Joint definitions are used to construct joints.
Definition: b2Joint.h:74
b2Body * GetBodyA()
Get the first body attached to this joint.
Definition: b2Joint.h:191
bool SolvePositionConstraints(const b2SolverData &data)
b2LimitState
Definition: b2Joint.h:45
void SolveVelocityConstraints(const b2SolverData &data)
b2JointType GetType() const
Get the type of the concrete joint.
Definition: b2Joint.h:186
b2JointEdge * prev
the previous joint edge in the body&#39;s joint list
Definition: b2Joint.h:69
bool m_collideConnected
Definition: b2Joint.h:181
#define B2_NOT_USED(x)
Definition: b2Settings.h:26
b2JointDef()
Definition: b2Joint.h:76
b2Joint * GetNext()
Get the next joint the world joint list.
Definition: b2Joint.h:201
Solver Data.
Definition: b2TimeStep.h:63
int32 m_index
Definition: b2Joint.h:178
A 2D column vector.
Definition: b2Math.h:52
b2Joint * m_prev
Definition: b2Joint.h:171
b2Body * other
provides quick access to the other body attached.
Definition: b2Joint.h:67
b2Body * GetBodyB()
Get the second body attached to this joint.
Definition: b2Joint.h:196
b2JointEdge m_edgeB
Definition: b2Joint.h:174
signed int int32
Definition: b2Settings.h:31
b2Joint * joint
the joint
Definition: b2Joint.h:68
A rigid body. These are created via b2World::CreateBody.
Definition: b2Body.h:126
b2Joint * m_next
Definition: b2Joint.h:172
float32 angularA
Definition: b2Joint.h:56
float32 angularB
Definition: b2Joint.h:57
bool collideConnected
Set this flag to true if the attached bodies should collide.
Definition: b2Joint.h:98
b2JointType
Definition: b2Joint.h:29
void * userData
Use this to attach application specific data to your joints.
Definition: b2Joint.h:89
friend class b2Joint
Definition: b2GearJoint.h:80
GLint GLenum GLsizei GLint GLsizei const GLvoid * data
b2JointType m_type
Definition: b2Joint.h:170
void * m_userData
Definition: b2Joint.h:183
b2Body * m_bodyA
Definition: b2Joint.h:175
virtual void Dump()
Dump this joint to the log file.
Definition: b2Joint.h:147
b2Vec2 linear
Definition: b2Joint.h:55
b2JointType type
The joint type is set automatically for concrete joint types.
Definition: b2Joint.h:86
virtual ~b2Joint()
Definition: b2Joint.h:162
virtual void ShiftOrigin(const b2Vec2 &newOrigin)
Shift the origin for any points stored in world coordinates.
Definition: b2Joint.h:150
void * GetUserData() const
Get the user data pointer.
Definition: b2Joint.h:211
GLuint GLuint GLsizei GLenum type
b2Body * bodyA
The first attached body.
Definition: b2Joint.h:92
static b2Joint * Create(const b2JointDef *def, b2BlockAllocator *allocator)
Definition: b2Joint.cpp:37
void SetUserData(void *data)
Set the user data pointer.
Definition: b2Joint.h:216
bool GetCollideConnected() const
Definition: b2Joint.h:221
b2JointEdge m_edgeA
Definition: b2Joint.h:173
b2Body * bodyB
The second attached body.
Definition: b2Joint.h:95
b2JointEdge * next
the next joint edge in the body&#39;s joint list
Definition: b2Joint.h:70
b2Body * m_bodyB
Definition: b2Joint.h:176
float float32
Definition: b2Settings.h:35
void InitVelocityConstraints(const b2SolverData &data)
bool m_islandFlag
Definition: b2Joint.h:180


mvsim
Author(s):
autogenerated on Fri May 7 2021 03:05:51