Skip to content

Commit 8c32a7d

Browse files
committed
arnaud and melchior's comments
1 parent 04ce6a7 commit 8c32a7d

File tree

2 files changed

+72
-93
lines changed

2 files changed

+72
-93
lines changed

src/geode/mesh/helpers/convert_solid_mesh.cpp

Lines changed: 67 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
#include <geode/mesh/core/hybrid_solid.h>
3333
#include <geode/mesh/core/light_regular_grid.h>
3434
#include <geode/mesh/core/regular_grid_solid.h>
35-
#include <geode/mesh/core/solid_facets.h>
3635
#include <geode/mesh/core/tetrahedral_solid.h>
3736
#include <geode/mesh/helpers/detail/element_identifier.h>
3837
#include <geode/mesh/helpers/detail/solid_merger.h>
@@ -173,152 +172,132 @@ namespace
173172
ordered_vertices[1] = first_polyhedron_facet_vertices[3];
174173
ordered_vertices[2] = first_polyhedron_facet_vertices[2];
175174
ordered_vertices[3] = first_polyhedron_facet_vertices[1];
176-
geode::index_t already_used_facet{ 0 };
177-
for( const auto f :
178-
geode::Range( 1, solid.nb_polyhedron_facets( hexahedron_id ) ) )
175+
for( const auto f : geode::Range( 1, 6 ) )
179176
{
180177
const auto polyhedron_facet_vertices =
181178
solid.polyhedron_facet_vertices( { hexahedron_id, f } );
182-
if( absl::c_find( polyhedron_facet_vertices, ordered_vertices[0] )
183-
!= polyhedron_facet_vertices.end()
179+
const auto v_id_0 =
180+
absl::c_find( polyhedron_facet_vertices, ordered_vertices[0] );
181+
if( v_id_0 != polyhedron_facet_vertices.end()
184182
&& absl::c_find(
185183
polyhedron_facet_vertices, ordered_vertices[1] )
186184
!= polyhedron_facet_vertices.end() )
187185
{
188-
for( const auto v_id :
189-
geode::Indices( polyhedron_facet_vertices ) )
190-
{
191-
if( polyhedron_facet_vertices.at( v_id )
192-
== ordered_vertices[0] )
193-
{
194-
ordered_vertices[4] =
195-
polyhedron_facet_vertices[( v_id + 1 ) % 4];
196-
ordered_vertices[5] =
197-
polyhedron_facet_vertices[( v_id + 2 ) % 4];
198-
already_used_facet = f;
199-
break;
200-
}
201-
}
202-
break;
203-
}
204-
}
205-
for( const auto f :
206-
geode::Range( 1, solid.nb_polyhedron_facets( hexahedron_id ) ) )
207-
{
208-
const auto polyhedron_facet_vertices =
209-
solid.polyhedron_facet_vertices( { hexahedron_id, f } );
210-
if( f == already_used_facet )
211-
{
186+
const auto index_v_id_0 =
187+
std::distance( polyhedron_facet_vertices.begin(), v_id_0 );
188+
ordered_vertices[4] =
189+
polyhedron_facet_vertices[( index_v_id_0 + 1 ) % 4];
190+
ordered_vertices[5] =
191+
polyhedron_facet_vertices[( index_v_id_0 + 2 ) % 4];
212192
continue;
213193
}
214-
if( absl::c_find( polyhedron_facet_vertices, ordered_vertices[4] )
215-
!= polyhedron_facet_vertices.end()
194+
const auto v_id_2 =
195+
absl::c_find( polyhedron_facet_vertices, ordered_vertices[2] );
196+
if( v_id_2 != polyhedron_facet_vertices.end()
216197
&& absl::c_find(
217-
polyhedron_facet_vertices, ordered_vertices[5] )
198+
polyhedron_facet_vertices, ordered_vertices[3] )
218199
!= polyhedron_facet_vertices.end() )
219200
{
220-
for( const auto v_id :
221-
geode::Indices( polyhedron_facet_vertices ) )
222-
{
223-
if( polyhedron_facet_vertices.at( v_id )
224-
== ordered_vertices[4] )
225-
{
226-
ordered_vertices[7] =
227-
polyhedron_facet_vertices[( v_id + 1 ) % 4];
228-
ordered_vertices[6] =
229-
polyhedron_facet_vertices[( v_id + 2 ) % 4];
230-
break;
231-
}
232-
}
233-
break;
201+
const auto index_v_id_2 =
202+
std::distance( polyhedron_facet_vertices.begin(), v_id_2 );
203+
ordered_vertices[6] =
204+
polyhedron_facet_vertices[( index_v_id_2 + 1 ) % 4];
205+
ordered_vertices[7] =
206+
polyhedron_facet_vertices[( index_v_id_2 + 2 ) % 4];
207+
continue;
234208
}
235209
}
236210
return ordered_vertices;
237211
}
238212

239213
std::array< geode::index_t, 6 > order_prism_vertices(
240-
const geode::index_t p, const geode::SolidMesh3D& solid )
214+
const geode::index_t prism_id, const geode::SolidMesh3D& solid )
241215
{
242216
std::array< geode::index_t, 6 > ordered_vertices;
243217
geode::index_t already_used_facet{ 0 };
244-
for( const auto f : geode::Range( 0, solid.nb_polyhedron_facets( p ) ) )
218+
for( const auto f : geode::Range{ 5 } )
245219
{
246-
if( solid.nb_polyhedron_facet_vertices( { p, f } ) == 3 )
220+
if( solid.nb_polyhedron_facet_vertices( { prism_id, f } ) == 3 )
247221
{
248222
const auto vertices =
249-
solid.polyhedron_facet_vertices( { p, f } );
223+
solid.polyhedron_facet_vertices( { prism_id, f } );
250224
ordered_vertices[0] = vertices[0];
251225
ordered_vertices[1] = vertices[2];
252226
ordered_vertices[2] = vertices[1];
253227
already_used_facet = f;
254228
break;
255229
}
256230
}
257-
for( const auto f : geode::Range( 0, solid.nb_polyhedron_facets( p ) ) )
231+
for( const auto f : geode::Range{ 5 } )
258232
{
259233
if( f == already_used_facet )
260234
{
261235
continue;
262236
}
263237
const auto facet_vertices =
264-
solid.polyhedron_facet_vertices( { p, f } );
265-
if( absl::c_find( facet_vertices, ordered_vertices[0] )
266-
!= facet_vertices.end()
267-
&& absl::c_find( facet_vertices, ordered_vertices[2] )
268-
!= facet_vertices.end() )
238+
solid.polyhedron_facet_vertices( { prism_id, f } );
239+
const auto v_id =
240+
absl::c_find( facet_vertices, ordered_vertices[0] );
241+
if( v_id == facet_vertices.end()
242+
|| absl::c_find( facet_vertices, ordered_vertices[2] )
243+
== facet_vertices.end() )
269244
{
270-
for( const auto& v_id : geode::Indices( facet_vertices ) )
271-
{
272-
if( facet_vertices.at( v_id ) == ordered_vertices[0] )
273-
{
274-
ordered_vertices[3] = facet_vertices[( v_id + 1 ) % 4];
275-
ordered_vertices[5] = facet_vertices[( v_id + 2 ) % 4];
276-
break;
277-
}
278-
}
279-
break;
245+
continue;
280246
}
247+
const auto index_v_id =
248+
std::distance( facet_vertices.begin(), v_id );
249+
ordered_vertices[3] = facet_vertices[( index_v_id + 1 ) % 4];
250+
ordered_vertices[5] = facet_vertices[( index_v_id + 2 ) % 4];
251+
break;
281252
}
282-
for( const auto v : geode::Range( 6 ) )
253+
for( const auto v : geode::Range{ 6 } )
283254
{
284-
if( ordered_vertices[1] == v || ordered_vertices[2] == v
285-
|| ordered_vertices[3] == v || ordered_vertices[4] == v
286-
|| ordered_vertices[5] == v || ordered_vertices[0] == v )
255+
const auto solid_vertex =
256+
solid.polyhedron_vertex( { prism_id, v } );
257+
if( ordered_vertices[1] == solid_vertex
258+
|| ordered_vertices[2] == solid_vertex
259+
|| ordered_vertices[3] == solid_vertex
260+
|| ordered_vertices[5] == solid_vertex
261+
|| ordered_vertices[0] == solid_vertex )
287262
{
288263
continue;
289264
}
290-
ordered_vertices[4] = v;
265+
ordered_vertices[4] = solid_vertex;
291266
break;
292267
}
293268
return ordered_vertices;
294269
}
295270
} // namespace
296271

297272
std::array< geode::index_t, 5 > order_pyramid_vertices(
298-
const geode::index_t p, const geode::SolidMesh3D& solid )
273+
const geode::index_t pyramid_id, const geode::SolidMesh3D& solid )
299274
{
300275
std::array< geode::index_t, 5 > ordered_vertices;
301276

302-
for( const auto f : geode::Range( 0, solid.nb_polyhedron_facets( p ) ) )
277+
for( const auto f : geode::Range{ 5 } )
303278
{
304-
if( solid.nb_polyhedron_facet_vertices( { p, f } ) == 4 )
279+
if( solid.nb_polyhedron_facet_vertices( { pyramid_id, f } ) == 4 )
305280
{
306-
const auto vertices = solid.polyhedron_facet_vertices( { p, f } );
281+
const auto vertices =
282+
solid.polyhedron_facet_vertices( { pyramid_id, f } );
307283
ordered_vertices[0] = vertices[0];
308284
ordered_vertices[1] = vertices[3];
309285
ordered_vertices[2] = vertices[2];
310286
ordered_vertices[3] = vertices[1];
311287
break;
312288
}
313289
}
314-
for( const auto v : geode::Range( 5 ) )
290+
for( const auto v : geode::Range{ 5 } )
315291
{
316-
if( ordered_vertices[1] == v || ordered_vertices[2] == v
317-
|| ordered_vertices[3] == v || ordered_vertices[0] == v )
292+
const auto solid_vertex = solid.polyhedron_vertex( { pyramid_id, v } );
293+
if( ordered_vertices[1] == solid_vertex
294+
|| ordered_vertices[2] == solid_vertex
295+
|| ordered_vertices[3] == solid_vertex
296+
|| ordered_vertices[0] == solid_vertex )
318297
{
319298
continue;
320299
}
321-
ordered_vertices[4] = v;
300+
ordered_vertices[4] = solid_vertex;
322301
break;
323302
}
324303
return ordered_vertices;
@@ -416,27 +395,23 @@ namespace geode
416395
{
417396
const auto ordered_vertices =
418397
order_hexahedron_vertices( p, solid );
419-
builder->create_hexahedron(
420-
{ ordered_vertices[0], ordered_vertices[1],
421-
ordered_vertices[2], ordered_vertices[3],
422-
ordered_vertices[4], ordered_vertices[5],
423-
ordered_vertices[6], ordered_vertices[7] } );
398+
for( const auto vertex : ordered_vertices )
399+
{
400+
DEBUG( vertex );
401+
SDEBUG( solid.point( vertex ) );
402+
}
403+
builder->create_hexahedron( { ordered_vertices } );
424404
}
425405
else if( vertices.size() == 5 )
426406
{
427407
const auto ordered_vertices =
428408
order_pyramid_vertices( p, solid );
429-
builder->create_pyramid( { ordered_vertices[0],
430-
ordered_vertices[1], ordered_vertices[2],
431-
ordered_vertices[3], ordered_vertices[4] } );
409+
builder->create_pyramid( ordered_vertices );
432410
}
433411
else if( vertices.size() == 6 )
434412
{
435413
const auto ordered_vertices = order_prism_vertices( p, solid );
436-
builder->create_prism(
437-
{ ordered_vertices[0], ordered_vertices[1],
438-
ordered_vertices[2], ordered_vertices[3],
439-
ordered_vertices[4], ordered_vertices[5] } );
414+
builder->create_prism( { ordered_vertices } );
440415
}
441416
}
442417
for( const auto p : Range{ solid.nb_polyhedra() } )

tests/mesh/test-convert-solid.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040

4141
#include <geode/mesh/helpers/convert_solid_mesh.h>
4242

43+
// NOLINTBEGIN(*-magic-numbers)
44+
4345
void test_tetrahedral_solid()
4446
{
4547
geode::OpenGeodeMeshLibrary::initialize();
@@ -151,10 +153,12 @@ void test_hybrid_solid()
151153
geode::save_hybrid_solid(
152154
*hybrid_solid_pyramid.value(), "hybrid_solid_pyramid.og_hso3d" );
153155
}
156+
154157
void test()
155158
{
156159
test_tetrahedral_solid();
157160
test_hybrid_solid();
158161
}
159162

160-
OPENGEODE_TEST( "convert-solid" )
163+
OPENGEODE_TEST( "convert-solid" )
164+
// NOLINTEND(*-magic-numbers)

0 commit comments

Comments
 (0)