corrected bug in the allocation of the result of multiple connected triangulations (poligons with holes, and added parameter to revert the order of outlines)

This commit is contained in:
Paolo Cignoni 2012-01-18 16:48:06 +00:00
parent a53887e893
commit fbe0b23839
1 changed files with 6 additions and 3 deletions

View File

@ -2,6 +2,8 @@
#define GLU_TESSELLATOR_CAP_H
#include "glu_tesselator.h"
#include <vcg/simplex/edge/pos.h>
#include <vcg/complex/algorithms/clean.h>
#include <vcg/complex/algorithms/update/bounding.h>
namespace vcg {
namespace tri {
@ -10,7 +12,7 @@ namespace tri {
// This function take a mesh with one or more boundary stored as edges, and fill another mesh with a triangulation of that boundaries.
// it assumes that boundary are planar and exploits glutessellator for the triangulaiton
template <class MeshType>
void CapEdgeMesh(MeshType &em, MeshType &cm)
void CapEdgeMesh(MeshType &em, MeshType &cm, bool revertFlag=false)
{
typedef typename MeshType::EdgeType EdgeType;
std::vector< std::vector<Point3f> > outlines;
@ -32,7 +34,7 @@ void CapEdgeMesh(MeshType &em, MeshType &cm)
nv++;
}
while(curE != startE);
if(revertFlag) std::reverse(outline.begin(),outline.end());
outlines.push_back(outline);
outline.clear();
}
@ -51,7 +53,8 @@ void CapEdgeMesh(MeshType &em, MeshType &cm)
glu_tesselator::tesselate(outlines, indices);
std::vector<Point3f> points;
glu_tesselator::unroll(outlines, points);
typename MeshType::FaceIterator fi=tri::Allocator<MeshType>::AddFaces(cm,nv-2);
//typename MeshType::FaceIterator fi=tri::Allocator<MeshType>::AddFaces(cm,nv-2);
typename MeshType::FaceIterator fi=tri::Allocator<MeshType>::AddFaces(cm,indices.size()/3);
for (size_t i=0; i<indices.size(); i+=3,++fi)
{
(*&fi)->V(0)=&cm.vert[ indices[i+0] ];