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

📄 omreader.cc

📁 penMesh is a generic and efficient data structure for representing and manipulating polygonal meshes
💻 CC
📖 第 1 页 / 共 2 页
字号:
    case Chunk::Type_Color:      assert( OMFormat::dimensions(chunk_header_) == 3 );      _opt += Options::VertexColor;            for (; vidx < header_.n_vertices_ && !_is.eof(); ++vidx)      {	bytes_ += vector_restore( _is, v3uc, _swap );	_bi.set_color( VertexHandle(vidx), v3uc );      }      break;    case Chunk::Type_Custom:            bytes_ += 	restore_binary_custom_data( _is,				    _bi.kernel()->_get_vprop( property_name_ ),				    header_.n_vertices_,				    _swap );      vidx = header_.n_vertices_;      break;    default: // skip unknown chunks    {      omerr() << "Unknown chunk type ignored!\n";      size_t size_of = header_.n_vertices_ 	* OMFormat::vector_size(chunk_header_);      _is.ignore( size_of );      bytes_ += size_of;    }  }  // all chunk data has been read..?!  return vidx == header_.n_vertices_;}//-----------------------------------------------------------------------------bool_OMReader_::read_binary_face_chunk( std::istream &_is, 				    BaseImporter &_bi, 				    Options      &_opt,				    bool         _swap ){  using OMFormat::Chunk;  assert( chunk_header_.entity_ == Chunk::Entity_Face );  size_t fidx=0;  OpenMesh::Vec3f  v3f;  // normal  OpenMesh::Vec3uc v3uc; // rgb  switch( chunk_header_.type_ )  {    case Chunk::Type_Topology:    {      BaseImporter::VHandles  face_vhandles;      size_t                  nV = 0;      size_t                  vidx = 0;      switch( header_.mesh_ )      {	case 'T': nV = 3; break;	case 'Q': nV = 4; break;      }            for (; fidx < header_.n_faces_; ++fidx)      { 	if ( header_.mesh_ == 'P' ) 	  bytes_ += restore( _is, nV, Chunk::Integer_16, _swap );	face_vhandles.clear();	for (size_t j=0; j<nV; ++j)	{	  	  bytes_ += restore( _is, vidx, 			     Chunk::Integer_Size(chunk_header_.bits_),			     _swap );	  face_vhandles.push_back( vhandles_[ vidx ] );	}	_bi.add_face(face_vhandles);      }    }    break;    case Chunk::Type_Normal:      assert( OMFormat::dimensions(chunk_header_) 	      == size_t(OpenMesh::Vec3f::dim()) );      _opt += Options::FaceNormal;      for (; fidx < header_.n_faces_ && !_is.eof(); ++fidx)      {	bytes_ += vector_restore( _is, v3f, _swap );	_bi.set_normal(FaceHandle(fidx), v3f);      }      break;    case Chunk::Type_Color:      assert( OMFormat::dimensions(chunk_header_) == 3 );      _opt += Options::FaceColor;            for (; fidx < header_.n_faces_ && !_is.eof(); ++fidx)      {	bytes_ += vector_restore( _is, v3uc, _swap );	_bi.set_color( FaceHandle(fidx), v3uc );      }      break;    case Chunk::Type_Custom:            bytes_ += 	restore_binary_custom_data( _is,				    _bi.kernel()->_get_fprop( property_name_ ),				    header_.n_faces_,				    _swap );      fidx = header_.n_faces_;      break;        default: // skip unknown chunks    {      omerr() << "Unknown chunk type ignore!\n";      size_t size_of = OMFormat::chunk_data_size(header_, chunk_header_);      _is.ignore( size_of );      bytes_ += size_of;          }  }  return fidx == header_.n_faces_;}//-----------------------------------------------------------------------------bool_OMReader_::read_binary_edge_chunk( std::istream &_is, 				    BaseImporter &_bi, 				    Options      &_opt,				    bool         _swap ){  using OMFormat::Chunk;  assert( chunk_header_.entity_ == Chunk::Entity_Edge );  size_t b=bytes_;  switch( chunk_header_.type_ )  {    case Chunk::Type_Custom:            bytes_ += 	restore_binary_custom_data( _is,				    _bi.kernel()->_get_eprop( property_name_ ),				    header_.n_edges_,				    _swap );      break;    default:      // skip unknown type      size_t size_of = OMFormat::chunk_data_size(header_, chunk_header_);      _is.ignore( size_of );      bytes_ += size_of;  }  return b < bytes_;}//-----------------------------------------------------------------------------bool_OMReader_::read_binary_halfedge_chunk( std::istream &_is, 					BaseImporter &_bi, 					Options      &_opt,					bool         _swap ){  using OMFormat::Chunk;  assert( chunk_header_.entity_ == Chunk::Entity_Halfedge );  size_t b = bytes_;  switch( chunk_header_.type_ )  {    case Chunk::Type_Custom:      bytes_ += 	restore_binary_custom_data( _is,				    _bi.kernel()->_get_hprop( property_name_ ),				    2*header_.n_edges_,				    _swap );            break;    default:      // skip unknown chunk      omerr() << "Unknown chunk type ignored!\n";      size_t size_of = OMFormat::chunk_data_size(header_, chunk_header_);      _is.ignore( size_of );      bytes_ += size_of;  }  return b < bytes_;}//-----------------------------------------------------------------------------bool_OMReader_::read_binary_mesh_chunk( std::istream &_is, 				    BaseImporter &_bi, 				    Options      &_opt,				    bool         _swap ){  using OMFormat::Chunk;  assert( chunk_header_.entity_ == Chunk::Entity_Mesh );  size_t b = bytes_;  switch( chunk_header_.type_ )  {    case Chunk::Type_Custom:            bytes_ += 	restore_binary_custom_data( _is,				    _bi.kernel()->_get_mprop( property_name_ ),				    1,				    _swap );            break;    default:      // skip unknown chunk      size_t size_of = OMFormat::chunk_data_size(header_, chunk_header_);      _is.ignore( size_of );      bytes_ += size_of;  }  return b < bytes_;}//-----------------------------------------------------------------------------size_t _OMReader_::restore_binary_custom_data( std::istream& _is, BaseProperty* _bp,					 size_t _n_elem, bool _swap){    assert( !_bp || (_bp->name() == property_name_) );  using OMFormat::Chunk;  size_t              bytes = 0;  Chunk::esize_t      block_size;  Chunk::PropertyName custom_prop;  bytes += binary<Chunk::esize_t>::restore( _is, block_size, _swap );  if ( _bp )  {#if defined(OM_DEBUG)    size_t b;#endif    size_t n_bytes = _bp->size_of( _n_elem );    if ( ((n_bytes == BaseProperty::UnknownSize) || (n_bytes == block_size)) &&	 (_bp->element_size() == BaseProperty::UnknownSize ||	  (_n_elem * _bp->element_size() == block_size) ) )          {#if defined(OM_DEBUG)      bytes += (b=_bp->restore( _is, _swap ));#else      bytes += _bp->restore( _is, _swap );#endif      assert( block_size == b );      assert( block_size == _bp->size_of() );      block_size = 0;    }    else    {      omerr() << "Warning! Property " << _bp->name() << " not loaded: " 	    << "Mismatching data sizes!n";    }  }  if (block_size)  {    _is.ignore( block_size );    bytes  += block_size;  }  return bytes;}//-----------------------------------------------------------------------------//=============================================================================} // namespace IO} // namespace OpenMesh//=============================================================================

⌨️ 快捷键说明

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