From 5d5a1310267980b540d7a1e99ce70b466a7c9797 Mon Sep 17 00:00:00 2001 From: rdb Date: Thu, 1 Oct 2009 18:17:35 +0000 Subject: [PATCH] More PyODE-like feedback system --- panda/src/ode/odeJoint.I | 14 ++++++++++++++ panda/src/ode/odeJoint.h | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/panda/src/ode/odeJoint.I b/panda/src/ode/odeJoint.I index 22f4be8bc9..93b30e8d06 100755 --- a/panda/src/ode/odeJoint.I +++ b/panda/src/ode/odeJoint.I @@ -52,6 +52,20 @@ get_joint_type() const { return dJointGetType(_id); } +INLINE void OdeJoint:: +set_feedback(bool flag) { + if (flag) { + if (dJointGetFeedback(_id) != NULL) { + return; + } + OdeJointFeedback* feedback = new OdeJointFeedback; + dJointSetFeedback(_id, (dJointFeedback*) feedback); + } else if (dJointFeedback* feedback = dJointGetFeedback(_id)) { + dJointSetFeedback(_id, NULL); + delete feedback; + } +} + INLINE void OdeJoint:: set_feedback(OdeJointFeedback *feedback) { dJointSetFeedback(_id, feedback); diff --git a/panda/src/ode/odeJoint.h b/panda/src/ode/odeJoint.h index 8aefa4ed9c..b3fcead63b 100755 --- a/panda/src/ode/odeJoint.h +++ b/panda/src/ode/odeJoint.h @@ -23,14 +23,13 @@ #include "odeWorld.h" // Needed for derived classes #include "odeJointGroup.h" -BEGIN_PUBLISH class EXPCL_PANDAODE OdeJointFeedback : public dJointFeedback { +PUBLISHED: INLINE const LVector3f get_force1() const { return LVector3f(f1[0], f1[1], f1[2]); }; INLINE const LVector3f get_force2() const { return LVector3f(f2[0], f2[1], f2[2]); }; INLINE const LVector3f get_torque1() const { return LVector3f(t1[0], t1[1], t1[2]); }; INLINE const LVector3f get_torque2() const { return LVector3f(t2[0], t2[1], t2[2]); }; }; -END_PUBLISH // Strange, we should be forced to include this by get_body() class OdeBody; @@ -85,6 +84,7 @@ PUBLISHED: INLINE int get_joint_type() const; OdeBody get_body(int index) const; INLINE void set_feedback(OdeJointFeedback *); + INLINE void set_feedback(bool flag = true); INLINE OdeJointFeedback *get_feedback(); void attach_bodies(const OdeBody &body1, const OdeBody &body2);