Сеточные итераторы

Для работы с топологией сетки предусмотрено несколько типов итераторов. Они находятся в заголовочных файлах halfedge_iterators.h и halfedge_range_iterators.h:

  1. EdgeFanIterator – итератор для обхода рёбер веера вершины в направлении против часовой стрелки (см. рис. 1). Пример использования:

for( EdgeFanIterator it( halfedge, iEd ); !it.Done(); ++it );

или::

for( EdgeFanIterator it( halfedge, iVx, true ); !it.Done(); ++it ) {

    if( it.Edge() < SYS_MAX_T ) {
        ...
    }
    if( it.Twin() < SYS_MAX_T ) {
        ...
    }
}
../../../_images/P.2.2.1.png

Рис. 1

  1. EdgeFacetIterator – итератор для обхода рёбер фасета, начиная с ребра фасета, в направлении против часовой стрелки (см. рис. 2).

Пример использования:

for( EdgeFacetIterator it( halfedge, iFacet ); !it.Done(); ++it ) {

    const MbHalfedgeEdge & ed = halfedge.Edge( it.Edge() );
}
  1. EdgesAroundFacetBegEndPair AllEdgesAroundFacet( size_t iFacet ) const;

Диапазон для обхода рёбер фасета, начиная с ребра фасета в направлении против часовой стрелки (см. рис. 2). Пример использования:

for( const MbHalfedgeEdge & ed : halfedge.AllEdgesAroundFacet( iFacet ) ) {
    ...
}
../../../_images/P.2.2.2.png

Рис. 2

  1. VerticesAroundFacetBegEndPair AllVerticesAroundFacet( size_t iF ) const;

Диапазон для обхода всех вершин вокруг фасета, начиная с вершины, принадлежащей ребру, определяющему фасет, против часовой стрелки (см. рис. 3). Пример использования:

for( const MbHalfedgeVertex & v : halfedge.AllVerticesAroundFacet( iFacet ) ) {
    ...
}
../../../_images/P.2.2.3.png

Рис. 3

  1. EdgesAroundVertexBegEndPair AllEdgesAroundVertex( size_t iV ) const;

Диапазон для обхода всех рёбер (входящих и исходящих), смежных с вершиной, начиная с ребра, определяющего вершину (см. рис. 4). Порядок обхода – против часовой стрелки, с чередованием входящих и исходящих рёбер.

Пример использования:

for( const MbHalfedgeEdge & ed : halfedge.AllEdgesAroundVertex( iVx ) ) {
    ...
}
../../../_images/P.2.2.4.png

Рис. 4

  1. VerticesAroundVertexBegEndPair AllVerticesAroundVertex( size_t iV ) const;

Диапазон для обхода всех вершин, смежных с данной вершиной (см. рис. 5). Порядок обхода – против часовой стрелки, первая вершина смежна по ребру, определяющему вершину. Пример использования:

for( const MbHalfedgeVertex & v : halfedge.AllVerticesAroundVertex( iVx ) ) {
    ...
}
../../../_images/P.2.2.5.png

Рис. 5

  1. FacetsAroundVertexBegEndPair AllFacetsAroundVertex( size_t iV ) const;

Диапазон для обхода всех фасетов, включающих данную вершину (см. рис. 6). Порядок обхода – против часовой стрелки, первый фасет включает ребро, определяющее вершину. Пример использования:

for( const MbHalfedgeFacet & f : halfedge.AllFacetsAroundVertex( iVx ) ) {
    ...
}
../../../_images/P.2.2.6.png

Рис. 6