Program listing for file mechanics/src/collision/bullet/SiconosBulletCollisionManager.hpp

Program listing for file mechanics/src/collision/bullet/SiconosBulletCollisionManager.hpp#

  1#ifndef SiconosBulletCollisionManager_h
  2#define SiconosBulletCollisionManager_h
  3
  4#include <MechanicsFwd.hpp>
  5#include <BulletSiconosFwd.hpp>
  6
  7#include <SiconosCollisionManager.hpp>
  8#include <SiconosShape.hpp>
  9#include <SiconosContactor.hpp>
 10
 11#include <map>
 12
 13DEFINE_SPTR(SiconosBulletCollisionManager_impl);
 14
 15
 16enum SiconosBulletDimension
 17{
 18  SICONOS_BULLET_3D=0,
 19  SICONOS_BULLET_2D=1
 20};
 21
 22struct SiconosBulletOptions
 23{
 24protected:
 25
 26  ACCEPT_SERIALIZATION(SiconosBulletOptions);
 27
 28public:
 29  SiconosBulletOptions();
 30
 31  int dimension;
 32  double contactBreakingThreshold;
 33  double contactProcessingThreshold;
 34  double worldScale;
 35  bool useAxisSweep3;
 36  bool clearOverlappingPairCache;
 37  unsigned int perturbationIterations;
 38  unsigned int minimumPointsPerturbationThreshold;
 39  bool enableSatConvex;
 40  bool enablePolyhedralContactClipping;
 41  double Depth2D;
 42};
 43
 44struct SiconosBulletStatistics
 45{
 46protected:
 47
 48  ACCEPT_SERIALIZATION(SiconosBulletStatistics);
 49
 50public:
 51  SiconosBulletStatistics()
 52    : new_interactions_created(0)
 53    , existing_interactions_processed(0)
 54    , interaction_warnings(0)
 55    , interaction_destroyed(0)
 56    {}
 57  int new_interactions_created;
 58  int existing_interactions_processed;
 59  int interaction_warnings;
 60  int interaction_destroyed;
 61};
 62
 63class SiconosBulletCollisionManager : public SiconosCollisionManager
 64{
 65protected:
 66
 67  ACCEPT_SERIALIZATION(SiconosBulletCollisionManager);
 68
 69protected:
 70  SP::SiconosBulletCollisionManager_impl _impl;
 71
 72  void initialize_impl();
 73
 74
 75  static bool bulletContactClear(void* userPersistentData);
 76
 77
 78  static bool bulletContactAddedCallback(btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0Wrap, int partId0, int index0,
 79                                         const btCollisionObjectWrapper* colObj1Wrap, int partId1, int index1);
 80  static Simulation *gSimulation;
 81
 82public:
 83  SiconosBulletCollisionManager();
 84  SiconosBulletCollisionManager(const SiconosBulletOptions &options);
 85  virtual ~SiconosBulletCollisionManager();
 86
 87protected:
 88  bool _with_equality_constraints;
 89  SiconosBulletOptions _options;
 90  SiconosBulletStatistics _stats;
 91
 92
 93  virtual SP::BulletR makeBulletR(SP::RigidBodyDS ds1, SP::SiconosShape shape1,
 94                                  SP::RigidBodyDS ds2, SP::SiconosShape shape2,
 95                                  const btManifoldPoint &);
 96
 97
 98  virtual SP::Bullet5DR makeBullet5DR(SP::RigidBodyDS ds1, SP::SiconosShape shape1,
 99                                      SP::RigidBodyDS ds2, SP::SiconosShape shape2,
100                                      const btManifoldPoint &);
101
102
103  virtual SP::Bullet2dR makeBullet2dR(SP::RigidBody2dDS ds1, SP::SiconosShape shape1,
104                                      SP::RigidBody2dDS ds2, SP::SiconosShape shape2,
105                                      const btManifoldPoint &);
106
107
108  virtual SP::Bullet2d3DR makeBullet2d3DR(SP::RigidBody2dDS ds1, SP::SiconosShape shape1,
109                                          SP::RigidBody2dDS ds2, SP::SiconosShape shape2,
110                                          const btManifoldPoint &);
111
112public:
113
114
115  SP::StaticBody addStaticBody(
116    SP::SiconosContactorSet cs, SP::SiconosVector position = SP::SiconosVector(), int number=0);
117
118
119  void removeStaticBody(const SP::StaticBody& body);
120
121
122  void removeBody(const SP::SecondOrderDS& body);
123
124  void updateInteractions(SP::Simulation simulation);
125
126  std::vector<SP::SiconosCollisionQueryResult>
127  lineIntersectionQuery(const SiconosVector& start, const SiconosVector& end,
128                        bool closestOnly=false, bool sorted=true);
129
130  void clearOverlappingPairCache();
131
132  const SiconosBulletOptions &options() const { return _options; }
133  const SiconosBulletStatistics &statistics() const { return _stats; }
134  void resetStatistics() { _stats = SiconosBulletStatistics(); }
135
136
137  void useEqualityConstraints(bool choice=true)
138  { _with_equality_constraints = choice; };
139};
140
141#endif