Rev 518 | Rev 553 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
/* ----------------------------------------------------------------------- *
* This file is part of GEL, www.imm.dtu.dk/GEL
* Copyright (C) the authors (see AUTHORS.txt) and DTU Informatics
*
* Principal authors:
* Christian Thode Larsen (thode2d@gmail.com)
* J. Andreas Baerentzen (jab@imm.dtu.dk)
*
* See LICENSE.txt for licensing information
* ----------------------------------------------------------------------- */
#include "off_save.h"
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
#include <CGLA/Vec3f.h>
#include "Manifold.h"
#include "AttributeVector.h"
namespace HMesh
{
using namespace std;
using namespace CGLA;
bool off_save(const string& filename, Manifold& m)
{
ofstream os(filename.data());
if(os.bad()){
return false;
}
VertexAttributeVector<int> vmap(m.total_vertices());
os << "OFF " << "\n";
os << m.active_vertices() << " " << m.active_faces() << " " << m.active_halfedges()/2 << "\n";
int k = 0;
for(VertexIDIterator v = m.vertices_begin(); v != m.vertices_end(); ++v){
Vec3f p = m.pos(*v);
os << "v "<< p[0] << " " << p[1] << " " << p[2] << "\n";
vmap[*v] = k++;
}
for(FaceIDIterator f = m.faces_begin(); f != m.faces_end(); ++f){
vector<int> verts;
for(HalfEdgeWalker w = m.halfedgewalker(*f); !w.full_circle(); w = w.circulate_face_cw()){
int idx = vmap[w.vertex()];
assert(static_cast<size_t>(idx) < m.active_vertices());
verts.push_back(idx);
}
os << verts.size() << " ";
for(size_t i = 1; i < verts.size() ; ++i){
os << verts[i] << " ";
}
os << "\n";
}
return true;
}
}
Generated by GNU Enscript 1.6.6.