Program listing for file mechanics/src/collision/bullet/SiconosBulletCollisionManager.hpp#
Return to documentation for this file
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