00001
00002
00003
00004
00005
00006
00007 #ifndef _RC_ARTICULATED_BODY_FWD_DYN_ALGO_H
00008 #define _RC_ARTICULATED_BODY_FWD_DYN_ALGO_H
00009
00010 #include <Physsim/Base.h>
00011 #include <Physsim/Constants.h>
00012 #include <Physsim/MatrixNN.h>
00013
00014 namespace Physsim {
00015
00016 class RCArticulatedBody;
00017
00019 class RCArticulatedBodyFwdDynAlgo : public Base
00020 {
00021 public:
00022 RCArticulatedBodyFwdDynAlgo() { }
00023 virtual ~RCArticulatedBodyFwdDynAlgo() {}
00024 virtual void clone(BasePtr& cloned, bimap<BasePtr, BasePtr>* obj_map = NULL) const;
00025 virtual void load_state(BaseConstPtr object, bimap<BasePtr, BasePtr>* correspondence = NULL);
00026 virtual void save_state(BasePtr object, bimap<BasePtr, BasePtr>* correspondence = NULL) const;
00027
00029
00036 virtual void calc_fwd_dyn(RCArticulatedBodyPtr body, ReferenceFrameType rftype) = 0;
00037
00039 virtual void apply_impulse(RCArticulatedBodyPtr body, const Vector3& j, const Vector3& k, const Vector3& contact_point, RigidBodyPtr link) = 0;
00040
00042 ReferenceFrameType get_last_ref_frame() const { return _last_ref_frame; }
00043
00044 protected:
00045
00047
00051 ReferenceFrameType _last_ref_frame;
00052
00053 };
00054 }
00055
00056 #endif
00057