Subversion Repositories gelsvn

Rev

Rev 81 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 81 Rev 96
1
#include <sstream>
1
#include <sstream>
2
#include <fstream>
2
#include <fstream>
-
 
3
#if defined(_MSC_VER)
-
 
4
#include <io.h>
-
 
5
#else
3
#include <unistd.h>
6
#include <unistd.h>
4
 
7
#endif
5
#include "CGLA/Mat2x2f.h"
8
#include "CGLA/Mat2x2f.h"
6
#include "Geometry/Polygonizer.h"
9
#include "Geometry/Polygonizer.h"
7
#include "Geometry/TrilinFilter.h"
10
#include "Geometry/TrilinFilter.h"
8
#include "Geometry/load_raw.h"
11
#include "Geometry/load_raw.h"
9
#include "HMeshUtil/build_manifold.h"
12
#include "HMeshUtil/build_manifold.h"
10
#include "HMeshUtil/obj_save.h"
13
#include "HMeshUtil/obj_save.h"
11
#include "Util/ArgExtracter.h"
14
#include "Util/ArgExtracter.h"
12
 
15
 
13
using namespace HMesh;
16
using namespace HMesh;
14
using namespace HMeshUtil;
17
using namespace HMeshUtil;
15
using namespace Geometry;
18
using namespace Geometry;
16
using namespace CGLA;
19
using namespace CGLA;
17
using namespace Util;
20
using namespace Util;
18
using namespace std;
21
using namespace std;
19
 
22
 
20
 
23
 
21
/* Create an implicit function: Just union of two spheres */
24
/* Create an implicit function: Just union of two spheres */
22
class TestImplicit: public ImplicitFunction
25
class TestImplicit: public ImplicitFunction
23
{
26
{
24
		const Vec3f c0, c1;
27
		const Vec3f c0, c1;
25
public:
28
public:
26
		
29
		
27
		TestImplicit(): c0(0,0,0), c1(2,2,2)  {}
30
		TestImplicit(): c0(0,0,0), c1(2,2,2)  {}
28
		
31
		
29
		float eval(float x,float y,float z) 
32
		float eval(float x,float y,float z) 
30
				{
33
				{
31
						Vec3f p(x,y,z);
34
						Vec3f p(x,y,z);
32
						return min(length(p-c0)-2.0f,length(p-c1)-2.0f);
35
						return min(length(p-c0)-2.0f,length(p-c1)-2.0f);
33
				}
36
				}
34
};
37
};
35
 
38
 
36
 
39
 
37
int main(int argc, char **argv)
40
int main(int argc, char **argv)
38
{
41
{
39
	// Create an implicit.
42
	// Create an implicit.
40
	TestImplicit imp;
43
	TestImplicit imp;
41
 
44
 
42
	// Create a polygonizer. Cell side length = 0.1 and go up to 50 cells.
45
	// Create a polygonizer. Cell side length = 0.1 and go up to 50 cells.
43
	Polygonizer pol(&imp, 0.1f, 50);	
46
	Polygonizer pol(&imp, 0.1f, 50);	
44
 
47
 
45
	// Start polygonizer in vicinity of 1,1,1
48
	// Start polygonizer in vicinity of 1,1,1
46
	pol.march(1,1,1);
49
	pol.march(1,1,1);
47
 
50
 
48
	// Build HMesh from triangles
51
	// Build HMesh from triangles
49
	vector<int> indices;
52
	vector<int> indices;
50
	vector<Vec3f> verts;
53
	vector<Vec3f> verts;
51
	vector<int> faces;
54
	vector<int> faces;
52
	
55
	
53
	// Extract vertices
56
	// Extract vertices
54
 	for(int i=0;i<pol.no_vertices();++i)
57
 	for(int i=0;i<pol.no_vertices();++i)
55
	{
58
	{
56
			verts.push_back(*reinterpret_cast<Vec3f*>(&pol.get_vertex(i)));
59
			verts.push_back(*reinterpret_cast<Vec3f*>(&pol.get_vertex(i)));
57
	}
60
	}
58
 
61
 
59
	// Extract triangles.
62
	// Extract triangles.
60
 	for(int i=0;i<pol.no_triangles();++i)
63
 	for(int i=0;i<pol.no_triangles();++i)
61
	{
64
	{
62
			faces.push_back(3);
65
			faces.push_back(3);
63
			TRIANGLE f = pol.get_triangle(i);
66
			TRIANGLE f = pol.get_triangle(i);
64
			indices.push_back(f.v0);
67
			indices.push_back(f.v0);
65
			indices.push_back(f.v1);
68
			indices.push_back(f.v1);
66
			indices.push_back(f.v2);
69
			indices.push_back(f.v2);
67
	}
70
	}
68
	
71
	
69
	// Build manifold
72
	// Build manifold
70
	Manifold m;
73
	Manifold m;
71
	build_manifold(m, verts.size(), &verts[0], 
74
	build_manifold(m, verts.size(), &verts[0], 
72
								 faces.size(), &faces[0], &indices[0]);
75
								 faces.size(), &faces[0], &indices[0]);
73
 
76
 
74
	// Save as obj file
77
	// Save as obj file
75
 	obj_save("bloomenthal.obj", m);
78
 	obj_save("bloomenthal.obj", m);
76
	
79
	
77
}
80
}
78
 
81