From cabc98862552a86808dd244eb7692f200ac7d425 Mon Sep 17 00:00:00 2001 From: David Williams Date: Sun, 23 Sep 2007 23:54:10 +0000 Subject: [PATCH] Cleaning up decimation, moving to sets. --- include/SurfaceEdge.h | 8 ++++---- include/SurfaceTriangle.h | 16 +++++++++++----- source/SurfaceEdge.cpp | 25 +++++++++++++------------ source/SurfacePatch.cpp | 4 ++-- source/SurfaceTriangle.cpp | 17 +++++++++++------ 5 files changed, 41 insertions(+), 29 deletions(-) diff --git a/include/SurfaceEdge.h b/include/SurfaceEdge.h index 570c34aa..d7c83a14 100644 --- a/include/SurfaceEdge.h +++ b/include/SurfaceEdge.h @@ -35,6 +35,9 @@ namespace Ogre { public: + friend bool operator == (const SurfaceEdge& lhs, const SurfaceEdge& rhs); + friend bool operator < (const SurfaceEdge& lhs, const SurfaceEdge& rhs); + //int crud; SurfaceVertexIterator target; @@ -52,10 +55,7 @@ namespace Ogre std::string toString(void); bool isDegenerate(void); - }; - - bool operator == (const SurfaceEdge& lhs, const SurfaceEdge& rhs); - bool operator < (const SurfaceEdge& lhs, const SurfaceEdge& rhs); + }; } #endif diff --git a/include/SurfaceTriangle.h b/include/SurfaceTriangle.h index 916c2d88..cbb095fd 100644 --- a/include/SurfaceTriangle.h +++ b/include/SurfaceTriangle.h @@ -34,16 +34,22 @@ namespace Ogre class SurfaceTriangle { public: - - SurfaceEdgeIterator edge; - SurfaceTriangle(); + friend bool operator == (const SurfaceTriangle& lhs, const SurfaceTriangle& rhs); + friend bool operator < (const SurfaceTriangle& lhs, const SurfaceTriangle& rhs); + + const SurfaceEdgeIterator& getEdge(void) const; + + void setEdge(const SurfaceEdgeIterator& edgeToSet); + //std::string toString(void); + + private: + SurfaceEdgeIterator edge; }; - bool operator == (const SurfaceTriangle& lhs, const SurfaceTriangle& rhs); - bool operator < (const SurfaceTriangle& lhs, const SurfaceTriangle& rhs); + //bool operator < (const SurfaceTriangleIterator& lhs, const SurfaceTriangleIterator& rhs); } diff --git a/source/SurfaceEdge.cpp b/source/SurfaceEdge.cpp index ac4aa91b..9b7b509d 100644 --- a/source/SurfaceEdge.cpp +++ b/source/SurfaceEdge.cpp @@ -15,9 +15,8 @@ namespace Ogre { return ( - (lhs.target == rhs.target) && - //(lhs.triangle == rhs.triangle) - (lhs.otherHalfEdge == rhs.otherHalfEdge) + ((*lhs.target) == (*rhs.target)) && + ((*lhs.otherHalfEdge->target) == (*rhs.otherHalfEdge->target)) ); } @@ -28,14 +27,16 @@ namespace Ogre bool operator < (const SurfaceEdge& lhs, const SurfaceEdge& rhs) { - if(lhs.target == rhs.target) - { - if(lhs.otherHalfEdge->target == rhs.otherHalfEdge->target) - { - return false; - } - return (*(lhs.otherHalfEdge->target) < *(rhs.otherHalfEdge->target)); - } - return (*(lhs.target) < *(rhs.target)); + if ((*lhs.target) < (*rhs.target)) + return true; + if ((*rhs.target) < (*lhs.target)) + return false; + + if ((*lhs.otherHalfEdge->target) < (*rhs.otherHalfEdge->target)) + return true; + if ((*rhs.otherHalfEdge->target) < (*lhs.otherHalfEdge->target)) + return false; + + return false; } } diff --git a/source/SurfacePatch.cpp b/source/SurfacePatch.cpp index 35083fb0..9f925ea0 100644 --- a/source/SurfacePatch.cpp +++ b/source/SurfacePatch.cpp @@ -87,7 +87,7 @@ namespace Ogre SurfaceTriangle triangle; - triangle.edge = v0v1Iter; + triangle.setEdge(v0v1Iter); //m_listTriangles.push_back(triangle); //SurfaceTriangleIterator iterTriangle = m_listTriangles.end(); @@ -273,7 +273,7 @@ namespace Ogre std::vector::iterator iterVertex; SurfaceEdgeIterator edgeIter; - edgeIter = iterTriangles->edge; + edgeIter = iterTriangles->getEdge(); //LogManager::getSingleton().logMessage("Edge Target " + StringConverter::toString(edgeIter->target->position.x) + "," + StringConverter::toString(edgeIter->target->position.y) + "," + StringConverter::toString(edgeIter->target->position.z)); iterVertex = find(vertexData.begin(), vertexData.end(), *(edgeIter->target)); //LogManager::getSingleton().logMessage(""); diff --git a/source/SurfaceTriangle.cpp b/source/SurfaceTriangle.cpp index 904a7d0c..e9eb92cd 100644 --- a/source/SurfaceTriangle.cpp +++ b/source/SurfaceTriangle.cpp @@ -8,6 +8,16 @@ namespace Ogre { } + const SurfaceEdgeIterator& SurfaceTriangle::getEdge(void) const + { + return edge; + } + + void SurfaceTriangle::setEdge(const SurfaceEdgeIterator& edgeToSet) + { + edge = edgeToSet; + } + /*std::string SurfaceTriangle::toString(void) { std::stringstream ss; @@ -35,16 +45,11 @@ namespace Ogre bool operator == (const SurfaceTriangle& lhs, const SurfaceTriangle& rhs) { - return lhs.edge == rhs.edge; + return (*lhs.edge == *rhs.edge); } bool operator < (const SurfaceTriangle& lhs, const SurfaceTriangle& rhs) { return (*lhs.edge < *rhs.edge); } - - /*bool operator < (const SurfaceTriangleIterator& lhs, const SurfaceTriangleIterator& rhs) - { - return (*lhs) < (*rhs); - }*/ }