MeshLib C++ Docs
Loading...
Searching...
No Matches
MREdgeIterator.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRMeshTopology.h"
4#include "MRIteratorRange.h"
5#include <iterator>
6
7namespace MR
8{
9
10// The iterator to find all not-lone undirected edges in the mesh
11class UndirectedEdgeIterator
12{
13public:
14 using iterator_category = std::forward_iterator_tag;
15 using value_type = UndirectedEdgeId;
16
17 // creates begin iterator
18 UndirectedEdgeIterator( const MeshTopology & topology ) : topology_( &topology )
19 {
20 if ( topology_->undirectedEdgeSize() == 0 )
21 return; // end has reached
22 edge_ = UndirectedEdgeId{0};
23 if ( topology_->isLoneEdge( edge_ ) )
24 operator ++();
25 }
26 // creates end iterator
27 UndirectedEdgeIterator() = default;
28
29 UndirectedEdgeIterator & operator++( )
30 {
31 assert( edge_.valid() );
32 for (;;)
33 {
34 ++edge_;
35 if ( edge_ >= topology_->undirectedEdgeSize() )
36 {
37 edge_ = UndirectedEdgeId{};
38 break;
39 }
40 if ( !topology_->isLoneEdge( edge_ ) )
41 break;
42 }
43 return * this;
44 }
45 UndirectedEdgeId operator *( ) const { return edge_; }
46
47private:
48 const MeshTopology * topology_ = nullptr;
49 UndirectedEdgeId edge_;
50};
51
53 { return *a == *b; }
54
56 { return *a != *b; }
57
60
61} //namespace MR
Definition MRMesh/MRMeshTopology.h:19
Definition MREdgeIterator.h:12
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...
Definition MRCameraOrientationPlugin.h:8
bool operator!=(const Color &a, const Color &b)
Definition MRMesh/MRColor.h:101
IteratorRange< UndirectedEdgeIterator > undirectedEdges(const MeshTopology &topology)
Definition MREdgeIterator.h:58
Definition MRMeshFwd.h:505
readonly unsafe bool valid()