Skip to content

Commit 118015f

Browse files
committed
second version
1 parent 39ab08f commit 118015f

File tree

1 file changed

+35
-1
lines changed

1 file changed

+35
-1
lines changed

src/geode/mesh/helpers/convert_surface_mesh.cpp

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,19 +346,53 @@ namespace geode
346346
SurfaceMeshBuilder< dimension >& builder )
347347
{
348348
std::vector< bool > to_delete( surface.nb_polygons(), false );
349-
for( const auto p : geode::Range{ surface.nb_polygons() } )
349+
for( const auto p : Range{ surface.nb_polygons() } )
350350
{
351351
const auto nb_vertices = surface.nb_polygon_vertices( p );
352352
to_delete[p] = nb_vertices != 3;
353353
if( nb_vertices > 3 )
354354
{
355+
DEBUG( "====== " );
356+
DEBUG( p );
357+
absl::FixedArray< std::optional< PolygonEdge > > adjacents(
358+
nb_vertices, std::nullopt );
359+
for( const auto e : LRange{ nb_vertices } )
360+
{
361+
adjacents[e] = surface.polygon_adjacent_edge( { p, e } );
362+
}
355363
std::vector< index_t > new_polygons;
356364
new_polygons.reserve( nb_vertices - 2 );
357365
const auto vertices = surface.polygon_vertices( p );
358366
for( const auto v : LRange{ 2, nb_vertices } )
359367
{
360368
new_polygons.emplace_back( builder.create_polygon(
361369
{ vertices[0], vertices[v - 1], vertices[v] } ) );
370+
DEBUG( new_polygons.back() );
371+
}
372+
if( adjacents.front() )
373+
{
374+
builder.set_polygon_adjacent( { new_polygons.front(), 0 },
375+
adjacents.front()->polygon_id );
376+
builder.set_polygon_adjacent(
377+
adjacents.front().value(), new_polygons.front() );
378+
}
379+
for( const auto v : LRange{ 1, nb_vertices - 1 } )
380+
{
381+
if( adjacents[v] )
382+
{
383+
builder.set_polygon_adjacent(
384+
{ new_polygons[v - 1], 1 },
385+
adjacents[v]->polygon_id );
386+
builder.set_polygon_adjacent(
387+
adjacents[v].value(), new_polygons[v - 1] );
388+
}
389+
}
390+
if( adjacents.back() )
391+
{
392+
builder.set_polygon_adjacent( { new_polygons.back(), 2 },
393+
adjacents.back()->polygon_id );
394+
builder.set_polygon_adjacent(
395+
adjacents.back().value(), new_polygons.back() );
362396
}
363397
builder.compute_polygon_adjacencies( new_polygons );
364398
}

0 commit comments

Comments
 (0)