Skip to content

Commit 2d7e72b

Browse files
Merge pull request #1070 from Geode-solutions/fix/graph-identifier
fix(Mesh): allow graph identifier with a max number of vertices in cl…
2 parents 160e99c + 5d3f4cf commit 2d7e72b

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

include/geode/mesh/helpers/detail/component_identifier.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ namespace geode
5353

5454
index_t identify_vertices();
5555

56+
index_t identify_vertices( index_t nb_max_vertices );
57+
5658
[[nodiscard]] index_t vertex_identifier( index_t vertex_id ) const;
5759

5860
[[nodiscard]] absl::FixedArray< std::vector< index_t > >

src/geode/mesh/helpers/detail/component_identifier.cpp

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
#include <geode/basic/attribute.hpp>
2929
#include <geode/basic/attribute_manager.hpp>
30+
#include <geode/basic/logger.hpp>
3031
#include <geode/basic/pimpl_impl.hpp>
3132

3233
#include <geode/mesh/core/edged_curve.hpp>
@@ -78,12 +79,17 @@ namespace geode
7879
}
7980

8081
index_t identify_elements()
82+
{
83+
return identify_elements( identification_.size() );
84+
}
85+
86+
index_t identify_elements( index_t nb_max_elements )
8187
{
8288
for( const auto p : Indices{ identification_ } )
8389
{
8490
if( identifier( p ) == NO_ID )
8591
{
86-
propagate( p, nb_components_ );
92+
propagate( p, nb_components_, nb_max_elements );
8793
nb_components_++;
8894
}
8995
}
@@ -114,11 +120,13 @@ namespace geode
114120
}
115121

116122
private:
117-
void propagate( index_t element_from, index_t tag_id )
123+
void propagate(
124+
index_t element_from, index_t tag_id, index_t nb_max_elements )
118125
{
126+
index_t counter{ 0 };
119127
std::queue< index_t > queue;
120128
queue.emplace( element_from );
121-
while( !queue.empty() )
129+
while( !queue.empty() && counter < nb_max_elements )
122130
{
123131
const auto cur_el = queue.front();
124132
queue.pop();
@@ -127,6 +135,7 @@ namespace geode
127135
continue;
128136
}
129137
identification_[cur_el] = tag_id;
138+
counter++;
130139
add_adjacents( cur_el, queue );
131140
}
132141
}
@@ -176,6 +185,11 @@ namespace geode
176185
return impl_->identify_elements();
177186
}
178187

188+
index_t GraphIdentifier::identify_vertices( index_t nb_max_vertices )
189+
{
190+
return impl_->identify_elements( nb_max_vertices );
191+
}
192+
179193
index_t GraphIdentifier::vertex_identifier( index_t vertex_id ) const
180194
{
181195
return impl_->identifier( vertex_id );

0 commit comments

Comments
 (0)