00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef ODEGEOM_H
00016 #define ODEGEOM_H
00017
00018 #include "pandabase.h"
00019 #include "typedObject.h"
00020 #include "luse.h"
00021 #include "bitMask.h"
00022
00023 #include "ode_includes.h"
00024 #include "odeSpace.h"
00025 #include "odeBody.h"
00026
00027 class OdeBoxGeom;
00028 class OdeCappedCylinderGeom;
00029
00030 class OdeCylinderGeom;
00031
00032 class OdePlaneGeom;
00033 class OdeRayGeom;
00034 class OdeSphereGeom;
00035 class OdeTriMeshGeom;
00036 class OdeSimpleSpace;
00037 class OdeHashSpace;
00038 class OdeQuadTreeSpace;
00039
00040 class OdeUtil;
00041 class OdeCollisionEntry;
00042
00043
00044
00045
00046
00047 class EXPCL_PANDAODE OdeGeom : public TypedObject {
00048 friend class OdeContactGeom;
00049 friend class OdeSpace;
00050 friend class OdeUtil;
00051 friend class OdeCollisionEntry;
00052
00053 protected:
00054 OdeGeom(dGeomID id);
00055
00056 PUBLISHED:
00057 enum GeomClass { GC_sphere = 0,
00058 GC_box,
00059 GC_capped_cylinder,
00060 GC_cylinder,
00061 GC_plane,
00062 GC_ray,
00063
00064
00065 GC_tri_mesh = 8,
00066
00067
00068 GC_simple_space = 10,
00069 GC_hash_space,
00070 GC_quad_tree_space,
00071 };
00072
00073 virtual ~OdeGeom();
00074 void destroy();
00075 INLINE bool is_empty() const;
00076 INLINE dGeomID get_id() const;
00077
00078
00079 INLINE void set_body(OdeBody &body);
00080 INLINE bool has_body() const;
00081 INLINE OdeBody get_body() const;
00082 INLINE void set_position(dReal x, dReal y, dReal z);
00083 INLINE void set_position(const LVecBase3f &pos);
00084 INLINE void set_rotation(const LMatrix3f &r);
00085 INLINE void set_quaternion(const LQuaternionf &q);
00086 INLINE LPoint3f get_position() const;
00087 INLINE LMatrix3f get_rotation() const;
00088 INLINE LQuaternionf get_quaternion() const;
00089 INLINE void get_AABB(LVecBase3f &min, LVecBase3f &max) const;
00090 INLINE int is_space();
00091 INLINE int get_class() const;
00092 INLINE void set_category_bits(const BitMask32 &bits);
00093 INLINE void set_collide_bits(const BitMask32 &bits);
00094 INLINE BitMask32 get_category_bits();
00095 INLINE BitMask32 get_collide_bits();
00096 INLINE void enable();
00097 INLINE void disable();
00098 INLINE int is_enabled();
00099 INLINE void set_offset_position(dReal x, dReal y, dReal z);
00100 INLINE void set_offset_position(const LVecBase3f &pos);
00101 INLINE void set_offset_rotation(const LMatrix3f &r);
00102 INLINE void set_offset_quaternion(const LQuaternionf &q);
00103 INLINE void set_offset_world_position(dReal x, dReal y, dReal z);
00104 INLINE void set_offset_world_position(const LVecBase3f &pos);
00105 INLINE void set_offset_world_rotation(const LMatrix3f &r);
00106 INLINE void set_offset_world_quaternion(const LQuaternionf &q);
00107 INLINE void clear_offset();
00108 INLINE int is_offset();
00109 INLINE LPoint3f get_offset_position() const;
00110 INLINE LMatrix3f get_offset_rotation() const;
00111 INLINE LQuaternionf get_offset_quaternion() const;
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121 OdeSpace get_space() const;
00122
00123 virtual void write(ostream &out = cout, unsigned int indent=0) const;
00124 operator bool () const;
00125 INLINE int compare_to(const OdeGeom &other) const;
00126
00127 OdeBoxGeom convert_to_box() const;
00128 OdeCappedCylinderGeom convert_to_capped_cylinder() const;
00129
00130 OdeCylinderGeom convert_to_cylinder() const;
00131
00132 OdePlaneGeom convert_to_plane() const;
00133 OdeRayGeom convert_to_ray() const;
00134 OdeSphereGeom convert_to_sphere() const;
00135 OdeTriMeshGeom convert_to_tri_mesh() const;
00136 OdeSimpleSpace convert_to_simple_space() const;
00137 OdeHashSpace convert_to_hash_space() const;
00138 OdeQuadTreeSpace convert_to_quad_tree_space() const;
00139
00140
00141
00142 public:
00143 INLINE static int get_geom_class() { return -1; };
00144
00145 protected:
00146 dGeomID _id;
00147
00148
00149 public:
00150 static TypeHandle get_class_type() {
00151 return _type_handle;
00152 }
00153 static void init_type() {
00154 TypedObject::init_type();
00155 register_type(_type_handle, "OdeGeom",
00156 TypedObject::get_class_type());
00157 }
00158 virtual TypeHandle get_type() const {
00159 return get_class_type();
00160 }
00161 virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
00162
00163 private:
00164 static TypeHandle _type_handle;
00165 };
00166
00167 #include "odeGeom.I"
00168
00169 #endif