Refactoring CubicSurfaceExtractor to free functions rather than just wrapping a class.
This commit is contained in:
parent
65a973f94e
commit
9617197893
@ -125,6 +125,36 @@ namespace PolyVox
|
|||||||
//Quads cannot be merged.
|
//Quads cannot be merged.
|
||||||
return false;
|
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).
|
/// Do not use this class directly. Use the 'extractCubicSurface' function instead (see examples).
|
||||||
template<typename VolumeType, typename MeshType, typename IsQuadNeeded>
|
template<typename VolumeType, typename MeshType, typename IsQuadNeeded>
|
||||||
@ -154,7 +184,6 @@ namespace PolyVox
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
int32_t addVertex(uint32_t uX, uint32_t uY, uint32_t uZ, typename VolumeType::VoxelType uMaterial, Array<3, IndexAndMaterial>& existingVertices);
|
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;
|
IsQuadNeeded m_funcIsQuadNeededCallback;
|
||||||
|
|
||||||
|
@ -182,7 +182,7 @@ namespace PolyVox
|
|||||||
{
|
{
|
||||||
//Repeatedly call this function until it returns
|
//Repeatedly call this function until it returns
|
||||||
//false to indicate nothing more can be done.
|
//false to indicate nothing more can be done.
|
||||||
while(performQuadMerging(listQuads)){}
|
while (performQuadMerging(listQuads, m_meshCurrent)){}
|
||||||
}
|
}
|
||||||
|
|
||||||
typename std::list<Quad>::iterator iterEnd = listQuads.end();
|
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");
|
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.
|
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