2a2d0543bb271398619a3aca265a1a3ea48a98a4
[blender.git] / extern / bullet / Bullet / CollisionShapes / CollisionShape.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 #ifndef COLLISION_SHAPE_H
12 #define COLLISION_SHAPE_H
13
14 #include "SimdTransform.h"
15 #include "SimdVector3.h"
16 #include <SimdMatrix3x3.h>
17 #include "SimdPoint3.h"
18 #include "BroadphaseCollision/BroadphaseProxy.h" //for the shape types
19
20 ///CollisionShape provides generic interface for collidable objects
21 class CollisionShape
22 {
23
24 public:
25
26         CollisionShape()
27         :m_tempDebug(0)
28         {
29         }
30         virtual ~CollisionShape()
31         {
32         }
33
34         virtual void GetAabb(const SimdTransform& t,SimdVector3& aabbMin,SimdVector3& aabbMax) const =0;
35
36         virtual void    GetBoundingSphere(SimdVector3& center,SimdScalar& radius) const;
37
38         virtual float   GetAngularMotionDisc() const;
39
40         virtual int             GetShapeType() const=0;
41
42         ///CalculateTemporalAabb calculates the enclosing aabb for the moving object over interval [0..timeStep)
43         ///result is conservative
44         void CalculateTemporalAabb(const SimdTransform& curTrans,const SimdVector3& linvel,const SimdVector3& angvel,SimdScalar timeStep, SimdVector3& temporalAabbMin,SimdVector3& temporalAabbMax);
45
46         bool    IsPolyhedral() const
47         {
48                 return (GetShapeType() < IMPLICIT_CONVEX_SHAPES_START_HERE);
49         }
50
51         bool    IsConvex() const
52         {
53                 return (GetShapeType() < CONCAVE_SHAPES_START_HERE);
54         }
55         bool    IsConcave() const
56         {
57                 return (GetShapeType() > CONCAVE_SHAPES_START_HERE);
58         }
59
60
61         virtual void    setLocalScaling(const SimdVector3& scaling) =0;
62
63         virtual void    CalculateLocalInertia(SimdScalar mass,SimdVector3& inertia) = 0;
64
65 //debugging support
66         virtual char*   GetName()const =0 ;
67         const char* GetExtraDebugInfo() const { return m_tempDebug;}
68         void  SetExtraDebugInfo(const char* extraDebugInfo) { m_tempDebug = extraDebugInfo;}
69         const char * m_tempDebug;
70 //endif debugging support
71
72         virtual void    SetMargin(float margin) = 0;
73         virtual float   GetMargin() const = 0;
74
75 };      
76
77 #endif //COLLISION_SHAPE_H
78