Fixed several bugs: python refcounting related and Bullet related (basic add/remove...
[blender.git] / extern / bullet / Bullet / CollisionShapes / ConvexShape.h
1 /*
2  * Copyright (c) 2005 Erwin Coumans http://continuousphysics.com/Bullet/
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 "CollisionShapes/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         virtual const SimdVector3& getLocalScaling() const 
55         {
56                 return m_localScaling;
57         }
58
59
60         virtual void    SetMargin(float margin)
61         {
62                 m_collisionMargin = margin;
63         }
64         virtual float   GetMargin() const
65         {
66                 return m_collisionMargin;
67         }
68 private:
69         SimdScalar      m_collisionMargin;
70         //local scaling. collisionMargin is not scaled !
71 protected:
72         SimdVector3     m_localScaling;
73
74 };
75
76
77
78 #endif //CONVEX_SHAPE_INTERFACE1