Subversion Repositories gelsvn

Rev

Rev 62 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#include <fstream>
#include <string>
#include "obj_save.h"
#include "HMesh/FaceCirculator.h"

namespace HMeshUtil
{
        using namespace std;
        using namespace CGLA;
        using namespace HMesh;

        bool obj_save(const std::string& filename, Manifold& m)
        {
                ofstream os(filename.data());
                if(os.bad()) return false;
                int k=1;
                for(VertexIter vi = m.vertices_begin(); vi != m.vertices_end(); ++vi,++k)
                        {
                                vi->touched = k;
                                Vec3f p = vi->pos;
                                os << "v "<< p[0] << " " << p[1] << " " << p[2] << "\n";
                        }
                for(FaceIter fi = m.faces_begin();fi != m.faces_end(); ++fi)
                        {
                                std::vector<int> verts;
                                for(FaceCirculator fc(fi);!fc.end();++fc)
                                        {
                                                int vertex_idx = fc.get_vertex()->touched;
                                                if(vertex_idx >= k)
                                                        {
                                                                cout << vertex_idx  << " " << k << endl;
                                                                verts.push_back(0);
                                                        }
                                                else
                                                        {
                                                                assert(vertex_idx < k);
                                                                verts.push_back(vertex_idx);
                                                        }
                                        }
                                assert(verts.size()==3);
                                for(int i=1;i<(verts.size()-1);++i)
                                        {
                                                os << "f ";
                                                os << verts[0] << " " << verts[i] << " " << verts[i+1] << "\n";
                                        }
                        }
                        return true;
        }

}