Subversion Repositories gelsvn

Rev

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

Rev 521 Rev 595
Line 1... Line -...
1
/*
-
 
-
 
1
/* ----------------------------------------------------------------------- *
2
 *  off_save.cpp
2
 * This file is part of GEL, http://www.imm.dtu.dk/GEL
3
 *  GEL
-
 
4
 *
-
 
5
 *  Created by J. Andreas Bærentzen on 17/02/09.
3
 * Copyright (C) the authors and DTU Informatics
6
 *  Copyright 2009 __MyCompanyName__. All rights reserved.
4
 * For license and list of authors, see ../../doc/intro.pdf
7
 *
-
 
8
 */
-
 
-
 
5
 * ----------------------------------------------------------------------- */
9
 
6
 
-
 
7
#include "off_save.h"
10
 
8
 
11
#include <fstream>
9
#include <fstream>
12
#include <iostream>
10
#include <iostream>
13
#include <string>
11
#include <string>
-
 
12
#include <vector>
-
 
13
 
-
 
14
#include <CGLA/Vec3f.h>
-
 
15
 
14
#include "off_save.h"
16
#include "Manifold.h"
15
#include "HMesh/FaceCirculator.h"
17
#include "AttributeVector.h"
16
 
18
 
17
namespace HMesh
19
namespace HMesh
18
{
20
{
19
	using namespace std;
21
    using namespace std;
20
	using namespace CGLA;
22
    using namespace CGLA;
21
	using namespace HMesh;
-
 
22
	
23
 
23
	bool off_save(const std::string& filename, Manifold& m)
24
    bool off_save(const string& filename, Manifold& m)
24
	{
25
    {
25
		ofstream os(filename.data());
26
        ofstream os(filename.data());
-
 
27
        if(os.bad()){
26
		if(os.bad()) return false;
28
            return false;
-
 
29
        }
-
 
30
 
-
 
31
        VertexAttributeVector<int> vmap(m.allocated_vertices());
27
		
32
 
28
		os << "OFF " << endl;
33
        os << "OFF" << "\n";
29
		os << m.no_vertices() << " " << m.no_faces() << " " << m.no_halfedges()/2 << endl;
34
        os << m.no_vertices() << " " << m.no_faces() << " " << m.no_halfedges()/2 << "\n";
30
		
35
 
31
		int k=0;
36
        int k = 0;
32
		vector<int> touched_vals(m.no_vertices());
-
 
33
		for(VertexIter vi = m.vertices_begin(); vi != m.vertices_end(); ++vi,++k)
37
        for(VertexIDIterator v = m.vertices_begin(); v != m.vertices_end(); ++v){
34
		{
-
 
35
			touched_vals[k] = vi->touched;
-
 
36
			vi->touched = k;
-
 
37
			Vec3f p = vi->pos;
38
            Vec3d p = m.pos(*v);
38
			os << p[0] << " " << p[1] << " " << p[2] << endl;
39
            os << "v "<< p[0] << " " << p[1] << " " << p[2] << "\n";
-
 
40
            vmap[*v] = k++;
-
 
41
        }
39
		}
42
 
40
		for(FaceIter fi = m.faces_begin();fi != m.faces_end(); ++fi)
43
        for(FaceIDIterator f = m.faces_begin(); f != m.faces_end(); ++f){        
41
		{
-
 
42
			std::vector<int> verts;
44
            vector<int> verts;
-
 
45
            for(Walker w = m.walker(*f); !w.full_circle(); w = w.circulate_face_ccw()){
43
			for(FaceCirculator fc(fi);!fc.end();++fc)
46
                int idx = vmap[w.vertex()];			
44
			{
-
 
-
 
47
                assert(static_cast<size_t>(idx) < m.no_vertices());
45
				verts.push_back(fc.get_vertex()->touched);
48
                verts.push_back(idx);
46
			}
49
            }
47
			os << verts.size() << " ";
50
            os << verts.size() << " ";
48
			for(size_t i=0;i<verts.size();++i)
51
            for(size_t i = 0; i < verts.size() ; ++i){	   
49
			{
-
 
50
				os << verts[i] << " ";
52
                os << verts[i] << " ";
51
			}
53
            }
52
			os << "\n";
54
            os << "\n";
53
		}
-
 
54
		k=0;
55
        }
55
		for(VertexIter vi = m.vertices_begin(); vi != m.vertices_end(); ++vi,++k)
-
 
56
			vi->touched = touched_vals[k];
-
 
57
		return true;
56
        return true;
58
	}
57
    }
59
	
58
 
60
}
59
}
61
 
60