Subversion Repositories gelsvn

Rev

Rev 149 | 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 HMesh
{
        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;
        }

}