MeshLib C++ Docs
Loading...
Searching...
No Matches
MRPolylineEdgeIterator.h
Go to the documentation of this file.
1#pragma once
2
4#include "MRIteratorRange.h"
5#include <iterator>
6
7namespace MR
8{
11
12
16{
17public:
18 using iterator_category = std::forward_iterator_tag;
19 using value_type = UndirectedEdgeId;
20
22 PolylineUndirectedEdgeIterator( const PolylineTopology & topology ) : topology_( &topology )
23 {
24 if ( topology_->undirectedEdgeSize() == 0 )
25 return;
26 edge_ = UndirectedEdgeId{0};
27 if ( topology_->isLoneEdge( edge_ ) )
29 }
32
34 {
35 assert( edge_.valid() );
36 for (;;)
37 {
38 ++edge_;
39 if ( edge_ >= topology_->undirectedEdgeSize() )
40 {
41 edge_ = UndirectedEdgeId{};
42 break;
43 }
44 if ( !topology_->isLoneEdge( edge_ ) )
45 break;
46 }
47 return * this;
48 }
49 UndirectedEdgeId operator *( ) const { return edge_; }
50
51private:
52 const PolylineTopology * topology_ = nullptr;
53 UndirectedEdgeId edge_;
54};
55
58
60 { return *a == *b; }
61
63 { return *a != *b; }
64
65inline IteratorRange<PolylineUndirectedEdgeIterator> undirectedEdges( const PolylineTopology & topology )
66 { return { PolylineUndirectedEdgeIterator( topology ), PolylineUndirectedEdgeIterator() }; }
67
69
70}
Definition MRPolylineTopology.h:18
Definition MRPolylineEdgeIterator.h:16
MRMESH_API bool operator==(const BitSet &a, const BitSet &b)
compare that two bit sets have the same set bits (they can be equal even if sizes are distinct but la...
PolylineUndirectedEdgeIterator & operator++()
Definition MRPolylineEdgeIterator.h:33
size_t undirectedEdgeSize() const
returns the number of undirected edges (pairs of half-edges) including lone ones
Definition MRPolylineTopology.h:67
MRMESH_API bool isLoneEdge(EdgeId a) const
checks whether the edge is disconnected from all other edges and disassociated from all vertices (as ...
bool operator!=(const Color &a, const Color &b)
Definition MRColor.h:104
IteratorRange< UndirectedEdgeIterator > undirectedEdges(const MeshTopology &topology)
Definition MREdgeIterator.h:61
PolylineUndirectedEdgeIterator(const PolylineTopology &topology)
creates begin iterator
Definition MRPolylineEdgeIterator.h:22
std::forward_iterator_tag iterator_category
Definition MRPolylineEdgeIterator.h:18
UndirectedEdgeId operator*() const
Definition MRPolylineEdgeIterator.h:49
PolylineUndirectedEdgeIterator()=default
creates end iterator
UndirectedEdgeId value_type
Definition MRPolylineEdgeIterator.h:19
only for bindings generation
Definition MRCameraOrientationPlugin.h:8