#ifndef __SurfacePatch_H__ #define __SurfacePatch_H__ #include #include #include "IntegralVector3.h" #include "VolumeIterator.h" namespace Ogre { enum NormalGenerationMethod { SIMPLE, CENTRAL_DIFFERENCE, SOBEL }; class SurfaceVertex; typedef std::list::iterator SurfaceVertexIterator; class SurfaceTriangle; typedef std::list::iterator SurfaceTriangleIterator; class SurfaceEdge; typedef std::list::iterator SurfaceEdgeIterator; class SurfacePatch { public: SurfacePatch(); ~SurfacePatch(); void beginDefinition(void); void endDefinition(void); void addTriangle(const SurfaceVertex& v0,const SurfaceVertex& v1,const SurfaceVertex& v2); SurfaceVertexIterator findVertex(const SurfaceVertex& vertex); SurfaceEdgeIterator findEdge(const SurfaceVertexIterator& source, const SurfaceVertexIterator& target); //SurfaceVertexIterator findTriangle(const SurfaceTriangle& triangle); void getVertexAndIndexData(std::vector& vertexData, std::vector& indexData); void computeNormalsFromVolume(VolumeIterator volIter); void computeOtherHalfEdges(void); #ifdef BLAH bool decimate(void); bool canCollapseEdge(SurfaceVertex target, SurfaceVertex other); void collapseEdge(SurfaceEdgeIterator edgeIter); #endif #ifdef BLAH2 bool decimate2(void); bool canCollapseEdge2(SurfaceVertex target, SurfaceVertex other); void collapseEdge2(SurfaceEdgeIterator edgeIter); bool matchesAll(uchar target, uchar other); #endif bool decimate3(void); //bool verticesArePlanar(SurfaceVertexIterator iterCurrentVertex); UIntVector3 m_v3dOffset; private: std::list m_listVertices; std::list m_listTriangles; std::list m_listEdges; //std::vector m_vecVertexData; //std::vector m_vecIndexData; uint m_uTrianglesAdded; uint m_uVerticesAdded; long int* vertexIndices; //UIntVector3 m_v3dOffset; }; } #endif /* __SurfacePatch_H__ */