| /* |
| Bullet Continuous Collision Detection and Physics Library |
| Copyright (c) 2003-2008 Erwin Coumans http://continuousphysics.com/Bullet/ |
| |
| This software is provided 'as-is', without any express or implied warranty. |
| In no event will the authors be held liable for any damages arising from the use of this software. |
| Permission is granted to anyone to use this software for any purpose, |
| including commercial applications, and to alter it and redistribute it freely, |
| subject to the following restrictions: |
| |
| 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. |
| 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. |
| 3. This notice may not be removed or altered from any source distribution. |
| */ |
| |
| #ifndef SOFT_BODY_HELPERS_H |
| #define SOFT_BODY_HELPERS_H |
| |
| #include "btSoftBody.h" |
| |
| // |
| // Helpers |
| // |
| |
| /* fDrawFlags */ |
| struct fDrawFlags { enum _ { |
| Nodes = 0x0001, |
| Links = 0x0002, |
| Faces = 0x0004, |
| Tetras = 0x0008, |
| Normals = 0x0010, |
| Contacts = 0x0020, |
| Anchors = 0x0040, |
| Notes = 0x0080, |
| Clusters = 0x0100, |
| NodeTree = 0x0200, |
| FaceTree = 0x0400, |
| ClusterTree = 0x0800, |
| Joints = 0x1000, |
| /* presets */ |
| Std = Links+Faces+Tetras+Anchors+Notes+Joints, |
| StdTetra = Std-Faces+Tetras |
| };}; |
| |
| struct btSoftBodyHelpers |
| { |
| /* Draw body */ |
| static void Draw( btSoftBody* psb, |
| btIDebugDraw* idraw, |
| int drawflags=fDrawFlags::Std); |
| /* Draw body infos */ |
| static void DrawInfos( btSoftBody* psb, |
| btIDebugDraw* idraw, |
| bool masses, |
| bool areas, |
| bool stress); |
| /* Draw node tree */ |
| static void DrawNodeTree( btSoftBody* psb, |
| btIDebugDraw* idraw, |
| int mindepth=0, |
| int maxdepth=-1); |
| /* Draw face tree */ |
| static void DrawFaceTree( btSoftBody* psb, |
| btIDebugDraw* idraw, |
| int mindepth=0, |
| int maxdepth=-1); |
| /* Draw cluster tree */ |
| static void DrawClusterTree(btSoftBody* psb, |
| btIDebugDraw* idraw, |
| int mindepth=0, |
| int maxdepth=-1); |
| /* Draw rigid frame */ |
| static void DrawFrame( btSoftBody* psb, |
| btIDebugDraw* idraw); |
| /* Create a rope */ |
| static btSoftBody* CreateRope( btSoftBodyWorldInfo& worldInfo, |
| const btVector3& from, |
| const btVector3& to, |
| int res, |
| int fixeds); |
| /* Create a patch */ |
| static btSoftBody* CreatePatch(btSoftBodyWorldInfo& worldInfo, |
| const btVector3& corner00, |
| const btVector3& corner10, |
| const btVector3& corner01, |
| const btVector3& corner11, |
| int resx, |
| int resy, |
| int fixeds, |
| bool gendiags); |
| /* Create a patch with UV Texture Coordinates */ |
| static btSoftBody* CreatePatchUV(btSoftBodyWorldInfo& worldInfo, |
| const btVector3& corner00, |
| const btVector3& corner10, |
| const btVector3& corner01, |
| const btVector3& corner11, |
| int resx, |
| int resy, |
| int fixeds, |
| bool gendiags, |
| float* tex_coords=0); |
| static float CalculateUV(int resx,int resy,int ix,int iy,int id); |
| /* Create an ellipsoid */ |
| static btSoftBody* CreateEllipsoid(btSoftBodyWorldInfo& worldInfo, |
| const btVector3& center, |
| const btVector3& radius, |
| int res); |
| /* Create from trimesh */ |
| static btSoftBody* CreateFromTriMesh( btSoftBodyWorldInfo& worldInfo, |
| const btScalar* vertices, |
| const int* triangles, |
| int ntriangles); |
| /* Create from convex-hull */ |
| static btSoftBody* CreateFromConvexHull( btSoftBodyWorldInfo& worldInfo, |
| const btVector3* vertices, |
| int nvertices); |
| |
| |
| /* Export TetGen compatible .smesh file */ |
| static void ExportAsSMeshFile( btSoftBody* psb, |
| const char* filename); |
| /* Create from TetGen .ele, .face, .node files */ |
| static btSoftBody* CreateFromTetGenFile( btSoftBodyWorldInfo& worldInfo, |
| const char* ele, |
| const char* face, |
| const char* node, |
| bool bfacelinks, |
| bool btetralinks, |
| bool bfacesfromtetras); |
| /* Create from TetGen .ele, .face, .node data */ |
| static btSoftBody* CreateFromTetGenData( btSoftBodyWorldInfo& worldInfo, |
| const char* ele, |
| const char* face, |
| const char* node, |
| bool bfacelinks, |
| bool btetralinks, |
| bool bfacesfromtetras); |
| |
| }; |
| |
| #endif //SOFT_BODY_HELPERS_H |