| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- /**
- * PANDA 3D SOFTWARE
- * Copyright (c) Carnegie Mellon University. All rights reserved.
- *
- * All use of this software is subject to the terms of the revised BSD
- * license. You should have received a copy of this license along
- * with this source code in a file named "LICENSE."
- *
- * @file odeTriMeshData.h
- * @author joswilso
- * @date 2006-12-27
- */
- #ifndef ODETRIMESHDATA_H
- #define ODETRIMESHDATA_H
- #include "pandabase.h"
- #include "typedReferenceCount.h"
- #include "luse.h"
- #include "ode_includes.h"
- #include "nodePathCollection.h"
- #include "geomNode.h"
- #include "geomVertexData.h"
- #include "geomVertexReader.h"
- #include "geomTriangles.h"
- #include "geomTristrips.h"
- #include "config_ode.h"
- /**
- *
- */
- class EXPCL_PANDAODE OdeTriMeshData : public TypedReferenceCount {
- public:
- static void link_data(dGeomID id, PT(OdeTriMeshData) data);
- static PT(OdeTriMeshData) get_data(dGeomID id);
- static void unlink_data(dGeomID id);
- static void remove_data(OdeTriMeshData *data);
- static void print_data(const std::string &marker);
- private:
- typedef pmap<dGeomID, PT(OdeTriMeshData)> TriMeshDataMap;
- static TriMeshDataMap *_tri_mesh_data_map;
- static INLINE TriMeshDataMap &get_tri_mesh_data_map();
- PUBLISHED:
- enum DataType { DT_face_normals = 0,
- DT_last_transformation };
- OdeTriMeshData(const NodePath& model, bool use_normals = false);
- virtual ~OdeTriMeshData();
- void destroy();
- // INLINE void set(int data_id, void* in_data); INLINE void* get(int
- // data_id); INLINE void get_buffer(unsigned char** buf, int* buf_len)
- // const; INLINE void set_buffer(unsigned char* buf); INLINE void update();
- virtual void write(std::ostream &out = std::cout, unsigned int indent=0) const;
- void write_faces(std::ostream &out) const;
- public:
- INLINE void build_single(const void* vertices, int vertex_stride, int vertex_count, \
- const void* indices, int index_count, int tri_stride);
- INLINE void build_single1(const void* vertices, int vertex_stride, int vertex_count, \
- const void* indices, int index_count, int tri_stride, \
- const void* normals);
- INLINE void build_double(const void* vertices, int vertex_stride, int vertex_count, \
- const void* indices, int index_count, int tri_stride);
- INLINE void build_double1(const void* vertices, int vertex_stride, int vertex_count, \
- const void* indices, int index_count, int tri_stride, \
- const void* normals);
- // Temporarily commenting these two out--ODE had an API change from (int
- // *indices) to (dTriIndex *indices). But since there's no #define that
- // indicates the ODE version, we don't have any way to automatically put the
- // right symbol in here. However, we're not using these methods right now
- // anyway.
- /*
- INLINE void build_simple(const dReal* vertices, int vertex_count, \
- const int* indices, int index_count);
- INLINE void build_simple1(const dReal* vertices, int vertex_count, \
- const int* indices, int index_count, \
- const int* normals);
- */
- INLINE void preprocess();
- INLINE dTriMeshDataID get_id() const;
- private:
- void process_model(const NodePath& model, bool &use_normals);
- void process_geom_node(const GeomNode *geomNode);
- void process_geom(const Geom *geom);
- void process_primitive(const GeomPrimitive *primitive,
- CPT(GeomVertexData) vData);
- void analyze(const GeomNode *geomNode);
- void analyze(const Geom *geom);
- void analyze(const GeomPrimitive *geom);
- OdeTriMeshData(const OdeTriMeshData &other);
- void operator = (const OdeTriMeshData &other);
- protected:
- struct StridedVertex {
- dReal Vertex[3];
- };
- struct StridedTri {
- int Indices[3];
- };
- struct FaceNormal {
- dVector3 Normal;
- };
- dTriMeshDataID _id;
- StridedVertex *_vertices;
- StridedTri *_faces;
- FaceNormal *_normals;
- unsigned int _num_vertices;
- unsigned int _num_faces;
- public:
- static TypeHandle get_class_type() {
- return _type_handle;
- }
- static void init_type() {
- TypedReferenceCount::init_type();
- register_type(_type_handle, "OdeTriMeshData",
- TypedReferenceCount::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 "odeTriMeshData.I"
- #endif
|