00001 /* 00002 File: VertexJoin.h 00003 00004 Function: Join up disconnected mesh. 00005 00006 Author: Andrew Willmott 00007 00008 Usage: Call Init() with the bounds of the scene, and current number 00009 of vertices. Then call AddVertex() to get new ids for each 00010 vertex in turn. When finished call GetFinalVertexList() to 00011 retrieve the new list of vertices. 00012 */ 00013 00014 #ifndef __VertexJoin__ 00015 #define __VertexJoin__ 00016 00017 #include "gcl/Geometry.h" 00018 00019 class VertexJoin 00020 { 00021 public: 00022 VertexJoin() : vertices(0), grid(0) {}; 00023 00024 Void Init(const Point &min, const Point &max, Int numVertices); 00025 00026 Int AddVertex(const Point &where, Int id = 0); 00027 // add the vertex: returns the index this vertex will have in 00028 // the final vertex list. If id is specified, vertices with 00029 // different ids will not be merged. 00030 00031 PointList *GetFinalVertexList(); 00032 00033 protected: 00034 Bool MatchVertex(const Point &a, const Point &b); 00035 // are these the same point in space? 00036 00037 Int *grid; // spatial grid storage 00038 Point min, max; 00039 Int cells[3]; // grid dimensions 00040 PointList *vertices; // list of new vertices 00041 IndexList nextList; // for list of points 00042 IndexList idList; // list of vertex ids 00043 // (vertices with different IDs won't be merged) 00044 }; 00045 00046 #endif