// Filename: odeGeom.h // Created by: joswilso (27Dec06) // //////////////////////////////////////////////////////////////////// // // PANDA 3D SOFTWARE // Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved // // All use of this software is subject to the terms of the Panda 3d // Software license. You should have received a copy of this license // along with this source code; you will also find a current copy of // the license at http://etc.cmu.edu/panda3d/docs/license/ . // // To contact the maintainers of this program write to // panda3d-general@lists.sourceforge.net . // //////////////////////////////////////////////////////////////////// #ifndef ODEGEOM_H #define ODEGEOM_H #include "pandabase.h" #include "typedObject.h" #include "luse.h" #include "bitMask.h" #include "ode_includes.h" #include "odeSpace.h" #include "odeBody.h" class OdeBoxGeom; class OdeCappedCylinderGeom; // class OdeConvexGeom; class OdeCylinderGeom; // class OdeHeightfieldGeom; class OdePlaneGeom; class OdeRayGeom; class OdeSphereGeom; class OdeTriMeshGeom; class OdeSimpleSpace; class OdeHashSpace; class OdeQuadTreeSpace; //////////////////////////////////////////////////////////////////// // Class : OdeGeom // Description : //////////////////////////////////////////////////////////////////// class EXPCL_PANDAODE OdeGeom : public TypedObject { friend class OdeContactGeom; friend class OdeSpace; protected: OdeGeom(dGeomID id); PUBLISHED: enum GeomClass { GC_sphere = 0, GC_box, GC_capped_cylinder, GC_cylinder, GC_plane, GC_ray, // GC_convex, // GC_geom_transform, GC_tri_mesh = 8, // GC_heightfield, GC_simple_space = 10, GC_hash_space, GC_quad_tree_space, }; virtual ~OdeGeom(); void destroy(); //INLINE void set_data(void* data); INLINE void set_body(OdeBody &body); INLINE OdeBody get_body() const; INLINE void set_position(dReal x, dReal y, dReal z); INLINE void set_position(const LVecBase3f &pos); INLINE void set_rotation(const LMatrix3f &r); INLINE void set_quaternion(const LQuaternionf &q); INLINE LPoint3f get_position() const; INLINE LMatrix3f get_rotation() const; INLINE LQuaternionf get_quaternion() const; INLINE void get_AABB(LVecBase3f &min, LVecBase3f &max) const; INLINE int is_space(); INLINE int get_class() const; INLINE void set_category_bits(const BitMask32 &bits); INLINE void set_collide_bits(const BitMask32 &bits); INLINE BitMask32 get_category_bits(); INLINE BitMask32 get_collide_bits(); INLINE void enable(); INLINE void disable(); INLINE int is_enabled(); INLINE void set_offset_position(dReal x, dReal y, dReal z); INLINE void set_offset_position(const LVecBase3f &pos); INLINE void set_offset_rotation(const LMatrix3f &r); INLINE void set_offset_quaternion(const LQuaternionf &q); INLINE void set_offset_world_position(dReal x, dReal y, dReal z); INLINE void set_offset_world_position(const LVecBase3f &pos); INLINE void set_offset_world_rotation(const LMatrix3f &r); INLINE void set_offset_world_quaternion(const LQuaternionf &q); INLINE void clear_offset(); INLINE int is_offset(); INLINE LPoint3f get_offset_position() const; INLINE LMatrix3f get_offset_rotation() const; INLINE LQuaternionf get_offset_quaternion() const; int get_default_surface_type() ; void set_default_surface_type( int surfaceType); static int get_default_surface_type(dGeomID id); OdeSpace get_space() const; virtual void write(ostream &out = cout, unsigned int indent=0) const; INLINE int compare_to(const OdeGeom &other) const; OdeBoxGeom convert_to_box() const; OdeCappedCylinderGeom convert_to_capped_cylinder() const; // OdeConvexGeom convert_to_convex() const; OdeCylinderGeom convert_to_cylinder() const; // OdeHeightfieldGeom convert_to_heightfield() const; OdePlaneGeom convert_to_plane() const; OdeRayGeom convert_to_ray() const; OdeSphereGeom convert_to_sphere() const; OdeTriMeshGeom convert_to_tri_mesh() const; OdeSimpleSpace convert_to_simple_space() const; OdeHashSpace convert_to_hash_space() const; OdeQuadTreeSpace convert_to_quad_tree_space() const; public: INLINE dGeomID get_id() const; INLINE static int get_geom_class() { return -1; }; protected: dGeomID _id; private: typedef pmap GeomSurfaceMap; static GeomSurfaceMap _geom_surface_map; public: static TypeHandle get_class_type() { return _type_handle; } static void init_type() { TypedObject::init_type(); register_type(_type_handle, "OdeGeom", TypedObject::get_class_type()); } virtual TypeHandle get_type() const { return get_class_type(); } virtual TypeHandle force_init_type() {init_type(); return get_class_type();} private: static TypeHandle _type_handle; }; #include "odeGeom.I" #endif