dust3d/third_party/libigl/include/igl/writeTGF.cpp

74 lines
1.8 KiB
C++
Raw Normal View History

// This file is part of libigl, a simple c++ geometry processing library.
//
// Copyright (C) 2013 Alec Jacobson <alecjacobson@gmail.com>
//
// This Source Code Form is subject to the terms of the Mozilla Public License
// v. 2.0. If a copy of the MPL was not distributed with this file, You can
// obtain one at http://mozilla.org/MPL/2.0/.
#include "writeTGF.h"
#include <cstdio>
IGL_INLINE bool igl::writeTGF(
const std::string tgf_filename,
const std::vector<std::vector<double> > & C,
const std::vector<std::vector<int> > & E)
{
FILE * tgf_file = fopen(tgf_filename.c_str(),"w");
if(NULL==tgf_file)
{
printf("IOError: %s could not be opened\n",tgf_filename.c_str());
return false;
}
// Loop over vertices
for(int i = 0; i<(int)C.size();i++)
{
assert(C[i].size() == 3);
// print a line with vertex number then "description"
// Where "description" in our case is the 3d position in space
//
fprintf(tgf_file,
"%4d "
"%10.17g %10.17g %10.17g " // current location
// All others are not needed for this legacy support
"\n",
i+1,
C[i][0], C[i][1], C[i][2]);
}
// print a comment to separate vertices and edges
fprintf(tgf_file,"#\n");
// loop over edges
for(int i = 0;i<(int)E.size();i++)
{
assert(E[i].size()==2);
fprintf(tgf_file,"%4d %4d\n",
E[i][0]+1,
E[i][1]+1);
}
// print a comment to separate edges and faces
fprintf(tgf_file,"#\n");
fclose(tgf_file);
return true;
}
#ifndef IGL_NO_EIGEN
#include "matrix_to_list.h"
IGL_INLINE bool igl::writeTGF(
const std::string tgf_filename,
const Eigen::MatrixXd & C,
const Eigen::MatrixXi & E)
{
using namespace std;
vector<vector<double> > vC;
vector<vector<int> > vE;
matrix_to_list(C,vC);
matrix_to_list(E,vE);
return writeTGF(tgf_filename,vC,vE);
}
#endif