Rev 99 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#include <queue>
#include "HMesh/FaceCirculator.h"
#include "HMesh/VertexCirculator.h"
#include "refine_edges.h"
using namespace std;
using namespace CGLA;
using namespace HMesh;
namespace HMeshUtil
{
float average_edge_length(Manifold& mani)
{
float lsum = 0;
for(HalfEdgeIter he = mani.halfedges_begin();
he != mani.halfedges_end(); ++he)
lsum += length(he);
return lsum / mani.no_halfedges();
}
int refine_edges(Manifold& mani, float t)
{
int work = 0;
for(HalfEdgeIter he = mani.halfedges_begin();
he != mani.halfedges_end(); ++he)
he->touched = 1;
for(HalfEdgeIter he = mani.halfedges_begin();
he != mani.halfedges_end(); ++he)
if(he->face!=NULL_FACE_ITER && length(he)>t && he->touched==1)
{
++work;
he->opp->touched = 0;
VertexIter vi = mani.split_edge(he);
HalfEdgeIter h1 = vi->he->opp;
HalfEdgeIter h2 = vi->he->prev;
FaceIter f1 = h1->face;
if(f1 != NULL_FACE_ITER)
{
f1->last = h1;
mani.triangulate(f1);
}
FaceIter f2 = h2->face;
if(f2 != NULL_FACE_ITER)
{
f2->last = h2;
mani.triangulate(f2);
}
}
return work;
}
}