00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_PMTOOLS_H__
00020 #define __CS_PMTOOLS_H__
00021
00028 class csVector3;
00029 class csPlane3;
00030 struct iPolygonMesh;
00031
00032 #include "csutil/array.h"
00033 #include "csgeom/polymesh.h"
00034
00038 struct csPolygonMeshEdge
00039 {
00040
00041
00042 int vt1, vt2;
00043
00044
00045 int poly1, poly2;
00046
00047
00048
00049
00050
00051 bool active;
00052 };
00053
00057 class csPolygonMeshTools
00058 {
00059 public:
00065 static void CalculateNormals (iPolygonMesh* mesh, csVector3* normals);
00066
00072 static void CalculatePlanes (iPolygonMesh* mesh, csPlane3* planes);
00073
00081 static csPolygonMeshEdge* CalculateEdges (iPolygonMesh*, int& num_edges);
00082
00088 static int CheckActiveEdges (csPolygonMeshEdge* edges, int num_edges,
00089 csPlane3* planes);
00090
00112 static void CalculateOutline (csPolygonMeshEdge* edges, int num_edges,
00113 csPlane3* planes, int num_vertices,
00114 const csVector3& pos,
00115 int* outline_edges, int& num_outline_edges,
00116 bool* outline_verts,
00117 float& valid_radius);
00118
00123 static bool IsMeshClosed (iPolygonMesh* polyMesh);
00124
00131 static void CloseMesh (iPolygonMesh* polyMesh,
00132 csArray<csMeshedPolygon>& newPolys, int*& vertidx, int& vertidx_len);
00133
00138 static void Triangulate (iPolygonMesh* polymesh,
00139 csTriangle*& tris, int& tri_count);
00140
00146 static void Polygonize (iPolygonMesh* polymesh,
00147 csMeshedPolygon*& polygons, int& poly_count);
00148 };
00149
00152 #endif // __CS_PMTOOLS_H__
00153