Panda3D
|
00001 // Filename: odeJoint.h 00002 // Created by: joswilso (27Dec06) 00003 // 00004 //////////////////////////////////////////////////////////////////// 00005 // 00006 // PANDA 3D SOFTWARE 00007 // Copyright (c) Carnegie Mellon University. All rights reserved. 00008 // 00009 // All use of this software is subject to the terms of the revised BSD 00010 // license. You should have received a copy of this license along 00011 // with this source code in a file named "LICENSE." 00012 // 00013 //////////////////////////////////////////////////////////////////// 00014 00015 #ifndef ODEJOINT_H 00016 #define ODEJOINT_H 00017 00018 #include "pandabase.h" 00019 #include "typedObject.h" 00020 #include "luse.h" 00021 00022 #include "ode_includes.h" 00023 #include "odeWorld.h" // Needed for derived classes 00024 #include "odeJointGroup.h" 00025 00026 class EXPCL_PANDAODE OdeJointFeedback : public dJointFeedback { 00027 PUBLISHED: 00028 INLINE const LVector3f get_force1() const { return LVector3f(f1[0], f1[1], f1[2]); }; 00029 INLINE const LVector3f get_force2() const { return LVector3f(f2[0], f2[1], f2[2]); }; 00030 INLINE const LVector3f get_torque1() const { return LVector3f(t1[0], t1[1], t1[2]); }; 00031 INLINE const LVector3f get_torque2() const { return LVector3f(t2[0], t2[1], t2[2]); }; 00032 }; 00033 00034 // Strange, we should be forced to include this by get_body() 00035 class OdeBody; 00036 00037 class OdeBallJoint; 00038 class OdeHingeJoint; 00039 class OdeSliderJoint; 00040 class OdeContactJoint; 00041 class OdeUniversalJoint; 00042 class OdeHinge2Joint; 00043 class OdeFixedJoint; 00044 class OdeNullJoint; 00045 class OdeAMotorJoint; 00046 class OdeLMotorJoint; 00047 class OdePlane2dJoint; 00048 00049 //////////////////////////////////////////////////////////////////// 00050 // Class : OdeJoint 00051 // Description : 00052 //////////////////////////////////////////////////////////////////// 00053 class EXPCL_PANDAODE OdeJoint : public TypedObject { 00054 friend class OdeBody; 00055 friend class OdeUtil; 00056 00057 public: 00058 OdeJoint(); 00059 00060 protected: 00061 OdeJoint(dJointID id); 00062 00063 PUBLISHED: 00064 enum JointType { JT_none = 0, /* or "unknown" */ 00065 JT_ball, 00066 JT_hinge, 00067 JT_slider, 00068 JT_contact, 00069 JT_universal, 00070 JT_hinge2, 00071 JT_fixed, 00072 JT_null, 00073 JT_a_motor, 00074 JT_l_motor, 00075 JT_plane2d }; 00076 00077 virtual ~OdeJoint(); 00078 void destroy(); 00079 INLINE bool is_empty() const; 00080 INLINE dJointID get_id() const; 00081 00082 /* INLINE void set_data(void *data); */ 00083 /* INLINE void *get_data(); */ 00084 INLINE int get_joint_type() const; 00085 OdeBody get_body(int index) const; 00086 INLINE void set_feedback(OdeJointFeedback *); 00087 INLINE void set_feedback(bool flag = true); 00088 INLINE OdeJointFeedback *get_feedback(); 00089 00090 void attach_bodies(const OdeBody &body1, const OdeBody &body2); 00091 void attach_body(const OdeBody &body, int index); 00092 void detach(); 00093 00094 virtual void write(ostream &out = cout, unsigned int indent=0) const; 00095 INLINE int compare_to(const OdeJoint &other) const; 00096 INLINE bool operator == (const OdeJoint &other) const; 00097 operator bool () const; 00098 00099 OdeBallJoint convert_to_ball() const; 00100 OdeHingeJoint convert_to_hinge() const; 00101 OdeSliderJoint convert_to_slider() const; 00102 OdeContactJoint convert_to_contact() const; 00103 OdeUniversalJoint convert_to_universal() const; 00104 OdeHinge2Joint convert_to_hinge2() const; 00105 OdeFixedJoint convert_to_fixed() const; 00106 OdeNullJoint convert_to_null() const; 00107 OdeAMotorJoint convert_to_a_motor() const; 00108 OdeLMotorJoint convert_to_l_motor() const; 00109 OdePlane2dJoint convert_to_plane2d() const; 00110 00111 protected: 00112 dJointID _id; 00113 00114 public: 00115 static TypeHandle get_class_type() { 00116 return _type_handle; 00117 } 00118 static void init_type() { 00119 TypedObject::init_type(); 00120 register_type(_type_handle, "OdeJoint", 00121 TypedObject::get_class_type()); 00122 } 00123 virtual TypeHandle get_type() const { 00124 return get_class_type(); 00125 } 00126 virtual TypeHandle force_init_type() {init_type(); return get_class_type();} 00127 00128 private: 00129 static TypeHandle _type_handle; 00130 }; 00131 00132 #include "odeJoint.I" 00133 00134 #endif