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

📄 iteratorst.hh

📁 penMesh is a generic and efficient data structure for representing and manipulating polygonal meshes
💻 HH
📖 第 1 页 / 共 3 页
字号:
    /// Assignment from non-const iterator  HalfedgeIterT& operator=(const HalfedgeIterT<Mesh>& _rhs)   {    mesh_      = _rhs.mesh_;    hnd_       = _rhs.hnd_;    skip_bits_ = _rhs.skip_bits_;    return *this;  }#else  friend class ConstHalfedgeIterT<Mesh>;#endif  /// Standard dereferencing operator.  reference operator*()  const { return mesh_->deref(hnd_); }    /// Standard pointer operator.  pointer   operator->() const { return &(mesh_->deref(hnd_)); }    /// Get the handle of the item the iterator refers to.  value_handle handle() const { return hnd_; }  /// Cast to the handle of the item the iterator refers to.  operator value_handle() const { return hnd_; }  /// Are two iterators equal? Only valid if they refer to the same mesh!  bool operator==(const HalfedgeIterT& _rhs) const   { return ((mesh_ == _rhs.mesh_) && (hnd_ == _rhs.hnd_)); }  /// Not equal?  bool operator!=(const HalfedgeIterT& _rhs) const   { return !operator==(_rhs); }    /// Standard pre-increment operator  HalfedgeIterT& operator++()   { hnd_.__increment(); if (skip_bits_) skip_fwd(); return *this; }  /// Standard pre-decrement operator  HalfedgeIterT& operator--()   { hnd_.__decrement(); if (skip_bits_) skip_bwd(); return *this; }    /// Turn on skipping: automatically skip deleted/hidden elements  void enable_skipping()  {    if (mesh_ && mesh_->has_halfedge_status())    {      Attributes::StatusInfo status;      status.set_deleted(true);      status.set_hidden(true);      skip_bits_ = status.bits();      skip_fwd();    }    else skip_bits_ = 0;  }  /// Turn on skipping: automatically skip deleted/hidden elements  void disable_skipping() { skip_bits_ = 0; }private:  void skip_fwd()   {    assert(mesh_ && skip_bits_);    while ((hnd_.idx() < (signed) mesh_->n_halfedges()) && 	   (mesh_->status(hnd_).bits() & skip_bits_))      hnd_.__increment();  }  void skip_bwd()   {    assert(mesh_ && skip_bits_);    while ((hnd_.idx() >= 0) && 	   (mesh_->status(hnd_).bits() & skip_bits_))      hnd_.__decrement();  }private:  mesh_ptr      mesh_;  value_handle  hnd_;  unsigned int  skip_bits_;};//== CLASS DEFINITION =========================================================	      /** \class ConstHalfedgeIterT IteratorsT.hh <OpenMesh/Mesh/Iterators/IteratorsT.hh>    Linear iterator.*/template <class Mesh>class ConstHalfedgeIterT{public:    //--- Typedefs ---  typedef typename Mesh::Halfedge           value_type;  typedef typename Mesh::HalfedgeHandle         value_handle;#if 1  typedef const value_type&    reference;  typedef const value_type*    pointer;  typedef const Mesh*          mesh_ptr;  typedef const Mesh&          mesh_ref;#else  typedef value_type&          reference;  typedef value_type*          pointer;  typedef Mesh*                mesh_ptr;  typedef Mesh&                mesh_ref;#endif  /// Default constructor.  ConstHalfedgeIterT()     : mesh_(0), skip_bits_(0)   {}  /// Construct with mesh and a target handle.   ConstHalfedgeIterT(mesh_ref _mesh, value_handle _hnd, bool _skip=false)     : mesh_(&_mesh), hnd_(_hnd), skip_bits_(0)   {    if (_skip) enable_skipping();  }  /// Copy constructor  ConstHalfedgeIterT(const ConstHalfedgeIterT& _rhs)     : mesh_(_rhs.mesh_), hnd_(_rhs.hnd_), skip_bits_(_rhs.skip_bits_)  {}    /// Assignment operator  ConstHalfedgeIterT& operator=(const ConstHalfedgeIterT<Mesh>& _rhs)   {    mesh_      = _rhs.mesh_;    hnd_       = _rhs.hnd_;    skip_bits_ = _rhs.skip_bits_;    return *this;  }#if 1  /// Construct from a non-const iterator  ConstHalfedgeIterT(const HalfedgeIterT<Mesh>& _rhs)     : mesh_(_rhs.mesh_), hnd_(_rhs.hnd_), skip_bits_(_rhs.skip_bits_)   {}    /// Assignment from non-const iterator  ConstHalfedgeIterT& operator=(const HalfedgeIterT<Mesh>& _rhs)   {    mesh_      = _rhs.mesh_;    hnd_       = _rhs.hnd_;    skip_bits_ = _rhs.skip_bits_;    return *this;  }#else  friend class ConstHalfedgeIterT<Mesh>;#endif  /// Standard dereferencing operator.  reference operator*()  const { return mesh_->deref(hnd_); }    /// Standard pointer operator.  pointer   operator->() const { return &(mesh_->deref(hnd_)); }    /// Get the handle of the item the iterator refers to.  value_handle handle() const { return hnd_; }  /// Cast to the handle of the item the iterator refers to.  operator value_handle() const { return hnd_; }  /// Are two iterators equal? Only valid if they refer to the same mesh!  bool operator==(const ConstHalfedgeIterT& _rhs) const   { return ((mesh_ == _rhs.mesh_) && (hnd_ == _rhs.hnd_)); }  /// Not equal?  bool operator!=(const ConstHalfedgeIterT& _rhs) const   { return !operator==(_rhs); }    /// Standard pre-increment operator  ConstHalfedgeIterT& operator++()   { hnd_.__increment(); if (skip_bits_) skip_fwd(); return *this; }  /// Standard pre-decrement operator  ConstHalfedgeIterT& operator--()   { hnd_.__decrement(); if (skip_bits_) skip_bwd(); return *this; }    /// Turn on skipping: automatically skip deleted/hidden elements  void enable_skipping()  {    if (mesh_ && mesh_->has_halfedge_status())    {      Attributes::StatusInfo status;      status.set_deleted(true);      status.set_hidden(true);      skip_bits_ = status.bits();      skip_fwd();    }    else skip_bits_ = 0;  }  /// Turn on skipping: automatically skip deleted/hidden elements  void disable_skipping() { skip_bits_ = 0; }private:  void skip_fwd()   {    assert(mesh_ && skip_bits_);    while ((hnd_.idx() < (signed) mesh_->n_halfedges()) && 	   (mesh_->status(hnd_).bits() & skip_bits_))      hnd_.__increment();  }  void skip_bwd()   {    assert(mesh_ && skip_bits_);    while ((hnd_.idx() >= 0) && 	   (mesh_->status(hnd_).bits() & skip_bits_))      hnd_.__decrement();  }private:  mesh_ptr      mesh_;  value_handle  hnd_;  unsigned int  skip_bits_;};//== CLASS DEFINITION =========================================================	      /** \class EdgeIterT IteratorsT.hh <OpenMesh/Mesh/Iterators/IteratorsT.hh>    Linear iterator.*/template <class Mesh>class EdgeIterT{public:    //--- Typedefs ---  typedef typename Mesh::Edge           value_type;  typedef typename Mesh::EdgeHandle         value_handle;#if 0  typedef const value_type&    reference;  typedef const value_type*    pointer;  typedef const Mesh*          mesh_ptr;  typedef const Mesh&          mesh_ref;#else  typedef value_type&          reference;  typedef value_type*          pointer;  typedef Mesh*                mesh_ptr;  typedef Mesh&                mesh_ref;#endif  /// Default constructor.  EdgeIterT()     : mesh_(0), skip_bits_(0)   {}  /// Construct with mesh and a target handle.   EdgeIterT(mesh_ref _mesh, value_handle _hnd, bool _skip=false)     : mesh_(&_mesh), hnd_(_hnd), skip_bits_(0)   {    if (_skip) enable_skipping();  }  /// Copy constructor  EdgeIterT(const EdgeIterT& _rhs)     : mesh_(_rhs.mesh_), hnd_(_rhs.hnd_), skip_bits_(_rhs.skip_bits_)  {}    /// Assignment operator  EdgeIterT& operator=(const EdgeIterT<Mesh>& _rhs)   {    mesh_      = _rhs.mesh_;    hnd_       = _rhs.hnd_;    skip_bits_ = _rhs.skip_bits_;    return *this;  }#if 0  /// Construct from a non-const iterator  EdgeIterT(const EdgeIterT<Mesh>& _rhs)     : mesh_(_rhs.mesh_), hnd_(_rhs.hnd_), skip_bits_(_rhs.skip_bits_)   {}    /// Assignment from non-const iterator  EdgeIterT& operator=(const EdgeIterT<Mesh>& _rhs)   {    mesh_      = _rhs.mesh_;    hnd_       = _rhs.hnd_;    skip_bits_ = _rhs.skip_bits_;    return *this;  }#else  friend class ConstEdgeIterT<Mesh>;#endif  /// Standard dereferencing operator.  reference operator*()  const { return mesh_->deref(hnd_); }    /// Standard pointer operator.  pointer   operator->() const { return &(mesh_->deref(hnd_)); }    /// Get the handle of the item the iterator refers to.  value_handle handle() const { return hnd_; }  /// Cast to the handle of the item the iterator refers to.  operator value_handle() const { return hnd_; }  /// Are two iterators equal? Only valid if they refer to the same mesh!  bool operator==(const EdgeIterT& _rhs) const   { return ((mesh_ == _rhs.mesh_) && (hnd_ == _rhs.hnd_)); }  /// Not equal?  bool operator!=(const EdgeIterT& _rhs) const   { return !operator==(_rhs); }    /// Standard pre-increment operator  EdgeIterT& operator++()   { hnd_.__increment(); if (skip_bits_) skip_fwd(); return *this; }  /// Standard pre-decrement operator  EdgeIterT& operator--()   { hnd_.__decrement(); if (skip_bits_) skip_bwd(); return *this; }    /// Turn on skipping: automatically skip deleted/hidden elements  void enable_skipping()  {    if (mesh_ && mesh_->has_edge_status())    {      Attributes::StatusInfo status;      status.set_deleted(true);      status.set_hidden(true);      skip_bits_ = status.bits();      skip_fwd();    }    else skip_bits_ = 0;  }  /// Turn on skipping: automatically skip deleted/hidden elements  void disable_skipping() { skip_bits_ = 0; }private:  void skip_fwd()   {    assert(mesh_ && skip_bits_);    while ((hnd_.idx() < (signed) mesh_->n_edges()) && 	   (mesh_->status(hnd_).bits() & skip_bits_))      hnd_.__increment();  }  void skip_bwd()   {    assert(mesh_ && skip_bits_);    while ((hnd_.idx() >= 0) && 	   (mesh_->status(hnd_).bits() & skip_bits_))      hnd_.__decrement();  }private:  mesh_ptr      mesh_;  value_handle  hnd_;  unsigned int  skip_bits_;};//== CLASS DEFINITION =========================================================	      /** \class ConstEdgeIterT IteratorsT.hh <OpenMesh/Mesh/Iterators/IteratorsT.hh>    Linear iterator.*/template <class Mesh>class ConstEdgeIterT{public:    //--- Typedefs ---  typedef typename Mesh::Edge           value_type;  typedef typename Mesh::EdgeHandle         value_handle;#if 1  typedef const value_type&    reference;  typedef const value_type*    pointer;  typedef const Mesh*          mesh_ptr;  typedef const Mesh&          mesh_ref;#else  typedef value_type&          reference;  typedef value_type*          pointer;  typedef Mesh*                mesh_ptr;  typedef Mesh&                mesh_ref;#endif  /// Default constructor.  ConstEdgeIterT()     : mesh_(0), skip_bits_(0)   {}

⌨️ 快捷键说明

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