Subversion Repositories gelsvn

Rev

Rev 336 | Rev 595 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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