From a06e42d01f6f8b32f30dc2fbde8310223d3ccaa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= Date: Wed, 9 Jun 2021 16:44:35 +0200 Subject: [PATCH] Moved debug prints out of parallel cycles, and more debug prints were added for multi-material segmentation. --- src/libslic3r/MultiMaterialSegmentation.cpp | 32 +++++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/libslic3r/MultiMaterialSegmentation.cpp b/src/libslic3r/MultiMaterialSegmentation.cpp index a4237880f..6f1ca61c0 100644 --- a/src/libslic3r/MultiMaterialSegmentation.cpp +++ b/src/libslic3r/MultiMaterialSegmentation.cpp @@ -525,7 +525,7 @@ struct MMU_Graph nodes[to_idx].remove_edge(from_idx); } - size_t get_global_index(const size_t poly_idx, const size_t point_idx) const { return polygon_idx_offset[poly_idx] + point_idx; } + [[nodiscard]] size_t get_global_index(const size_t poly_idx, const size_t point_idx) const { return polygon_idx_offset[poly_idx] + point_idx; } void append_edge(const size_t &from_idx, const size_t &to_idx, int color = -1, ARC_TYPE type = ARC_TYPE::NON_BORDER) { @@ -546,7 +546,7 @@ struct MMU_Graph // Ignoring arcs in the opposite direction MMU_Graph::Arc get_arc(size_t idx) { return this->arcs[idx * 2]; } - size_t nodes_count() const { return this->nodes.size(); } + [[nodiscard]] size_t nodes_count() const { return this->nodes.size(); } void remove_nodes_with_one_arc() { @@ -602,12 +602,12 @@ struct MMU_Graph return vertex->color() < this->all_border_points; } - inline bool is_edge_attach_to_contour(const voronoi_diagram::const_edge_iterator &edge_iterator) const + [[nodiscard]] inline bool is_edge_attach_to_contour(const voronoi_diagram::const_edge_iterator &edge_iterator) const { return this->is_vertex_on_contour(edge_iterator->vertex0()) || this->is_vertex_on_contour(edge_iterator->vertex1()); } - inline bool is_edge_connecting_two_contour_vertices(const voronoi_diagram::const_edge_iterator &edge_iterator) const + [[nodiscard]] inline bool is_edge_connecting_two_contour_vertices(const voronoi_diagram::const_edge_iterator &edge_iterator) const { return this->is_vertex_on_contour(edge_iterator->vertex0()) && this->is_vertex_on_contour(edge_iterator->vertex1()); } @@ -1130,6 +1130,7 @@ static void cut_segmented_layers(const std::vector const float cut_width, const std::function &throw_on_cancel_callback) { + BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - cutting segmented layers in parallel - begin"; tbb::parallel_for(tbb::blocked_range(0, segmented_regions.size()),[&](const tbb::blocked_range& range) { for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) { throw_on_cancel_callback(); @@ -1143,6 +1144,7 @@ static void cut_segmented_layers(const std::vector segmented_regions[layer_idx] = segmented_regions_cuts; } }); // end of parallel_for + BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - cutting segmented layers in parallel - end"; } // Returns MMU segmentation of top and bottom layers based on painting in MMU segmentation gizmo @@ -1154,6 +1156,8 @@ static inline std::vector> mmu_segmentation_top_and_bott const ConstLayerPtrsAdaptor layers = print_object.layers(); std::vector> triangles_by_color(num_extruders); triangles_by_color.assign(num_extruders, std::vector(layers.size())); + + BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - top and bottom layers - projection of painted triangles - begin"; for (const ModelVolume *mv : print_object.model_object()->volumes) { for (size_t extruder_idx = 0; extruder_idx < num_extruders; ++extruder_idx) { throw_on_cancel_callback(); @@ -1203,6 +1207,7 @@ static inline std::vector> mmu_segmentation_top_and_bott } } } + BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - top and bottom layers - projection of painted triangles - end"; auto get_extrusion_width = [&layers = std::as_const(layers)](const size_t layer_idx) -> float { auto extrusion_width_it = std::max_element(layers[layer_idx]->regions().begin(), layers[layer_idx]->regions().end(), @@ -1272,8 +1277,8 @@ static inline std::vector> mmu_segmentation_top_and_bott triangles_by_color_bottom.assign(num_extruders, std::vector(input_expolygons.size())); triangles_by_color_top.assign(num_extruders, std::vector(input_expolygons.size())); + BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - segmentation of top layer - begin"; for (size_t layer_idx = 0; layer_idx < input_expolygons.size(); ++layer_idx) { - BOOST_LOG_TRIVIAL(debug) << "MMU segmentation of top layer: " << layer_idx; float extrusion_width = scale_(get_extrusion_width(layer_idx)); int top_solid_layers = get_top_solid_layers(layer_idx); ExPolygons top_expolygon = top_layers[layer_idx]; @@ -1306,9 +1311,10 @@ static inline std::vector> mmu_segmentation_top_and_bott } } } + BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - segmentation of top layer - end"; + BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - segmentation of bottom layer - begin"; for (size_t layer_idx = 0; layer_idx < input_expolygons.size(); ++layer_idx) { - BOOST_LOG_TRIVIAL(debug) << "MMU segmentation of bottom layer: " << layer_idx; float extrusion_width = scale_(get_extrusion_width(layer_idx)); int bottom_solid_layers = get_bottom_solid_layers(layer_idx); const ExPolygons &bottom_expolygon = bottom_layers[layer_idx]; @@ -1340,6 +1346,7 @@ static inline std::vector> mmu_segmentation_top_and_bott } } } + BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - segmentation of bottom layer - end"; std::vector> triangles_by_color_merged(num_extruders); triangles_by_color_merged.assign(num_extruders, std::vector(input_expolygons.size())); @@ -1369,9 +1376,9 @@ static std::vector>> merge_segmented_la { std::vector>> segmented_regions_merged(segmented_regions.size()); + BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - merging segmented layers in parallel - begin"; tbb::parallel_for(tbb::blocked_range(0, segmented_regions.size()), [&](const tbb::blocked_range &range) { for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) { - BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - merging region: " << layer_idx; for (const std::pair &colored_expoly : segmented_regions[layer_idx]) { throw_on_cancel_callback(); ExPolygons cut_colored_expoly = {colored_expoly.first}; @@ -1386,6 +1393,7 @@ static std::vector>> merge_segmented_la segmented_regions_merged[layer_idx].emplace_back(std::move(expoly), color_idx); } }); // end of parallel_for + BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - merging segmented layers in parallel - end"; return segmented_regions_merged; } @@ -1402,6 +1410,7 @@ std::vector>> multi_material_segmentati throw_on_cancel_callback(); // Merge all regions and remove small holes + BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - slices preparation in parallel - begin"; tbb::parallel_for(tbb::blocked_range(0, layers.size()), [&](const tbb::blocked_range &range) { for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) { throw_on_cancel_callback(); @@ -1425,6 +1434,7 @@ std::vector>> multi_material_segmentati input_polygons[layer_idx] = to_polygons(input_expolygons[layer_idx]); } }); // end of parallel_for + BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - slices preparation in parallel - end"; for (size_t layer_idx = 0; layer_idx < layers.size(); ++layer_idx) { throw_on_cancel_callback(); @@ -1434,6 +1444,7 @@ std::vector>> multi_material_segmentati edge_grids[layer_idx].create(input_expolygons[layer_idx], coord_t(scale_(10.))); } + BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - projection of painted triangles - begin"; for (const ModelVolume *mv : print_object.model_object()->volumes) { const size_t num_extruders = print_object.print()->config().nozzle_diameter.size(); for (size_t extruder_idx = 1; extruder_idx < num_extruders; ++extruder_idx) { @@ -1500,12 +1511,14 @@ std::vector>> multi_material_segmentati } } } + BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - projection of painted triangles - end"; + BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - painted layers count: " + << std::count_if(painted_lines.begin(), painted_lines.end(), [](const std::vector &pl) { return !pl.empty(); }); + BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - layers segmentation in parallel - begin"; tbb::parallel_for(tbb::blocked_range(0, print_object.layers().size()), [&](const tbb::blocked_range &range) { for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) { throw_on_cancel_callback(); - // for(size_t layer_idx = 0; layer_idx < print_object.layers().size(); ++layer_idx) { - BOOST_LOG_TRIVIAL(debug) << "MMU segmentation of layer: " << layer_idx; auto comp = [&edge_grids, layer_idx](const PaintedLine &first, const PaintedLine &second) { Point first_start_p = *(edge_grids[layer_idx].contours()[first.contour_idx].begin() + first.line_idx); @@ -1530,6 +1543,7 @@ std::vector>> multi_material_segmentati } } }); // end of parallel_for + BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - layers segmentation in parallel - end"; throw_on_cancel_callback(); if (auto w = print_object.config().mmu_segmented_region_max_width; w > 0.f) {