Subversion Repositories gelsvn

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
39 bj 1
#include <queue>
2
#include "mesh_optimization.h"
3
#include "HMesh/FaceCirculator.h"
4
#include "HMesh/VertexCirculator.h"
5
#include "refine_edges.h"
6
 
7
using namespace std;
8
using namespace CGLA;
9
using namespace HMesh;
10
 
11
namespace HMeshUtil
12
{
13
	float average_edge_length(Manifold& mani)
14
	{
15
		float lsum = 0;
16
		for(HalfEdgeIter he = mani.halfedges_begin(); 
17
				he != mani.halfedges_end(); ++he)
18
			lsum += length(he);
19
		return lsum / mani.no_halfedges();
20
	}
21
 
22
	int refine_edges(Manifold& mani, float t)
23
	{
24
		int work = 0;
25
 
26
		for(HalfEdgeIter he = mani.halfedges_begin(); 
27
				he != mani.halfedges_end(); ++he)
28
			he->touched = 1;
29
 
30
		for(HalfEdgeIter he = mani.halfedges_begin();
31
				he != mani.halfedges_end(); ++he)
32
			if(he->face!=NULL_FACE_ITER && length(he)>t && he->touched==1)
33
				{
34
					++work;
35
					he->opp->touched = 0;
36
					VertexIter vi = mani.split_edge(he);
37
 
38
					HalfEdgeIter h1 = vi->he->opp;
39
					HalfEdgeIter h2 = vi->he->prev;
40
 
41
					FaceIter f1 = h1->face;
42
					if(f1 != NULL_FACE_ITER)
43
						{
44
							f1->last = h1;
45
							mani.triangulate(f1);
46
						}
47
 
48
					FaceIter f2 = h2->face;
49
					if(f2 != NULL_FACE_ITER)
50
						{
51
							f2->last = h2;
52
							mani.triangulate(f2);
53
						}
54
				}
55
		return work;
56
	}
57
 
58
}