345358e47fc52752eb115ebc633ed67187784d63
[blender.git] / extern / bullet / Bullet / CollisionShapes / ConvexShape.h
1 /*
2  * Copyright (c) 2005 Erwin Coumans http://www.erwincoumans.com
3  *
4  * Permission to use, copy, modify, distribute and sell this software
5  * and its documentation for any purpose is hereby granted without fee,
6  * provided that the above copyright notice appear in all copies.
7  * Erwin Coumans makes no representations about the suitability 
8  * of this software for any purpose.  
9  * It is provided "as is" without express or implied warranty.
10  */
11
12 #ifndef CONVEX_SHAPE_INTERFACE1
13 #define CONVEX_SHAPE_INTERFACE1
14
15 #include "CollisionShape.h"
16
17 #include "SimdVector3.h"
18 #include "SimdTransform.h"
19 #include "SimdMatrix3x3.h"
20 #include <vector>
21 #include "NarrowPhaseCollision/CollisionMargin.h"
22
23 //todo: get rid of this ConvexCastResult thing!
24 struct ConvexCastResult;
25
26
27 /// ConvexShape is an abstract shape interface.
28 /// The explicit part provides plane-equations, the implicit part provides GetClosestPoint interface.
29 /// used in combination with GJK or ConvexCast
30 class ConvexShape : public CollisionShape
31 {
32 public:
33         ConvexShape();
34
35         virtual ~ConvexShape();
36
37         virtual SimdVector3     LocalGetSupportingVertex(const SimdVector3& vec)const;
38         virtual SimdVector3     LocalGetSupportingVertexWithoutMargin(const SimdVector3& vec) const= 0;
39
40         // testing for hullnode code
41
42         ///GetAabb's default implementation is brute force, expected derived classes to implement a fast dedicated version
43         void GetAabb(const SimdTransform& t,SimdVector3& aabbMin,SimdVector3& aabbMax) const
44         {
45                 GetAabbSlow(t,aabbMin,aabbMax);
46         }
47
48
49         
50         virtual void GetAabbSlow(const SimdTransform& t,SimdVector3& aabbMin,SimdVector3& aabbMax) const;
51
52
53         virtual void    setLocalScaling(const SimdVector3& scaling);
54
55
56         virtual void    SetMargin(float margin)
57         {
58                 m_collisionMargin = margin;
59         }
60         virtual float   GetMargin() const
61         {
62                 return m_collisionMargin;
63         }
64 private:
65         SimdScalar      m_collisionMargin;
66         //local scaling. collisionMargin is not scaled !
67 protected:
68         SimdVector3     m_localScaling;
69
70 };
71
72
73
74 #endif //CONVEX_SHAPE_INTERFACE1