1 /* 2 * Copyright (c) 2006-2010 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_EDGE_SHAPE_H 20 #define B2_EDGE_SHAPE_H 21 22 #include <Box2D/Collision/Shapes/b2Shape.h> 23 24 /// A line segment (edge) shape. These can be connected in chains or loops 25 /// to other edge shapes. The connectivity information is used to ensure 26 /// correct contact normals. 27 class b2EdgeShape : public b2Shape 28 { 29 public: 30 b2EdgeShape(); 31 32 /// Set this as an isolated edge. 33 void Set(const b2Vec2& v1, const b2Vec2& v2); 34 35 /// Implement b2Shape. 36 b2Shape* Clone(b2BlockAllocator* allocator) const; 37 38 /// @see b2Shape::GetChildCount 39 int32 GetChildCount() const; 40 41 /// @see b2Shape::TestPoint 42 bool TestPoint(const b2Transform& transform, const b2Vec2& p) const; 43 44 /// Implement b2Shape. 45 bool RayCast(b2RayCastOutput* output, const b2RayCastInput& input, 46 const b2Transform& transform, int32 childIndex) const; 47 48 /// @see b2Shape::ComputeAABB 49 void ComputeAABB(b2AABB* aabb, const b2Transform& transform, int32 childIndex) const; 50 51 /// @see b2Shape::ComputeMass 52 void ComputeMass(b2MassData* massData, float32 density) const; 53 54 /// These are the edge vertices 55 b2Vec2 m_vertex1, m_vertex2; 56 57 /// Optional adjacent vertices. These are used for smooth collision. 58 b2Vec2 m_vertex0, m_vertex3; 59 bool m_hasVertex0, m_hasVertex3; 60 }; 61 62 inline b2EdgeShape::b2EdgeShape() 63 { 64 m_type = e_edge; 65 m_radius = b2_polygonRadius; 66 m_vertex0.x = 0.0f; 67 m_vertex0.y = 0.0f; 68 m_vertex3.x = 0.0f; 69 m_vertex3.y = 0.0f; 70 m_hasVertex0 = false; 71 m_hasVertex3 = false; 72 } 73 74 #endif 75