Subversion Repositories gelsvn

Rev

Rev 182 | Rev 595 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 182 Rev 336
Line 6... Line 6...
6
namespace HMesh
6
namespace HMesh
7
{
7
{
8
	using namespace std;
8
	using namespace std;
9
	using namespace CGLA;
9
	using namespace CGLA;
10
	using namespace HMesh;
10
	using namespace HMesh;
11
 
11
	
12
	bool obj_save(const std::string& filename, Manifold& m)
12
	bool obj_save(const std::string& filename, Manifold& m)
13
	{
13
	{
14
		ofstream os(filename.data());
14
		ofstream os(filename.data());
15
		if(os.bad()) return false;
15
		if(os.bad()) return false;
16
		int k=1;
16
		int k=0;
-
 
17
		vector<int> touched_vals(m.no_vertices());
17
		for(VertexIter vi = m.vertices_begin(); vi != m.vertices_end(); ++vi,++k)
18
		for(VertexIter vi = m.vertices_begin(); vi != m.vertices_end(); ++vi,++k)
-
 
19
		{
-
 
20
			touched_vals[k] = vi->touched;
-
 
21
			vi->touched = k+1;
-
 
22
			Vec3f p = vi->pos;
-
 
23
			os << "v "<< p[0] << " " << p[1] << " " << p[2] << "\n";
-
 
24
		}
-
 
25
		for(FaceIter fi = m.faces_begin();fi != m.faces_end(); ++fi)
-
 
26
		{
-
 
27
			std::vector<int> verts;
-
 
28
			for(FaceCirculator fc(fi);!fc.end();++fc)
18
			{
29
			{
19
				vi->touched = k;
30
				int vertex_idx = fc.get_vertex()->touched;
20
				Vec3f p = vi->pos;
31
				if(vertex_idx >= k)
-
 
32
				{
21
				os << "v "<< p[0] << " " << p[1] << " " << p[2] << "\n";
33
					cout << vertex_idx  << " " << k << endl;
-
 
34
					verts.push_back(0);
-
 
35
				}
-
 
36
				else
-
 
37
				{
-
 
38
					assert(vertex_idx < k);
-
 
39
					verts.push_back(vertex_idx);
-
 
40
				}
22
			}
41
			}
-
 
42
			assert(verts.size()==3);
23
		for(FaceIter fi = m.faces_begin();fi != m.faces_end(); ++fi)
43
			for(size_t i=1;i<(verts.size()-1);++i)
24
			{
44
			{
25
				std::vector<int> verts;
-
 
26
				for(FaceCirculator fc(fi);!fc.end();++fc)
-
 
27
					{
-
 
28
						int vertex_idx = fc.get_vertex()->touched;
-
 
29
						if(vertex_idx >= k)
-
 
30
							{
-
 
31
								cout << vertex_idx  << " " << k << endl;
-
 
32
								verts.push_back(0);
-
 
33
							}
-
 
34
						else
-
 
35
							{
-
 
36
								assert(vertex_idx < k);
-
 
37
								verts.push_back(vertex_idx);
-
 
38
							}
-
 
39
					}
-
 
40
				assert(verts.size()==3);
-
 
41
				for(size_t i=1;i<(verts.size()-1);++i)
-
 
42
					{
-
 
43
						os << "f ";
45
				os << "f ";
44
						os << verts[0] << " " << verts[i] << " " << verts[i+1] << "\n";
46
				os << verts[0] << " " << verts[i] << " " << verts[i+1] << "\n";
45
					}
-
 
46
			}
47
			}
-
 
48
		}
-
 
49
		k=0;
-
 
50
		for(VertexIter vi = m.vertices_begin(); vi != m.vertices_end(); ++vi,++k)
-
 
51
			vi->touched = touched_vals[k];
47
			return true;
52
		return true;
48
	}
53
	}
49
 
54
	
50
}
55
}