@@ -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