Cleaning up decimation.
This commit is contained in:
parent
f82aaad082
commit
780f52dd9e
@ -39,13 +39,6 @@ namespace Ogre
|
|||||||
friend bool operator == (const SurfaceEdge& lhs, const SurfaceEdge& rhs);
|
friend bool operator == (const SurfaceEdge& lhs, const SurfaceEdge& rhs);
|
||||||
friend bool operator < (const SurfaceEdge& lhs, const SurfaceEdge& rhs);
|
friend bool operator < (const SurfaceEdge& lhs, const SurfaceEdge& rhs);
|
||||||
|
|
||||||
//int crud;
|
|
||||||
|
|
||||||
SurfaceTriangleIterator triangle;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//FIXME - could use boost::optional for this?
|
|
||||||
|
|
||||||
std::string toString(void);
|
std::string toString(void);
|
||||||
|
|
||||||
@ -56,9 +49,11 @@ namespace Ogre
|
|||||||
const SurfaceEdgeIterator& getOtherHalfEdge(void);
|
const SurfaceEdgeIterator& getOtherHalfEdge(void);
|
||||||
const SurfaceEdgeIterator& getPreviousHalfEdge(void);
|
const SurfaceEdgeIterator& getPreviousHalfEdge(void);
|
||||||
const SurfaceEdgeIterator& getNextHalfEdge(void);
|
const SurfaceEdgeIterator& getNextHalfEdge(void);
|
||||||
|
const SurfaceTriangleIterator& getTriangle(void);
|
||||||
|
|
||||||
void setPreviousHalfEdge(const SurfaceEdgeIterator& previousHalfEdgeToSet);
|
void setPreviousHalfEdge(const SurfaceEdgeIterator& previousHalfEdgeToSet);
|
||||||
void setNextHalfEdge(const SurfaceEdgeIterator& nextHalfEdgeToSet);
|
void setNextHalfEdge(const SurfaceEdgeIterator& nextHalfEdgeToSet);
|
||||||
|
void setTriangle(const SurfaceTriangleIterator& triangleToSet);
|
||||||
|
|
||||||
void pairWithOtherHalfEdge(const SurfaceEdgeIterator& otherHalfEdgeToPair);
|
void pairWithOtherHalfEdge(const SurfaceEdgeIterator& otherHalfEdgeToPair);
|
||||||
|
|
||||||
@ -69,6 +64,8 @@ namespace Ogre
|
|||||||
SurfaceEdgeIterator previousHalfEdge;
|
SurfaceEdgeIterator previousHalfEdge;
|
||||||
SurfaceEdgeIterator nextHalfEdge;
|
SurfaceEdgeIterator nextHalfEdge;
|
||||||
SurfaceEdgeIterator otherHalfEdge;
|
SurfaceEdgeIterator otherHalfEdge;
|
||||||
|
|
||||||
|
SurfaceTriangleIterator triangle;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,10 +19,12 @@ namespace Ogre
|
|||||||
|
|
||||||
bool operator == (const SurfaceEdge& lhs, const SurfaceEdge& rhs)
|
bool operator == (const SurfaceEdge& lhs, const SurfaceEdge& rhs)
|
||||||
{
|
{
|
||||||
|
//Vertices are unique in the set, so if the two positions are the same the
|
||||||
|
//two iterators must also be the same. So we just check the iterators.
|
||||||
return
|
return
|
||||||
(
|
(
|
||||||
((*lhs.target) == (*rhs.target)) &&
|
(lhs.target == rhs.target) &&
|
||||||
((*lhs.source) == (*rhs.source))
|
(lhs.source == rhs.source)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,6 +35,8 @@ namespace Ogre
|
|||||||
|
|
||||||
bool operator < (const SurfaceEdge& lhs, const SurfaceEdge& rhs)
|
bool operator < (const SurfaceEdge& lhs, const SurfaceEdge& rhs)
|
||||||
{
|
{
|
||||||
|
//Unlike the equality operator, we can't compare iterators.
|
||||||
|
//So dereference and compare the results.
|
||||||
if ((*lhs.target) < (*rhs.target))
|
if ((*lhs.target) < (*rhs.target))
|
||||||
return true;
|
return true;
|
||||||
if ((*rhs.target) < (*lhs.target))
|
if ((*rhs.target) < (*lhs.target))
|
||||||
@ -78,6 +82,11 @@ namespace Ogre
|
|||||||
return nextHalfEdge;
|
return nextHalfEdge;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const SurfaceTriangleIterator& SurfaceEdge::getTriangle(void)
|
||||||
|
{
|
||||||
|
return triangle;
|
||||||
|
}
|
||||||
|
|
||||||
void SurfaceEdge::setPreviousHalfEdge(const SurfaceEdgeIterator& previousHalfEdgeToSet)
|
void SurfaceEdge::setPreviousHalfEdge(const SurfaceEdgeIterator& previousHalfEdgeToSet)
|
||||||
{
|
{
|
||||||
previousHalfEdge = previousHalfEdgeToSet;
|
previousHalfEdge = previousHalfEdgeToSet;
|
||||||
@ -87,4 +96,9 @@ namespace Ogre
|
|||||||
{
|
{
|
||||||
nextHalfEdge = nextHalfEdgeToSet;
|
nextHalfEdge = nextHalfEdgeToSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SurfaceEdge::setTriangle(const SurfaceTriangleIterator& triangleToSet)
|
||||||
|
{
|
||||||
|
triangle = triangleToSet;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -95,9 +95,9 @@ namespace Ogre
|
|||||||
|
|
||||||
SurfaceTriangleIterator iterTriangle = m_listTriangles.insert(triangle).first;
|
SurfaceTriangleIterator iterTriangle = m_listTriangles.insert(triangle).first;
|
||||||
|
|
||||||
v0v1Iter->triangle = iterTriangle;
|
v0v1Iter->setTriangle(iterTriangle);
|
||||||
v1v2Iter->triangle = iterTriangle;
|
v1v2Iter->setTriangle(iterTriangle);
|
||||||
v2v0Iter->triangle = iterTriangle;
|
v2v0Iter->setTriangle(iterTriangle);
|
||||||
}
|
}
|
||||||
|
|
||||||
SurfaceVertexIterator SurfacePatch::findOrAddVertex(const SurfaceVertex& vertex)
|
SurfaceVertexIterator SurfacePatch::findOrAddVertex(const SurfaceVertex& vertex)
|
||||||
@ -447,7 +447,7 @@ namespace Ogre
|
|||||||
|
|
||||||
if(edgeToDelete->getNextHalfEdge() != edgeToDelete->getOtherHalfEdge())
|
if(edgeToDelete->getNextHalfEdge() != edgeToDelete->getOtherHalfEdge())
|
||||||
{
|
{
|
||||||
m_listTriangles.erase(edgeToDelete->triangle);
|
m_listTriangles.erase(edgeToDelete->getTriangle());
|
||||||
}
|
}
|
||||||
|
|
||||||
//LogManager::getSingleton().logMessage("Removing edge " + edgeToDelete->toString());
|
//LogManager::getSingleton().logMessage("Removing edge " + edgeToDelete->toString());
|
||||||
|
@ -45,11 +45,15 @@ namespace Ogre
|
|||||||
|
|
||||||
bool operator == (const SurfaceTriangle& lhs, const SurfaceTriangle& rhs)
|
bool operator == (const SurfaceTriangle& lhs, const SurfaceTriangle& rhs)
|
||||||
{
|
{
|
||||||
return (*lhs.edge == *rhs.edge);
|
//Edges are unique in the set, so if the two positions are the same the
|
||||||
|
//two iterators must also be the same. So we just check the iterators.
|
||||||
|
return (lhs.edge == rhs.edge);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator < (const SurfaceTriangle& lhs, const SurfaceTriangle& rhs)
|
bool operator < (const SurfaceTriangle& lhs, const SurfaceTriangle& rhs)
|
||||||
{
|
{
|
||||||
|
//Unlike the equality operator, we can't compare iterators.
|
||||||
|
//So dereference and compare the results.
|
||||||
return (*lhs.edge < *rhs.edge);
|
return (*lhs.edge < *rhs.edge);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user