bullet3 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +194 -0
  4. data/data/cube.urdf +22 -0
  5. data/data/plane.urdf +19 -0
  6. data/ext/bullet3/CMakeLists.txt +224 -0
  7. data/ext/bullet3/bullet3.cpp +34 -0
  8. data/ext/bullet3/collision/rb_collision.cpp +428 -0
  9. data/ext/bullet3/collision/rb_collision.hpp +87 -0
  10. data/ext/bullet3/collision/shapes/rb_collision_shape.cpp +485 -0
  11. data/ext/bullet3/collision/shapes/rb_collision_shape.hpp +5 -0
  12. data/ext/bullet3/constraints/rb_constraints.cpp +1310 -0
  13. data/ext/bullet3/constraints/rb_constraints.hpp +226 -0
  14. data/ext/bullet3/dynamics/rb_dynamics.cpp +862 -0
  15. data/ext/bullet3/dynamics/rb_dynamics.hpp +180 -0
  16. data/ext/bullet3/extconf.rb +57 -0
  17. data/ext/bullet3/io/rb_io.cpp +108 -0
  18. data/ext/bullet3/io/rb_io.hpp +40 -0
  19. data/ext/bullet3/linear_math/rb_matrix3x3.cpp +93 -0
  20. data/ext/bullet3/linear_math/rb_matrix3x3.hpp +5 -0
  21. data/ext/bullet3/linear_math/rb_quaternion.cpp +134 -0
  22. data/ext/bullet3/linear_math/rb_quaternion.hpp +5 -0
  23. data/ext/bullet3/linear_math/rb_transform.cpp +157 -0
  24. data/ext/bullet3/linear_math/rb_transform.hpp +34 -0
  25. data/ext/bullet3/linear_math/rb_vector3.cpp +123 -0
  26. data/ext/bullet3/linear_math/rb_vector3.hpp +5 -0
  27. data/ext/bullet3/multi_body/rb_multi_body.cpp +1000 -0
  28. data/ext/bullet3/multi_body/rb_multi_body.hpp +190 -0
  29. data/ext/bullet3/soft_body/rb_soft_body.cpp +720 -0
  30. data/ext/bullet3/soft_body/rb_soft_body.hpp +122 -0
  31. data/ext/bullet3/util/rb_debug_draw.cpp +250 -0
  32. data/ext/bullet3/util/rb_debug_draw.hpp +47 -0
  33. data/ext/bullet3/util/ruby_cpp_compat.hpp +29 -0
  34. data/ext/bullet3/util/type_conversions.hpp +107 -0
  35. data/ext/bullet3/vehicle/rb_vehicle.cpp +467 -0
  36. data/ext/bullet3/vehicle/rb_vehicle.hpp +115 -0
  37. data/lib/bullet3/collision.rb +6 -0
  38. data/lib/bullet3/constraints.rb +6 -0
  39. data/lib/bullet3/data.rb +39 -0
  40. data/lib/bullet3/debug_draw.rb +73 -0
  41. data/lib/bullet3/dynamics.rb +4 -0
  42. data/lib/bullet3/io.rb +110 -0
  43. data/lib/bullet3/linear_math/matrix3x3.rb +69 -0
  44. data/lib/bullet3/linear_math/quaternion.rb +187 -0
  45. data/lib/bullet3/linear_math/transform.rb +48 -0
  46. data/lib/bullet3/linear_math/vector3.rb +199 -0
  47. data/lib/bullet3/linear_math.rb +6 -0
  48. data/lib/bullet3/multi_body.rb +6 -0
  49. data/lib/bullet3/simulation.rb +1170 -0
  50. data/lib/bullet3/soft_body.rb +6 -0
  51. data/lib/bullet3/vehicle.rb +4 -0
  52. data/lib/bullet3/version.rb +5 -0
  53. data/lib/bullet3.rb +49 -0
  54. metadata +124 -0
@@ -0,0 +1,226 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+
5
+ #include <btBulletDynamicsCommon.h>
6
+ #include <rice/rice.hpp>
7
+
8
+ #include "../dynamics/rb_dynamics.hpp"
9
+
10
+ namespace bullet3 {
11
+ class TypedConstraint {
12
+ public:
13
+ virtual ~TypedConstraint() = default;
14
+
15
+ btTypedConstraint* get();
16
+ const btTypedConstraint* get() const;
17
+
18
+ Rice::Symbol constraint_type() const;
19
+ bool enabled() const;
20
+ bool set_enabled(bool enabled);
21
+ btScalar breaking_impulse_threshold() const;
22
+ btScalar set_breaking_impulse_threshold(btScalar threshold);
23
+ btScalar debug_draw_size() const;
24
+ btScalar set_debug_draw_size(btScalar size);
25
+ void enable_feedback(bool enabled);
26
+ bool needs_feedback() const;
27
+ btScalar applied_impulse() const;
28
+
29
+ protected:
30
+ explicit TypedConstraint(std::unique_ptr<btTypedConstraint> constraint);
31
+
32
+ private:
33
+ std::unique_ptr<btTypedConstraint> constraint_;
34
+ };
35
+
36
+ class Point2PointConstraint : public TypedConstraint {
37
+ public:
38
+ Point2PointConstraint(VALUE rigid_body_a, VALUE pivot_a);
39
+ Point2PointConstraint(VALUE rigid_body_a, VALUE rigid_body_b, VALUE pivot_a, VALUE pivot_b);
40
+
41
+ btVector3 pivot_in_a() const;
42
+ btVector3 set_pivot_in_a(Rice::Object pivot);
43
+ btVector3 pivot_in_b() const;
44
+ btVector3 set_pivot_in_b(Rice::Object pivot);
45
+ };
46
+
47
+ class HingeConstraint : public TypedConstraint {
48
+ public:
49
+ HingeConstraint(VALUE rigid_body_a, VALUE pivot_a, VALUE axis_a, bool use_reference_frame_a);
50
+ HingeConstraint(VALUE rigid_body_a,
51
+ VALUE rigid_body_b,
52
+ VALUE pivot_a,
53
+ VALUE pivot_b,
54
+ VALUE axis_a,
55
+ VALUE axis_b,
56
+ bool use_reference_frame_a);
57
+
58
+ btScalar angle();
59
+ btScalar lower_limit() const;
60
+ btScalar upper_limit() const;
61
+ bool angular_motor_enabled();
62
+ btScalar motor_target_velocity();
63
+ btScalar max_motor_impulse();
64
+ void enable_angular_motor(bool enabled, btScalar target_velocity, btScalar max_motor_impulse);
65
+ void set_limit(btScalar low, btScalar high, btScalar softness, btScalar bias_factor, btScalar relaxation_factor);
66
+ bullet3::Transform frame_a() const;
67
+ bullet3::Transform frame_b() const;
68
+ };
69
+
70
+ class FixedConstraint : public TypedConstraint {
71
+ public:
72
+ FixedConstraint(VALUE rigid_body_a, VALUE rigid_body_b, VALUE frame_a, VALUE frame_b);
73
+ };
74
+
75
+ class SliderConstraint : public TypedConstraint {
76
+ public:
77
+ SliderConstraint(VALUE rigid_body_b, VALUE frame_b, bool use_linear_reference_frame_a);
78
+ SliderConstraint(VALUE rigid_body_a, VALUE rigid_body_b, VALUE frame_a, VALUE frame_b, bool use_linear_reference_frame_a);
79
+
80
+ bullet3::Transform frame_a() const;
81
+ bullet3::Transform frame_b() const;
82
+ void set_frames(VALUE frame_a, VALUE frame_b);
83
+ btScalar lower_linear_limit();
84
+ btScalar set_lower_linear_limit(btScalar limit);
85
+ btScalar upper_linear_limit();
86
+ btScalar set_upper_linear_limit(btScalar limit);
87
+ btScalar lower_angular_limit();
88
+ btScalar set_lower_angular_limit(btScalar limit);
89
+ btScalar upper_angular_limit();
90
+ btScalar set_upper_angular_limit(btScalar limit);
91
+ btScalar linear_position() const;
92
+ btScalar angular_position() const;
93
+ bool powered_linear_motor();
94
+ bool set_powered_linear_motor(bool enabled);
95
+ btScalar target_linear_motor_velocity();
96
+ btScalar set_target_linear_motor_velocity(btScalar velocity);
97
+ btScalar max_linear_motor_force();
98
+ btScalar set_max_linear_motor_force(btScalar force);
99
+ bool powered_angular_motor();
100
+ bool set_powered_angular_motor(bool enabled);
101
+ btScalar target_angular_motor_velocity();
102
+ btScalar set_target_angular_motor_velocity(btScalar velocity);
103
+ btScalar max_angular_motor_force();
104
+ btScalar set_max_angular_motor_force(btScalar force);
105
+ };
106
+
107
+ class ConeTwistConstraint : public TypedConstraint {
108
+ public:
109
+ ConeTwistConstraint(VALUE rigid_body_a, VALUE frame_a);
110
+ ConeTwistConstraint(VALUE rigid_body_a, VALUE rigid_body_b, VALUE frame_a, VALUE frame_b);
111
+
112
+ void set_limit(btScalar swing_span1, btScalar swing_span2, btScalar twist_span, btScalar softness, btScalar bias_factor, btScalar relaxation_factor);
113
+ btScalar swing_span1() const;
114
+ btScalar swing_span2() const;
115
+ btScalar twist_span() const;
116
+ btScalar limit_softness() const;
117
+ btScalar bias_factor() const;
118
+ btScalar relaxation_factor() const;
119
+ btScalar twist_angle() const;
120
+ bool angular_only() const;
121
+ bool set_angular_only(bool angular_only);
122
+ btScalar damping() const;
123
+ btScalar set_damping(btScalar damping);
124
+ bool motor_enabled() const;
125
+ void enable_motor(bool enabled);
126
+ btScalar max_motor_impulse() const;
127
+ btScalar set_max_motor_impulse(btScalar impulse);
128
+ btQuaternion motor_target() const;
129
+ btQuaternion set_motor_target(Rice::Object target);
130
+ bullet3::Transform frame_a() const;
131
+ bullet3::Transform frame_b() const;
132
+ };
133
+
134
+ class Generic6DofConstraint : public TypedConstraint {
135
+ public:
136
+ Generic6DofConstraint(VALUE rigid_body_b, VALUE frame_b, bool use_linear_reference_frame_b);
137
+ Generic6DofConstraint(VALUE rigid_body_a, VALUE rigid_body_b, VALUE frame_a, VALUE frame_b, bool use_linear_reference_frame_a);
138
+
139
+ bullet3::Transform frame_a() const;
140
+ bullet3::Transform frame_b() const;
141
+ void set_frames(VALUE frame_a, VALUE frame_b);
142
+ btVector3 linear_lower_limit() const;
143
+ btVector3 set_linear_lower_limit(Rice::Object limit);
144
+ btVector3 linear_upper_limit() const;
145
+ btVector3 set_linear_upper_limit(Rice::Object limit);
146
+ btVector3 angular_lower_limit() const;
147
+ btVector3 set_angular_lower_limit(Rice::Object limit);
148
+ btVector3 angular_upper_limit() const;
149
+ btVector3 set_angular_upper_limit(Rice::Object limit);
150
+ void set_limit(int axis, btScalar low, btScalar high);
151
+ bool limited(int axis) const;
152
+ btVector3 axis(int axis) const;
153
+ btScalar angle(int axis) const;
154
+ btScalar relative_pivot_position(int axis) const;
155
+ bool use_frame_offset() const;
156
+ bool set_use_frame_offset(bool enabled);
157
+ bool use_linear_reference_frame_a() const;
158
+ bool set_use_linear_reference_frame_a(bool enabled);
159
+ void set_axis(Rice::Object axis1, Rice::Object axis2);
160
+ };
161
+
162
+ class Generic6DofSpring2Constraint : public TypedConstraint {
163
+ public:
164
+ Generic6DofSpring2Constraint(VALUE rigid_body_b, VALUE frame_b, int rotate_order);
165
+ Generic6DofSpring2Constraint(VALUE rigid_body_a, VALUE rigid_body_b, VALUE frame_a, VALUE frame_b, int rotate_order);
166
+
167
+ bullet3::Transform frame_a() const;
168
+ bullet3::Transform frame_b() const;
169
+ void set_frames(VALUE frame_a, VALUE frame_b);
170
+ btVector3 linear_lower_limit() const;
171
+ btVector3 set_linear_lower_limit(Rice::Object limit);
172
+ btVector3 linear_upper_limit() const;
173
+ btVector3 set_linear_upper_limit(Rice::Object limit);
174
+ btVector3 angular_lower_limit() const;
175
+ btVector3 set_angular_lower_limit(Rice::Object limit);
176
+ btVector3 angular_upper_limit() const;
177
+ btVector3 set_angular_upper_limit(Rice::Object limit);
178
+ void set_limit(int axis, btScalar low, btScalar high);
179
+ bool limited(int axis);
180
+ btVector3 axis(int axis) const;
181
+ btScalar angle(int axis) const;
182
+ btScalar relative_pivot_position(int axis) const;
183
+ int rotation_order();
184
+ int set_rotation_order(int rotate_order);
185
+ void set_axis(Rice::Object axis1, Rice::Object axis2);
186
+ void enable_motor(int axis, bool enabled);
187
+ void set_servo(int axis, bool enabled);
188
+ void set_target_velocity(int axis, btScalar velocity);
189
+ void set_servo_target(int axis, btScalar target);
190
+ void set_max_motor_force(int axis, btScalar force);
191
+ void enable_spring(int axis, bool enabled);
192
+ void set_stiffness(int axis, btScalar stiffness, bool limit_if_needed);
193
+ void set_damping(int axis, btScalar damping, bool limit_if_needed);
194
+ void set_equilibrium_point();
195
+ void set_axis_equilibrium_point(int axis);
196
+ void set_axis_equilibrium_point_value(int axis, btScalar value);
197
+ };
198
+
199
+ class GearConstraint : public TypedConstraint {
200
+ public:
201
+ GearConstraint(VALUE rigid_body_a, VALUE rigid_body_b, VALUE axis_a, VALUE axis_b, btScalar ratio);
202
+
203
+ btVector3 axis_a() const;
204
+ btVector3 set_axis_a(Rice::Object axis);
205
+ btVector3 axis_b() const;
206
+ btVector3 set_axis_b(Rice::Object axis);
207
+ btScalar ratio() const;
208
+ btScalar set_ratio(btScalar ratio);
209
+ };
210
+
211
+ class Hinge2Constraint : public TypedConstraint {
212
+ public:
213
+ Hinge2Constraint(VALUE rigid_body_a, VALUE rigid_body_b, VALUE anchor, VALUE axis1, VALUE axis2);
214
+
215
+ btVector3 anchor();
216
+ btVector3 anchor2();
217
+ btVector3 axis1();
218
+ btVector3 axis2();
219
+ btScalar angle1();
220
+ btScalar angle2();
221
+ void set_upper_limit(btScalar limit);
222
+ void set_lower_limit(btScalar limit);
223
+ };
224
+ } // namespace bullet3
225
+
226
+ void Init_Constraints(Rice::Module rb_mBullet);