Refactoring CubicSurfaceExtractor to free functions rather than just wrapping a class.
This commit is contained in:
parent
65a973f94e
commit
9617197893
@ -126,6 +126,36 @@ namespace PolyVox
|
||||
return false;
|
||||
}
|
||||
|
||||
template<typename MeshType>
|
||||
bool performQuadMerging(std::list<Quad>& quads, MeshType* m_meshCurrent)
|
||||
{
|
||||
bool bDidMerge = false;
|
||||
for (typename std::list<Quad>::iterator outerIter = quads.begin(); outerIter != quads.end(); outerIter++)
|
||||
{
|
||||
typename std::list<Quad>::iterator innerIter = outerIter;
|
||||
innerIter++;
|
||||
while (innerIter != quads.end())
|
||||
{
|
||||
Quad& q1 = *outerIter;
|
||||
Quad& q2 = *innerIter;
|
||||
|
||||
bool result = mergeQuads(q1, q2, m_meshCurrent);
|
||||
|
||||
if (result)
|
||||
{
|
||||
bDidMerge = true;
|
||||
innerIter = quads.erase(innerIter);
|
||||
}
|
||||
else
|
||||
{
|
||||
innerIter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return bDidMerge;
|
||||
}
|
||||
|
||||
/// Do not use this class directly. Use the 'extractCubicSurface' function instead (see examples).
|
||||
template<typename VolumeType, typename MeshType, typename IsQuadNeeded>
|
||||
class CubicSurfaceExtractor
|
||||
@ -154,7 +184,6 @@ namespace PolyVox
|
||||
|
||||
private:
|
||||
int32_t addVertex(uint32_t uX, uint32_t uY, uint32_t uZ, typename VolumeType::VoxelType uMaterial, Array<3, IndexAndMaterial>& existingVertices);
|
||||
bool performQuadMerging(std::list<Quad>& quads);
|
||||
|
||||
IsQuadNeeded m_funcIsQuadNeededCallback;
|
||||
|
||||
|
@ -182,7 +182,7 @@ namespace PolyVox
|
||||
{
|
||||
//Repeatedly call this function until it returns
|
||||
//false to indicate nothing more can be done.
|
||||
while(performQuadMerging(listQuads)){}
|
||||
while (performQuadMerging(listQuads, m_meshCurrent)){}
|
||||
}
|
||||
|
||||
typename std::list<Quad>::iterator iterEnd = listQuads.end();
|
||||
@ -234,34 +234,4 @@ namespace PolyVox
|
||||
POLYVOX_THROW(std::runtime_error, "All slots full but no matches during cubic surface extraction. This is probably a bug in PolyVox");
|
||||
return -1; //Should never happen.
|
||||
}
|
||||
|
||||
template<typename VolumeType, typename MeshType, typename IsQuadNeeded>
|
||||
bool CubicSurfaceExtractor<VolumeType, MeshType, IsQuadNeeded>::performQuadMerging(std::list<Quad>& quads)
|
||||
{
|
||||
bool bDidMerge = false;
|
||||
for(typename std::list<Quad>::iterator outerIter = quads.begin(); outerIter != quads.end(); outerIter++)
|
||||
{
|
||||
typename std::list<Quad>::iterator innerIter = outerIter;
|
||||
innerIter++;
|
||||
while(innerIter != quads.end())
|
||||
{
|
||||
Quad& q1 = *outerIter;
|
||||
Quad& q2 = *innerIter;
|
||||
|
||||
bool result = mergeQuads(q1, q2, m_meshCurrent);
|
||||
|
||||
if(result)
|
||||
{
|
||||
bDidMerge = true;
|
||||
innerIter = quads.erase(innerIter);
|
||||
}
|
||||
else
|
||||
{
|
||||
innerIter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return bDidMerge;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user