// This file is part of libigl, a simple c++ geometry processing library. // // Copyright (C) 2013 Alec Jacobson // // 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 "writeDMAT.h" #include "list_to_matrix.h" #include #include template IGL_INLINE bool igl::writeDMAT( const std::string file_name, const Eigen::MatrixBase & W, const bool ascii) { FILE * fp = fopen(file_name.c_str(),"wb"); if(fp == NULL) { fprintf(stderr,"IOError: writeDMAT() could not open %s...",file_name.c_str()); return false; } if(ascii) { // first line contains number of rows and number of columns fprintf(fp,"%d %d\n",(int)W.cols(),(int)W.rows()); // Loop over columns slowly for(int j = 0;j < W.cols();j++) { // loop over rows (down columns) quickly for(int i = 0;i < W.rows();i++) { fprintf(fp,"%0.17lg\n",(double)W(i,j)); } } }else { // write header for ascii fprintf(fp,"0 0\n"); // first line contains number of rows and number of columns fprintf(fp,"%d %d\n",(int)W.cols(),(int)W.rows()); // reader assumes the binary part is double precision Eigen::MatrixXd Wd = W.template cast(); fwrite(Wd.data(),sizeof(double),Wd.size(),fp); //// Loop over columns slowly //for(int j = 0;j < W.cols();j++) //{ // // loop over rows (down columns) quickly // for(int i = 0;i < W.rows();i++) // { // double d = (double)W(i,j); // fwrite(&d,sizeof(double),1,fp); // } //} } fclose(fp); return true; } template IGL_INLINE bool igl::writeDMAT( const std::string file_name, const std::vector > & W, const bool ascii) { Eigen::Matrix mW; list_to_matrix(W,mW); return igl::writeDMAT(file_name,mW,ascii); } template IGL_INLINE bool igl::writeDMAT( const std::string file_name, const std::vector & W, const bool ascii) { Eigen::Matrix mW; list_to_matrix(W,mW); return igl::writeDMAT(file_name,mW,ascii); } #ifdef IGL_STATIC_LIBRARY // Explicit template instantiation template bool igl::writeDMAT >(std::basic_string, std::allocator >, Eigen::MatrixBase > const&, bool); template bool igl::writeDMAT >(std::string, Eigen::MatrixBase > const&, bool); template bool igl::writeDMAT >(std::string, Eigen::MatrixBase > const&, bool); template bool igl::writeDMAT >(std::basic_string, std::allocator >, Eigen::MatrixBase > const&, bool); template bool igl::writeDMAT >(std::basic_string, std::allocator >, Eigen::MatrixBase > const&, bool); template bool igl::writeDMAT >(std::basic_string, std::allocator >, Eigen::MatrixBase > const&, bool); #endif