mirror of
https://github.com/bulletphysics/bullet3
synced 2024-12-14 05:40:05 +00:00
aa4d119f98
an example for the example browser will follow. thanks to Thomas Buschmann
51 lines
1.7 KiB
C++
51 lines
1.7 KiB
C++
#ifndef BTMULTIBODYTREECREATOR_HPP_
|
|
#define BTMULTIBODYTREECREATOR_HPP_
|
|
|
|
#include <vector>
|
|
|
|
#include "BulletInverseDynamics/IDConfig.hpp"
|
|
#include "MultiBodyTreeCreator.hpp"
|
|
#include "BulletDynamics/Featherstone/btMultiBody.h"
|
|
|
|
namespace btInverseDynamics {
|
|
|
|
/// MultiBodyTreeCreator implementation for converting
|
|
/// a btMultiBody forward dynamics model into a MultiBodyTree inverse dynamics model
|
|
class btMultiBodyTreeCreator : public MultiBodyTreeCreator {
|
|
public:
|
|
/// ctor
|
|
btMultiBodyTreeCreator();
|
|
/// dtor
|
|
~btMultiBodyTreeCreator() {}
|
|
/// extract model data from a btMultiBody
|
|
/// @param btmb pointer to btMultiBody to convert
|
|
/// @param verbose if true, some information is printed
|
|
/// @return -1 on error, 0 on success
|
|
int createFromBtMultiBody(const btMultiBody *btmb, const bool verbose = false);
|
|
/// \copydoc MultiBodyTreeCreator::getNumBodies
|
|
int getNumBodies(int *num_bodies) const;
|
|
///\copydoc MultiBodyTreeCreator::getBody
|
|
int getBody(int body_index, int *parent_index, JointType *joint_type,
|
|
vec3 *parent_r_parent_body_ref, mat33 *body_T_parent_ref, vec3 *body_axis_of_motion,
|
|
idScalar *mass, vec3 *body_r_body_com, mat33 *body_I_body, int *user_int,
|
|
void **user_ptr) const;
|
|
|
|
private:
|
|
// internal struct holding data extracted from btMultiBody
|
|
struct LinkData {
|
|
int parent_index;
|
|
JointType joint_type;
|
|
vec3 parent_r_parent_body_ref;
|
|
mat33 body_T_parent_ref;
|
|
vec3 body_axis_of_motion;
|
|
idScalar mass;
|
|
vec3 body_r_body_com;
|
|
mat33 body_I_body;
|
|
};
|
|
std::vector<LinkData> m_data;
|
|
bool m_initialized;
|
|
};
|
|
}
|
|
|
|
#endif // BTMULTIBODYTREECREATOR_HPP_
|