b2Fixture.h
Go to the documentation of this file.
1 /*
2 * Copyright (c) 2006-2009 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_FIXTURE_H
20 #define B2_FIXTURE_H
21 
22 #include <Box2D/Dynamics/b2Body.h>
25 
26 class b2BlockAllocator;
27 class b2Body;
28 class b2BroadPhase;
29 class b2Fixture;
30 
32 struct b2Filter
33 {
35  {
36  categoryBits = 0x0001;
37  maskBits = 0xFFFF;
38  groupIndex = 0;
39  }
40 
43 
47 
52 };
53 
57 {
60  {
61  shape = NULL;
62  userData = NULL;
63  friction = 0.2f;
64  restitution = 0.0f;
65  density = 0.0f;
66  isSensor = false;
67  }
68 
71  const b2Shape* shape;
72 
74  void* userData;
75 
78 
81 
84 
87  bool isSensor;
88 
91 };
92 
95 {
100 };
101 
108 {
109 public:
112  b2Shape::Type GetType() const;
113 
117  b2Shape* GetShape();
118  const b2Shape* GetShape() const;
119 
121  void SetSensor(bool sensor);
122 
125  bool IsSensor() const;
126 
130  void SetFilterData(const b2Filter& filter);
131 
133  const b2Filter& GetFilterData() const;
134 
136  void Refilter();
137 
140  b2Body* GetBody();
141  const b2Body* GetBody() const;
142 
145  b2Fixture* GetNext();
146  const b2Fixture* GetNext() const;
147 
150  void* GetUserData() const;
151 
153  void SetUserData(void* data);
154 
157  bool TestPoint(const b2Vec2& p) const;
158 
162  bool RayCast(b2RayCastOutput* output, const b2RayCastInput& input, int32 childIndex) const;
163 
167  void GetMassData(b2MassData* massData) const;
168 
171  void SetDensity(float32 density);
172 
174  float32 GetDensity() const;
175 
177  float32 GetFriction() const;
178 
181  void SetFriction(float32 friction);
182 
184  float32 GetRestitution() const;
185 
188  void SetRestitution(float32 restitution);
189 
193  const b2AABB& GetAABB(int32 childIndex) const;
194 
196  void Dump(int32 bodyIndex);
197 
198 protected:
199 
200  friend class b2Body;
201  friend class b2World;
202  friend class b2Contact;
203  friend class b2ContactManager;
204 
205  b2Fixture();
206 
207  // We need separation create/destroy functions from the constructor/destructor because
208  // the destructor cannot access the allocator (no destructor arguments allowed by C++).
209  void Create(b2BlockAllocator* allocator, b2Body* body, const b2FixtureDef* def);
210  void Destroy(b2BlockAllocator* allocator);
211 
212  // These support body activation/deactivation.
213  void CreateProxies(b2BroadPhase* broadPhase, const b2Transform& xf);
214  void DestroyProxies(b2BroadPhase* broadPhase);
215 
216  void Synchronize(b2BroadPhase* broadPhase, const b2Transform& xf1, const b2Transform& xf2);
217 
219 
222 
224 
227 
230 
232 
234 
235  void* m_userData;
236 };
237 
239 {
240  return m_shape->GetType();
241 }
242 
244 {
245  return m_shape;
246 }
247 
248 inline const b2Shape* b2Fixture::GetShape() const
249 {
250  return m_shape;
251 }
252 
253 inline bool b2Fixture::IsSensor() const
254 {
255  return m_isSensor;
256 }
257 
258 inline const b2Filter& b2Fixture::GetFilterData() const
259 {
260  return m_filter;
261 }
262 
263 inline void* b2Fixture::GetUserData() const
264 {
265  return m_userData;
266 }
267 
268 inline void b2Fixture::SetUserData(void* data)
269 {
270  m_userData = data;
271 }
272 
274 {
275  return m_body;
276 }
277 
278 inline const b2Body* b2Fixture::GetBody() const
279 {
280  return m_body;
281 }
282 
284 {
285  return m_next;
286 }
287 
288 inline const b2Fixture* b2Fixture::GetNext() const
289 {
290  return m_next;
291 }
292 
293 inline void b2Fixture::SetDensity(float32 density)
294 {
295  b2Assert(b2IsValid(density) && density >= 0.0f);
296  m_density = density;
297 }
298 
300 {
301  return m_density;
302 }
303 
305 {
306  return m_friction;
307 }
308 
309 inline void b2Fixture::SetFriction(float32 friction)
310 {
311  m_friction = friction;
312 }
313 
315 {
316  return m_restitution;
317 }
318 
319 inline void b2Fixture::SetRestitution(float32 restitution)
320 {
321  m_restitution = restitution;
322 }
323 
324 inline bool b2Fixture::TestPoint(const b2Vec2& p) const
325 {
326  return m_shape->TestPoint(m_body->GetTransform(), p);
327 }
328 
329 inline bool b2Fixture::RayCast(b2RayCastOutput* output, const b2RayCastInput& input, int32 childIndex) const
330 {
331  return m_shape->RayCast(output, input, m_body->GetTransform(), childIndex);
332 }
333 
334 inline void b2Fixture::GetMassData(b2MassData* massData) const
335 {
336  m_shape->ComputeMass(massData, m_density);
337 }
338 
339 inline const b2AABB& b2Fixture::GetAABB(int32 childIndex) const
340 {
341  b2Assert(0 <= childIndex && childIndex < m_proxyCount);
342  return m_proxies[childIndex].aabb;
343 }
344 
345 #endif
const b2Shape * shape
Definition: b2Fixture.h:71
float32 m_friction
Definition: b2Fixture.h:225
float32 GetFriction() const
Get the coefficient of friction.
Definition: b2Fixture.h:304
b2Shape::Type GetType() const
Definition: b2Fixture.h:238
unsigned short uint16
Definition: b2Settings.h:33
void Destroy(b2Contact *c)
void SetFriction(float32 friction)
Definition: b2Fixture.h:309
void SetRestitution(float32 restitution)
Definition: b2Fixture.h:319
float32 GetRestitution() const
Get the coefficient of restitution.
Definition: b2Fixture.h:314
GLenum GLenum GLenum input
bool RayCast(b2RayCastOutput *output, const b2RayCastInput &input, int32 childIndex) const
Definition: b2Fixture.h:329
b2Fixture * fixture
Definition: b2Fixture.h:97
b2Filter m_filter
Definition: b2Fixture.h:231
bool TestPoint(const b2Vec2 &p) const
Definition: b2Fixture.h:324
b2Fixture * m_next
Definition: b2Fixture.h:220
Ray-cast input data. The ray extends from p1 to p1 + maxFraction * (p2 - p1).
Definition: b2Collision.h:147
void SetUserData(void *data)
Set the user data. Use this to store your application specific data.
Definition: b2Fixture.h:268
const b2Filter & GetFilterData() const
Get the contact filtering data.
Definition: b2Fixture.h:258
int32 m_proxyCount
Definition: b2Fixture.h:229
float32 m_restitution
Definition: b2Fixture.h:226
This proxy is used internally to connect fixtures to the broad-phase.
Definition: b2Fixture.h:94
A 2D column vector.
Definition: b2Math.h:52
b2Fixture * GetNext()
Definition: b2Fixture.h:283
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
signed int int32
Definition: b2Settings.h:31
void * m_userData
Definition: b2Fixture.h:235
A rigid body. These are created via b2World::CreateBody.
Definition: b2Body.h:126
float32 GetDensity() const
Get the density of this fixture.
Definition: b2Fixture.h:299
bool b2IsValid(float32 x)
This function is used to ensure that a floating point number is not a NaN or infinity.
Definition: b2Math.h:26
b2Filter()
Definition: b2Fixture.h:34
float32 m_density
Definition: b2Fixture.h:218
b2Filter filter
Contact filtering data.
Definition: b2Fixture.h:90
This holds contact filtering data.
Definition: b2Fixture.h:32
GLint GLenum GLsizei GLint GLsizei const GLvoid * data
GLfloat GLfloat p
signed short int16
Definition: b2Settings.h:30
void GetMassData(b2MassData *massData) const
Definition: b2Fixture.h:334
bool isSensor
Definition: b2Fixture.h:87
float32 density
The density, usually in kg/m^2.
Definition: b2Fixture.h:83
bool IsSensor() const
Definition: b2Fixture.h:253
void SetDensity(float32 density)
Definition: b2Fixture.h:293
void * userData
Use this to store application specific fixture data.
Definition: b2Fixture.h:74
b2FixtureDef()
The constructor sets the default fixture definition values.
Definition: b2Fixture.h:59
An axis aligned bounding box.
Definition: b2Collision.h:162
#define b2Assert(A)
Definition: b2Settings.h:27
int32 childIndex
Definition: b2Fixture.h:98
b2Body * m_body
Definition: b2Fixture.h:221
float32 restitution
The restitution (elasticity) usually in the range [0,1].
Definition: b2Fixture.h:80
b2FixtureProxy * m_proxies
Definition: b2Fixture.h:228
b2Shape * m_shape
Definition: b2Fixture.h:223
int16 groupIndex
Definition: b2Fixture.h:51
const b2AABB & GetAABB(int32 childIndex) const
Definition: b2Fixture.h:339
bool m_isSensor
Definition: b2Fixture.h:233
b2Shape * GetShape()
Definition: b2Fixture.h:243
uint16 categoryBits
The collision category bits. Normally you would just set one bit.
Definition: b2Fixture.h:42
uint16 maskBits
Definition: b2Fixture.h:46
This holds the mass data computed for a shape.
Definition: b2Shape.h:27
b2AABB aabb
Definition: b2Fixture.h:96
float32 friction
The friction coefficient, usually in the range [0,1].
Definition: b2Fixture.h:77
int32 proxyId
Definition: b2Fixture.h:99
b2Body * GetBody()
Definition: b2Fixture.h:273
float float32
Definition: b2Settings.h:35
GLdouble GLdouble GLdouble GLdouble GLdouble GLdouble f
void * GetUserData() const
Definition: b2Fixture.h:263


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