QEM_ProgMesh.h

00001 
00027 #pragma once
00028 
00029 #include <math.h> // sqrt()
00030 #include <assert.h>
00031 #include <map>
00032 
00033 
00034 #include "QEM_Edge.h"
00035 #include "QEM_Face.h"
00036 
00037 typedef std::pair< int, int >       VertexPair;
00038 typedef std::map < VertexPair, int> VertexPairEdgeMap;
00039 
00040 namespace QEM {
00041 
00042 
00047 class ProgMesh
00048 {
00049         public:
00050 
00051     /*
00052      * Accessors
00053      */
00055         int  getNumVertices()     const { return vertices.size(); }
00056 
00058                 int  getNumFacesTotal()   const { return faces.size(); }
00059 
00061         int  getNumFacesVisible() const { return faces.getNumFacesVisible(); } 
00062 
00064         int  getNumEdges()        const { return edges.size(); }
00065 
00066     /*
00067      * Mutators
00068      */
00070         void addFace (int v1, int v2, int v3);
00071 
00073                 int addVertex (mfloat x, mfloat y, mfloat z);
00074 
00076         int addVertexWithColor (mfloat x, mfloat y, mfloat z, const RgbByte &color);
00077 
00078                 void recalculateCosts();
00079 
00081                 void doCollapse(int finalPolygonCount);
00082 
00084                 void doOneCollapse();
00085 
00088         void presize (int nTriangles, int nVertices);
00089 
00091                 void clear();
00092         
00094                 void draw() const;
00095 
00096         private: 
00097                 //  accessors
00098                 Vertex getOptimumPointForEdge (Edge &e);
00099                 bool willDegenerate (EdgePtr e1, EdgePtr e2) const;
00100 
00101                 //  mutators
00102                 int addOptimumPoint(Edge &deadEdge);
00103                 EdgePtr consolidateEdges (EdgePtr e1, EdgePtr e2, int deadFaceIndex);
00104                 EdgePtr addEdge (int faceIndex, int whichFace, int vFirst, int vSecond);
00105 
00106         void reportProgress (char *str);
00107 
00108                 // This is the real data in a ProgMesh
00109                 FaceArray faces;
00110                 EdgeList edges;
00111                 VertexArray vertices;
00112         
00113 
00114         typedef  std::map <int, RgbByte> ColorMap;
00115         ColorMap colorMap;
00116 
00117                 VertexPairEdgeMap vertexPairEdgeMap;
00118 };
00119 
00120 
00121 
00122 } // namespace QEM

Generated on Tue May 21 03:34:51 2002 for Archimedes by doxygen1.2.15