Subversion Repositories gelsvn

Rev

Rev 512 | 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 <fstream>
#include "obj_load.h"

#include <Geometry/obj_load.h>
#include <Geometry/TriMesh.h>

#include "Manifold.h"

using namespace std;
using namespace CGLA;

namespace HMesh
{
    using std::string;
    using Geometry::TriMesh;
    using Geometry::obj_load;

    bool obj_load(const string& filename, Manifold& m)
    {
        ifstream ifs(filename.data());
        vector<Vec3f> vertices;
        vector<int> faces;
        vector<int> indices;
        while(ifs.good() && !ifs.eof())
        {
            string tok;
            ifs >> tok;
            if(tok == "v")
            {
                float x,y,z;
                ifs >> x >> y >> z;
                vertices.push_back(Vec3f(x,y,z));
                char line[1000];
                ifs.getline(line, 998);
            }
            else if(tok == "f")
            {
                char line[1000];
                ifs.getline(line, 998);
                char* pch = strtok(line, " \t");
                int ctr = 0;
                while(pch != 0)
                {
                    int v;
                    sscanf(pch, "%d", &v);
                    indices.push_back(v-1);
                    pch = strtok(0, " \t");
                    ++ctr;
                }
                if(ctr)
                    faces.push_back(ctr);
            }
            else
            {
                char line[1000];
                ifs.getline(line, 998);
            }
        }
        m.clear();
        m.build(vertices.size(),
                reinterpret_cast<float*>(&vertices[0]),
                faces.size(),
                &faces[0],
                &indices[0]);
        
        return true;
        
    }
}

Generated by GNU Enscript 1.6.6.