⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iomanager.cc

📁 penMesh is a generic and efficient data structure for representing and manipulating polygonal meshes
💻 CC
字号:
/*===========================================================================*\ *                                                                           * *                               OpenMesh                                    * *      Copyright (C) 2001-2005 by Computer Graphics Group, RWTH Aachen      * *                           www.openmesh.org                                * *                                                                           * *---------------------------------------------------------------------------*  *                                                                           * *                                License                                    * *                                                                           * *  This library is free software; you can redistribute it and/or modify it  * *  under the terms of the GNU Library General Public License as published   * *  by the Free Software Foundation, version 2.                              * *                                                                           * *  This library is distributed in the hope that it will be useful, but      * *  WITHOUT ANY WARRANTY; without even the implied warranty of               * *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU        * *  Library General Public License for more details.                         * *                                                                           * *  You should have received a copy of the GNU Library General Public        * *  License along with this library; if not, write to the Free Software      * *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.                * *                                                                           *\*===========================================================================*///=============================================================================////  Implements the OpenMesh IOManager singleton////=============================================================================//== INCLUDES =================================================================#include <OpenMesh/Core/System/config.hh>#include <OpenMesh/Core/IO/IOManager.hh>//== NAMESPACES ===============================================================namespace OpenMesh {namespace IO {//=============================================================================_IOManager_  *__IOManager_instance = 0;_IOManager_& IOManager(){  if (!__IOManager_instance)  __IOManager_instance = new _IOManager_();  return *__IOManager_instance;}//-----------------------------------------------------------------------------bool _IOManager_::read(const std::string& _filename, BaseImporter& _bi, Options& _opt){        std::set<BaseReader*>::const_iterator it     =  reader_modules_.begin();  std::set<BaseReader*>::const_iterator it_end =  reader_modules_.end();      // Try all registered modules  for(; it != it_end; ++it)    if ((*it)->can_u_read(_filename))    {      _bi.prepare();      bool ok = (*it)->read(_filename, _bi, _opt);      _bi.finish();      return ok;    }    // All modules failed to read  return false;}//-----------------------------------------------------------------------------bool_IOManager_::write(const std::string& _filename, BaseExporter& _be, Options _opt){  std::set<BaseWriter*>::const_iterator it     = writer_modules_.begin();  std::set<BaseWriter*>::const_iterator it_end = writer_modules_.end();    if ( it == it_end )  {    omerr() << "[OpenMesh::IO::_IOManager_] No writing modules available!\n";    return false;  }  // Try all registered modules  for(; it != it_end; ++it)  {    if ((*it)->can_u_write(_filename))    {      return (*it)->write(_filename, _be, _opt);     }  }    // All modules failed to save  return false;}//-----------------------------------------------------------------------------bool _IOManager_::can_read( const std::string& _format ) const{  std::set<BaseReader*>::const_iterator it     = reader_modules_.begin();  std::set<BaseReader*>::const_iterator it_end = reader_modules_.end();  std::string filename = "dummy." + _format;    for(; it != it_end; ++it)    if ((*it)->can_u_read(filename))      return true;    return false;}//-----------------------------------------------------------------------------bool_IOManager_::can_write( const std::string& _format ) const{  std::set<BaseWriter*>::const_iterator it     = writer_modules_.begin();  std::set<BaseWriter*>::const_iterator it_end = writer_modules_.end();  std::string filename = "dummy." + _format;      // Try all registered modules  for(; it != it_end; ++it)    if ((*it)->can_u_write(filename))      return true;      return false;}//-----------------------------------------------------------------------------const BaseWriter*_IOManager_::find_writer(const std::string& _format){  using std::string;    string::size_type dot = _format.rfind('.');  string ext;  if (dot == string::npos)    ext = _format;  else    ext = _format.substr(dot+1,_format.length()-(dot+1));    std::set<BaseWriter*>::const_iterator it     = writer_modules_.begin();  std::set<BaseWriter*>::const_iterator it_end = writer_modules_.end();  std::string filename = "dummy." + ext;    // Try all registered modules  for(; it != it_end; ++it)    if ((*it)->can_u_write(filename))      return *it;  return NULL;}  //-----------------------------------------------------------------------------void_IOManager_::update_read_filters(){  std::set<BaseReader*>::const_iterator it     = reader_modules_.begin(),                                        it_end = reader_modules_.end();  std::string s, all, filters;    for(; it != it_end; ++it)  {    filters += (*it)->get_description() + " (";        std::istringstream iss((*it)->get_extensions());    while (iss && !iss.eof() && (iss >> s))    { s = " *." + s; filters += s; all += s; }        filters += " );;";  }  all = "All files ( " + all + " );;";    read_filters_ = all + filters;}//-----------------------------------------------------------------------------void_IOManager_::update_write_filters(){  std::set<BaseWriter*>::const_iterator it     = writer_modules_.begin(),                                        it_end = writer_modules_.end();  std::string s, all, filters;      for(; it != it_end; ++it)  {    filters += (*it)->get_description() + " (";    std::istringstream iss((*it)->get_extensions());    while (iss && !iss.eof() && (iss >> s))    { s = " *." + s; filters += s; all += s; }    filters += " );;";  }  all = "All files ( " + all + " );;";  write_filters_ = all + filters;}  //=============================================================================} // namespace IO} // namespace OpenMesh//=============================================================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -