Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions source/MRMesh/MRUniteManyMeshes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,7 @@ tl::expected<Mesh, std::string> uniteManyMeshes(
if ( params.useRandomShifts )
{
randomShifts.resize( mergedMeshes.size() );
std::random_device rd;
std::mt19937 mt( rd() );
std::mt19937 mt( params.randomShiftsSeed );
std::uniform_real_distribution<float> dist( -params.maxAllowedError * 0.5f, params.maxAllowedError * 0.5f );
for ( auto& shift : randomShifts )
for ( int i = 0; i < 3; ++i )
Expand All @@ -154,7 +153,7 @@ tl::expected<Mesh, std::string> uniteManyMeshes(

// parallel reduce unite merged meshes
BooleanReduce reducer( mergedMeshes, randomShifts, params.maxAllowedError, params.fixDegenerations );
tbb::parallel_reduce( tbb::blocked_range<int>( 0, int( mergedMeshes.size() ), 1 ), reducer );
tbb::parallel_deterministic_reduce( tbb::blocked_range<int>( 0, int( mergedMeshes.size() ), 1 ), reducer );
if ( !reducer.error.empty() )
return tl::make_unexpected( "Error while uniting meshes: " + reducer.error );

Expand Down
2 changes: 2 additions & 0 deletions source/MRMesh/MRUniteManyMeshes.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ struct UniteManyMeshesParams
// Max allowed random shifts in each direction, and max allowed deviation after degeneration fixing
// not used if both flags (useRandomShifts,fixDegenerations) are false
float maxAllowedError{ 1e-5f };
// Seed that is used for random shifts
unsigned int randomShiftsSeed{ 0 };
};

// Computes the surface of objects' union each of which is defined by its own surface mesh
Expand Down