コード例 #1
0
ファイル: iomesh.cpp プロジェクト: YangchenVR/eltopo
bool read_objfile(NonDestructiveTriMesh &mesh, std::vector<Vec3d> &x, const char *filename_format, ...)
{

#ifdef _MSC_VER
    va_list ap;
    va_start(ap, filename_format);
    int len=_vscprintf(filename_format, ap) // _vscprintf doesn't count
        +1; // terminating '\0'
    char *filename=new char[len];
    vsprintf(filename, filename_format, ap);
    std::ifstream input(filename, std::ifstream::binary);
    delete[] filename;
    va_end(ap);
#else
    va_list ap;
    va_start(ap, filename_format);
    char *filename;
    vasprintf(&filename, filename_format, ap);
    std::ifstream input(filename, std::ifstream::binary);
    std::free(filename);
    va_end(ap);
#endif

    if(!input.good()) return false;
    
    x.clear();
    mesh.clear();
    
    char line[LINESIZE];
    std::vector<int> vertex_list;
    while(input.good()){
        input.getline(line, LINESIZE);
        switch(line[0]){
            case 'v': // vertex data
                if(line[1]==' '){
                    Vec3d new_vertex;
                    std::sscanf(line+2, "%lf %lf %lf", &new_vertex[0], &new_vertex[1], &new_vertex[2]);
                    x.push_back(new_vertex);
                }
                break;
            case 'f': // face data
                if(line[1]==' '){
                    read_face_list(line+2, vertex_list);
                    for(int j=0; j<(int)vertex_list.size()-2; ++j)
                        mesh.add_triangle( Vec3st(vertex_list[0], vertex_list[j+1], vertex_list[j+2]) );
                }
                break;
        }
    }
    return true;
}
コード例 #2
0
ファイル: loadobj.cpp プロジェクト: jaysuhr/ubc_proj
bool
read_objfile(std::vector<Vector>& verts,
             std::vector< std::vector<int> >& tris,
             const char* filename)
{
    std::ifstream input(filename, std::ifstream::binary);
    if(!input.good()) return false;

    verts.clear();
    tris.clear();

    char line[LINESIZE];
    std::vector<int> vertex_list;
    while(input.good()){
        input.getline(line, LINESIZE);
        switch(line[0]){
            case 'v': // vertex data
                if(line[1]==' '){
                    Vector new_vertex;
                    std::sscanf(line+2, "%f %f %f", &new_vertex[0],
                                                    &new_vertex[1],
                                                    &new_vertex[2]);
                    verts.push_back(new_vertex);
                }
                break;
            case 'f': // face data
                if(line[1]==' '){
                    read_face_list(line+2, vertex_list);
                    for(int j=0; j<(int)vertex_list.size()-2; ++j){
                        std::vector<int> face;
                        face.push_back(vertex_list[j]);
                        face.push_back(vertex_list[j+1]);
                        face.push_back(vertex_list[j+2]);
                        tris.push_back(face);
                    }
                }
                break;
        }
    }
    return true;
}