Сеточные итераторы
Для работы с топологией сетки предусмотрено несколько типов итераторов. Они находятся в заголовочных файлах halfedge_iterators.h и halfedge_range_iterators.h:
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 ) {
...
}
}
Рис. 1
EdgeFacetIterator – итератор для обхода рёбер фасета, начиная с ребра фасета, в направлении против часовой стрелки (см. рис. 2).
Пример использования:
for( EdgeFacetIterator it( halfedge, iFacet ); !it.Done(); ++it ) {
const MbHalfedgeEdge & ed = halfedge.Edge( it.Edge() );
}
EdgesAroundFacetBegEndPair AllEdgesAroundFacet( size_t iFacet ) const;
Диапазон для обхода рёбер фасета, начиная с ребра фасета в направлении против часовой стрелки (см. рис. 2). Пример использования:
for( const MbHalfedgeEdge & ed : halfedge.AllEdgesAroundFacet( iFacet ) ) {
...
}
Рис. 2
VerticesAroundFacetBegEndPair AllVerticesAroundFacet( size_t iF ) const;
Диапазон для обхода всех вершин вокруг фасета, начиная с вершины, принадлежащей ребру, определяющему фасет, против часовой стрелки (см. рис. 3). Пример использования:
for( const MbHalfedgeVertex & v : halfedge.AllVerticesAroundFacet( iFacet ) ) {
...
}
Рис. 3
EdgesAroundVertexBegEndPair AllEdgesAroundVertex( size_t iV ) const;
Диапазон для обхода всех рёбер (входящих и исходящих), смежных с вершиной, начиная с ребра, определяющего вершину (см. рис. 4). Порядок обхода – против часовой стрелки, с чередованием входящих и исходящих рёбер.
Пример использования:
for( const MbHalfedgeEdge & ed : halfedge.AllEdgesAroundVertex( iVx ) ) {
...
}
Рис. 4
VerticesAroundVertexBegEndPair AllVerticesAroundVertex( size_t iV ) const;
Диапазон для обхода всех вершин, смежных с данной вершиной (см. рис. 5). Порядок обхода – против часовой стрелки, первая вершина смежна по ребру, определяющему вершину. Пример использования:
for( const MbHalfedgeVertex & v : halfedge.AllVerticesAroundVertex( iVx ) ) {
...
}
Рис. 5
FacetsAroundVertexBegEndPair AllFacetsAroundVertex( size_t iV ) const;
Диапазон для обхода всех фасетов, включающих данную вершину (см. рис. 6). Порядок обхода – против часовой стрелки, первый фасет включает ребро, определяющее вершину. Пример использования:
for( const MbHalfedgeFacet & f : halfedge.AllFacetsAroundVertex( iVx ) ) {
...
}
Рис. 6