Skip to content

Commit 1618a59

Browse files
Merge pull request #1027 from Geode-solutions/fix/missing_attributes_interpolation_in_convert_from_grid
fix(convert_grid_into_mesh): Fixed attributes not being interpolated …
2 parents a790edb + e2e31cb commit 1618a59

File tree

2 files changed

+34
-8
lines changed

2 files changed

+34
-8
lines changed

src/geode/mesh/helpers/convert_solid_mesh.cpp

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -203,15 +203,28 @@ namespace
203203
builder.set_point( vertex_id,
204204
grid.grid_point( grid.vertex_indices( vertex_id ) ) );
205205
}
206+
auto& solid_attribute_manager = tet_solid.vertex_attribute_manager();
207+
geode::internal::copy_attributes(
208+
grid.grid_vertex_attribute_manager(), solid_attribute_manager );
206209
geode::index_t counter{ grid.nb_grid_vertices() };
207210
for( const auto cell_id : cells_to_densify )
208211
{
209-
builder.set_point(
210-
counter, grid.cell_barycenter( grid.cell_indices( cell_id ) ) );
212+
const auto cell_indices = grid.cell_indices( cell_id );
213+
builder.set_point( counter, grid.cell_barycenter( cell_indices ) );
214+
std::vector< geode::index_t > cell_vertices;
215+
std::vector< double > lambdas;
216+
cell_vertices.reserve( 8 );
217+
lambdas.reserve( 8 );
218+
for( const auto& vertex_indices :
219+
grid.cell_vertices( cell_indices ) )
220+
{
221+
cell_vertices.push_back( grid.vertex_index( vertex_indices ) );
222+
lambdas.push_back( 0.125 );
223+
}
224+
solid_attribute_manager.interpolate_attribute_value(
225+
{ cell_vertices, lambdas }, counter );
211226
counter++;
212227
}
213-
geode::internal::copy_attributes( grid.grid_vertex_attribute_manager(),
214-
tet_solid.vertex_attribute_manager() );
215228
}
216229

217230
std::unique_ptr< geode::TetrahedralSolid3D >

src/geode/mesh/helpers/convert_surface_mesh.cpp

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -235,15 +235,28 @@ namespace
235235
builder.set_point( vertex_id,
236236
grid.grid_point( grid.vertex_indices( vertex_id ) ) );
237237
}
238+
auto& surface_attribute_manager = surface.vertex_attribute_manager();
239+
geode::internal::copy_attributes(
240+
grid.grid_vertex_attribute_manager(), surface_attribute_manager );
238241
geode::index_t counter{ grid.nb_grid_vertices() };
239242
for( const auto cell_id : cells_to_densify )
240243
{
241-
builder.set_point(
242-
counter, grid.cell_barycenter( grid.cell_indices( cell_id ) ) );
244+
const auto cell_indices = grid.cell_indices( cell_id );
245+
builder.set_point( counter, grid.cell_barycenter( cell_indices ) );
246+
std::vector< geode::index_t > cell_vertices;
247+
std::vector< double > lambdas;
248+
cell_vertices.reserve( 4 );
249+
lambdas.reserve( 4 );
250+
for( const auto& vertex_indices :
251+
grid.cell_vertices( cell_indices ) )
252+
{
253+
cell_vertices.push_back( grid.vertex_index( vertex_indices ) );
254+
lambdas.push_back( 0.25 );
255+
}
256+
surface_attribute_manager.interpolate_attribute_value(
257+
{ cell_vertices, lambdas }, counter );
243258
counter++;
244259
}
245-
geode::internal::copy_attributes( grid.grid_vertex_attribute_manager(),
246-
surface.vertex_attribute_manager() );
247260
}
248261

249262
template <>

0 commit comments

Comments
 (0)