| 1 | /* | 
|---|
| 2 | Copyright (c) 2005 Gino van den Bergen / Erwin Coumans http://continuousphysics.com | 
|---|
| 3 |  | 
|---|
| 4 | Permission is hereby granted, free of charge, to any person or organization | 
|---|
| 5 | obtaining a copy of the software and accompanying documentation covered by | 
|---|
| 6 | this license (the "Software") to use, reproduce, display, distribute, | 
|---|
| 7 | execute, and transmit the Software, and to prepare derivative works of the | 
|---|
| 8 | Software, and to permit third-parties to whom the Software is furnished to | 
|---|
| 9 | do so, all subject to the following: | 
|---|
| 10 |  | 
|---|
| 11 | The copyright notices in the Software and this entire statement, including | 
|---|
| 12 | the above license grant, this restriction and the following disclaimer, | 
|---|
| 13 | must be included in all copies of the Software, in whole or in part, and | 
|---|
| 14 | all derivative works of the Software, unless such copies or derivative | 
|---|
| 15 | works are solely in the form of machine-executable object code generated by | 
|---|
| 16 | a source language processor. | 
|---|
| 17 |  | 
|---|
| 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
|---|
| 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
|---|
| 20 | FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT | 
|---|
| 21 | SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE | 
|---|
| 22 | FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, | 
|---|
| 23 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 
|---|
| 24 | DEALINGS IN THE SOFTWARE. | 
|---|
| 25 | */ | 
|---|
| 26 |  | 
|---|
| 27 |  | 
|---|
| 28 | #ifndef IDEBUG_DRAW__H | 
|---|
| 29 | #define IDEBUG_DRAW__H | 
|---|
| 30 |  | 
|---|
| 31 | #include "btVector3.h" | 
|---|
| 32 |  | 
|---|
| 33 |  | 
|---|
| 34 | ///The btIDebugDraw interface class allows hooking up a debug renderer to visually debug simulations. | 
|---|
| 35 | ///Typical use case: create a debug drawer object, and assign it to a btCollisionWorld or btDynamicsWorld using setDebugDrawer and call debugDrawWorld. | 
|---|
| 36 | ///A class that implements the btIDebugDraw interface has to implement the drawLine method at a minimum. | 
|---|
| 37 | class   btIDebugDraw | 
|---|
| 38 | { | 
|---|
| 39 |         public: | 
|---|
| 40 |  | 
|---|
| 41 |         enum    DebugDrawModes | 
|---|
| 42 |         { | 
|---|
| 43 |                 DBG_NoDebug=0, | 
|---|
| 44 |                 DBG_DrawWireframe = 1, | 
|---|
| 45 |                 DBG_DrawAabb=2, | 
|---|
| 46 |                 DBG_DrawFeaturesText=4, | 
|---|
| 47 |                 DBG_DrawContactPoints=8, | 
|---|
| 48 |                 DBG_NoDeactivation=16, | 
|---|
| 49 |                 DBG_NoHelpText = 32, | 
|---|
| 50 |                 DBG_DrawText=64, | 
|---|
| 51 |                 DBG_ProfileTimings = 128, | 
|---|
| 52 |                 DBG_EnableSatComparison = 256, | 
|---|
| 53 |                 DBG_DisableBulletLCP = 512, | 
|---|
| 54 |                 DBG_EnableCCD = 1024, | 
|---|
| 55 |                 DBG_MAX_DEBUG_DRAW_MODE | 
|---|
| 56 |         }; | 
|---|
| 57 |  | 
|---|
| 58 |         virtual ~btIDebugDraw() {}; | 
|---|
| 59 |  | 
|---|
| 60 |         virtual void    drawLine(const btVector3& from,const btVector3& to,const btVector3& color)=0; | 
|---|
| 61 |          | 
|---|
| 62 |         virtual void    drawTriangle(const btVector3& v0,const btVector3& v1,const btVector3& v2,const btVector3& /*n0*/,const btVector3& /*n1*/,const btVector3& /*n2*/,const btVector3& color, btScalar alpha) | 
|---|
| 63 |         { | 
|---|
| 64 |                 drawTriangle(v0,v1,v2,color,alpha); | 
|---|
| 65 |         } | 
|---|
| 66 |         virtual void    drawTriangle(const btVector3& v0,const btVector3& v1,const btVector3& v2,const btVector3& color, btScalar /*alpha*/) | 
|---|
| 67 |         { | 
|---|
| 68 |                 drawLine(v0,v1,color); | 
|---|
| 69 |                 drawLine(v1,v2,color); | 
|---|
| 70 |                 drawLine(v2,v0,color); | 
|---|
| 71 |         } | 
|---|
| 72 |  | 
|---|
| 73 |         virtual void    drawContactPoint(const btVector3& PointOnB,const btVector3& normalOnB,btScalar distance,int lifeTime,const btVector3& color)=0; | 
|---|
| 74 |  | 
|---|
| 75 |         virtual void    reportErrorWarning(const char* warningString) = 0; | 
|---|
| 76 |  | 
|---|
| 77 |         virtual void    draw3dText(const btVector3& location,const char* textString) = 0; | 
|---|
| 78 |          | 
|---|
| 79 |         virtual void    setDebugMode(int debugMode) =0; | 
|---|
| 80 |          | 
|---|
| 81 |         virtual int             getDebugMode() const = 0; | 
|---|
| 82 |  | 
|---|
| 83 |         inline void drawAabb(const btVector3& from,const btVector3& to,const btVector3& color) | 
|---|
| 84 |         { | 
|---|
| 85 |  | 
|---|
| 86 |                 btVector3 halfExtents = (to-from)* 0.5f; | 
|---|
| 87 |                 btVector3 center = (to+from) *0.5f; | 
|---|
| 88 |                 int i,j; | 
|---|
| 89 |  | 
|---|
| 90 |                 btVector3 edgecoord(1.f,1.f,1.f),pa,pb; | 
|---|
| 91 |                 for (i=0;i<4;i++) | 
|---|
| 92 |                 { | 
|---|
| 93 |                         for (j=0;j<3;j++) | 
|---|
| 94 |                         { | 
|---|
| 95 |                                 pa = btVector3(edgecoord[0]*halfExtents[0], edgecoord[1]*halfExtents[1],                 | 
|---|
| 96 |                                         edgecoord[2]*halfExtents[2]); | 
|---|
| 97 |                                 pa+=center; | 
|---|
| 98 |  | 
|---|
| 99 |                                 int othercoord = j%3; | 
|---|
| 100 |                                 edgecoord[othercoord]*=-1.f; | 
|---|
| 101 |                                 pb = btVector3(edgecoord[0]*halfExtents[0], edgecoord[1]*halfExtents[1],         | 
|---|
| 102 |                                         edgecoord[2]*halfExtents[2]); | 
|---|
| 103 |                                 pb+=center; | 
|---|
| 104 |  | 
|---|
| 105 |                                 drawLine(pa,pb,color); | 
|---|
| 106 |                         } | 
|---|
| 107 |                         edgecoord = btVector3(-1.f,-1.f,-1.f); | 
|---|
| 108 |                         if (i<3) | 
|---|
| 109 |                                 edgecoord[i]*=-1.f; | 
|---|
| 110 |                 } | 
|---|
| 111 |         } | 
|---|
| 112 | }; | 
|---|
| 113 |  | 
|---|
| 114 |  | 
|---|
| 115 | #endif //IDEBUG_DRAW__H | 
|---|
| 116 |  | 
|---|