Subversion Repositories gelsvn

Rev

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

Rev Author Line No. Line
332 jab 1
#include "subdivision.h"
2
#include "FaceCirculator.h"
3
#include "build_manifold.h"
4
 
5
using namespace std;
6
using namespace CGLA;
7
namespace HMesh
8
{
9
		void cc_split(Manifold& m_in, Manifold& m_out)
10
		{
11
				vector<Vec3f> new_points;
12
 
13
				for(VertexIter v=m_in.vertices_begin(); v != m_in.vertices_end();++v)
14
				{
15
						int idx = new_points.size();
16
						new_points.push_back(v->pos);
17
						v->touched = idx;
18
				}
19
 
20
				for(HalfEdgeIter h=m_in.halfedges_begin();h!= m_in.halfedges_end();++h)
21
						h->touched = -1;
22
 
23
				for(HalfEdgeIter h=m_in.halfedges_begin();h!= m_in.halfedges_end();++h)
24
						if(h->touched == -1)
25
				{
26
						int idx = new_points.size();
27
						new_points.push_back((h->vert->pos + h->opp->vert->pos) / 2.0);
28
						h->touched = h->opp->touched = idx;
29
				}
30
 
31
				vector<int> indices;
32
				vector<int> faces;
33
				for(FaceIter f=m_in.faces_begin(); f != m_in.faces_end(); ++f)
34
				{
35
						int idx_center = new_points.size();
36
						new_points.push_back(centre(f));
37
						for(FaceCirculator fc(f); !fc.end(); ++fc)
38
						{
39
								indices.push_back(idx_center);
40
								indices.push_back(fc.get_halfedge()->prev->touched);
41
								indices.push_back(fc.get_vertex()->touched);
42
								indices.push_back(fc.get_halfedge()->touched);
43
								faces.push_back(4);
44
						}
45
				}
46
				m_out.clear();
47
				build_manifold(m_out, new_points.size(),
48
											 &new_points[0],
49
											 faces.size(),
50
											 &faces[0],
51
											 &indices[0]);
52
		}
53
 
54
}