@@ -24,6 +24,8 @@ struct stack_state {
2424 util::mdarray<Bool, 3 > space;
2525 std::vector<std::shared_ptr<const part>> ordered_parts;
2626 stack_result result;
27+ std::size_t total_parts;
28+ std::size_t total_placed;
2729};
2830
2931void place (const util::mdspan<Bool, 3 > space, const int index, const util::mdspan<const int , 3 > obj, const int x, const int y, const int z) {
@@ -100,6 +102,9 @@ std::size_t try_place(const stack_parameters& params, stack_state& state, const
100102 new_piece.translation += translation;
101103 place (state.space , bit_index, state.voxels [part_index], x, y, z); // Mark voxels as occupied
102104 ++placed;
105+ ++state.total_placed ;
106+ params.set_progress (state.total_placed , state.total_parts );
107+ params.display_mesh (state.result .mesh , max);
103108 if (to_place == placed) { // All instances of this part placed, move to next part
104109 return placed;
105110 } else { // Move to next instance of part
@@ -125,10 +130,11 @@ std::optional<stack_result> stack_impl(const stack_parameters& params, const std
125130
126131 double triangles = 0 ;
127132 const double scale_factor = 1 / params.resolution ;
128- int total_parts = 0 ;
133+ state.total_parts = 0 ;
134+ state.total_placed = 0 ;
129135 for (const std::shared_ptr<const part> part : state.ordered_parts ) {
130136 triangles += part->triangle_count * rotation_sets[part->rotation_index ].size ();
131- total_parts += part->quantity ;
137+ state. total_parts += part->quantity ;
132138 }
133139
134140 double progress = 0 ;
@@ -232,7 +238,6 @@ std::optional<stack_result> stack_impl(const stack_parameters& params, const std
232238
233239 params.set_progress (0 , 1 );
234240
235- std::size_t total_placed = 0 ;
236241 for (std::size_t part_index = 0 ; part_index != state.ordered_parts .size (); ++part_index) {
237242 std::size_t to_place = state.ordered_parts [part_index]->quantity ;
238243 while (to_place > 0 ) {
@@ -241,9 +246,6 @@ std::optional<stack_result> stack_impl(const stack_parameters& params, const std
241246 }
242247 const std::size_t placed = try_place (params, state, part_index, to_place, { max_x, max_y, max_z });
243248 to_place -= placed;
244- total_placed += placed;
245- params.set_progress (total_placed, total_parts);
246- params.display_mesh (state.result .mesh , max_x, max_y, max_z);
247249
248250 // If we have not placed a part, it means there are no more ways to place an instance of the current part in the box: it must be enlarged
249251 if (placed == 0 ) {
0 commit comments