// 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/. #ifndef IGL_READOBJ_H #define IGL_READOBJ_H #include "igl_inline.h" #include "deprecated.h" // History: // return type changed from void to bool Alec 18 Sept 2011 // added pure vector of vectors version that has much more support Alec 31 Oct // 2011 #ifndef IGL_NO_EIGEN # include #endif #include #include #include namespace igl { // Read a mesh from an ascii obj file, filling in vertex positions, normals // and texture coordinates. Mesh may have faces of any number of degree // // Templates: // Scalar type for positions and vectors (will be read as double and cast // to Scalar) // Index type for indices (will be read as int and cast to Index) // Inputs: // str path to .obj file // Outputs: // V double matrix of vertex positions #V by 3 // TC double matrix of texture coordinats #TC by 2 // N double matrix of corner normals #N by 3 // F #F list of face indices into vertex positions // FTC #F list of face indices into vertex texture coordinates // FN #F list of face indices into vertex normals // Returns true on success, false on errors template IGL_INLINE bool readOBJ( const std::string obj_file_name, std::vector > & V, std::vector > & TC, std::vector > & N, std::vector > & F, std::vector > & FTC, std::vector > & FN); // Inputs: // obj_file pointer to already opened .obj file // Outputs: // obj_file closed file template IGL_INLINE bool readOBJ( FILE * obj_file, std::vector > & V, std::vector > & TC, std::vector > & N, std::vector > & F, std::vector > & FTC, std::vector > & FN); // Just V and F template IGL_INLINE bool readOBJ( const std::string obj_file_name, std::vector > & V, std::vector > & F); // Eigen Wrappers. These will return true only if the data is perfectly // "rectangular": All faces are the same degree, all have the same number of // textures/normals etc. template < typename DerivedV, typename DerivedTC, typename DerivedCN, typename DerivedF, typename DerivedFTC, typename DerivedFN> IGL_INLINE bool readOBJ( const std::string str, Eigen::PlainObjectBase& V, Eigen::PlainObjectBase& TC, Eigen::PlainObjectBase& CN, Eigen::PlainObjectBase& F, Eigen::PlainObjectBase& FTC, Eigen::PlainObjectBase& FN); template IGL_INLINE bool readOBJ( const std::string str, Eigen::PlainObjectBase& V, Eigen::PlainObjectBase& F); } #ifndef IGL_STATIC_LIBRARY # include "readOBJ.cpp" #endif #endif