Moved debug prints out of parallel cycles, and more debug prints were added for multi-material segmentation.
This commit is contained in:
parent
15a1b51339
commit
a06e42d01f
1 changed files with 23 additions and 9 deletions
|
@ -525,7 +525,7 @@ struct MMU_Graph
|
||||||
nodes[to_idx].remove_edge(from_idx);
|
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)
|
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
|
// Ignoring arcs in the opposite direction
|
||||||
MMU_Graph::Arc get_arc(size_t idx) { return this->arcs[idx * 2]; }
|
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()
|
void remove_nodes_with_one_arc()
|
||||||
{
|
{
|
||||||
|
@ -602,12 +602,12 @@ struct MMU_Graph
|
||||||
return vertex->color() < this->all_border_points;
|
return vertex->color() < this->all_border_points;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool is_edge_attach_to_contour(const voronoi_diagram<double>::const_edge_iterator &edge_iterator) const
|
[[nodiscard]] inline bool is_edge_attach_to_contour(const voronoi_diagram<double>::const_edge_iterator &edge_iterator) const
|
||||||
{
|
{
|
||||||
return this->is_vertex_on_contour(edge_iterator->vertex0()) || this->is_vertex_on_contour(edge_iterator->vertex1());
|
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<double>::const_edge_iterator &edge_iterator) const
|
[[nodiscard]] inline bool is_edge_connecting_two_contour_vertices(const voronoi_diagram<double>::const_edge_iterator &edge_iterator) const
|
||||||
{
|
{
|
||||||
return this->is_vertex_on_contour(edge_iterator->vertex0()) && this->is_vertex_on_contour(edge_iterator->vertex1());
|
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<ExPolygons>
|
||||||
const float cut_width,
|
const float cut_width,
|
||||||
const std::function<void()> &throw_on_cancel_callback)
|
const std::function<void()> &throw_on_cancel_callback)
|
||||||
{
|
{
|
||||||
|
BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - cutting segmented layers in parallel - begin";
|
||||||
tbb::parallel_for(tbb::blocked_range<size_t>(0, segmented_regions.size()),[&](const tbb::blocked_range<size_t>& range) {
|
tbb::parallel_for(tbb::blocked_range<size_t>(0, segmented_regions.size()),[&](const tbb::blocked_range<size_t>& range) {
|
||||||
for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) {
|
for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) {
|
||||||
throw_on_cancel_callback();
|
throw_on_cancel_callback();
|
||||||
|
@ -1143,6 +1144,7 @@ static void cut_segmented_layers(const std::vector<ExPolygons>
|
||||||
segmented_regions[layer_idx] = segmented_regions_cuts;
|
segmented_regions[layer_idx] = segmented_regions_cuts;
|
||||||
}
|
}
|
||||||
}); // end of parallel_for
|
}); // 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
|
// Returns MMU segmentation of top and bottom layers based on painting in MMU segmentation gizmo
|
||||||
|
@ -1154,6 +1156,8 @@ static inline std::vector<std::vector<ExPolygons>> mmu_segmentation_top_and_bott
|
||||||
const ConstLayerPtrsAdaptor layers = print_object.layers();
|
const ConstLayerPtrsAdaptor layers = print_object.layers();
|
||||||
std::vector<std::vector<ExPolygons>> triangles_by_color(num_extruders);
|
std::vector<std::vector<ExPolygons>> triangles_by_color(num_extruders);
|
||||||
triangles_by_color.assign(num_extruders, std::vector<ExPolygons>(layers.size()));
|
triangles_by_color.assign(num_extruders, std::vector<ExPolygons>(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 (const ModelVolume *mv : print_object.model_object()->volumes) {
|
||||||
for (size_t extruder_idx = 0; extruder_idx < num_extruders; ++extruder_idx) {
|
for (size_t extruder_idx = 0; extruder_idx < num_extruders; ++extruder_idx) {
|
||||||
throw_on_cancel_callback();
|
throw_on_cancel_callback();
|
||||||
|
@ -1203,6 +1207,7 @@ static inline std::vector<std::vector<ExPolygons>> 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 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(),
|
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<std::vector<ExPolygons>> mmu_segmentation_top_and_bott
|
||||||
triangles_by_color_bottom.assign(num_extruders, std::vector<ExPolygons>(input_expolygons.size()));
|
triangles_by_color_bottom.assign(num_extruders, std::vector<ExPolygons>(input_expolygons.size()));
|
||||||
triangles_by_color_top.assign(num_extruders, std::vector<ExPolygons>(input_expolygons.size()));
|
triangles_by_color_top.assign(num_extruders, std::vector<ExPolygons>(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) {
|
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));
|
float extrusion_width = scale_(get_extrusion_width(layer_idx));
|
||||||
int top_solid_layers = get_top_solid_layers(layer_idx);
|
int top_solid_layers = get_top_solid_layers(layer_idx);
|
||||||
ExPolygons top_expolygon = top_layers[layer_idx];
|
ExPolygons top_expolygon = top_layers[layer_idx];
|
||||||
|
@ -1306,9 +1311,10 @@ static inline std::vector<std::vector<ExPolygons>> 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) {
|
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));
|
float extrusion_width = scale_(get_extrusion_width(layer_idx));
|
||||||
int bottom_solid_layers = get_bottom_solid_layers(layer_idx);
|
int bottom_solid_layers = get_bottom_solid_layers(layer_idx);
|
||||||
const ExPolygons &bottom_expolygon = bottom_layers[layer_idx];
|
const ExPolygons &bottom_expolygon = bottom_layers[layer_idx];
|
||||||
|
@ -1340,6 +1346,7 @@ static inline std::vector<std::vector<ExPolygons>> mmu_segmentation_top_and_bott
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - segmentation of bottom layer - end";
|
||||||
|
|
||||||
std::vector<std::vector<ExPolygons>> triangles_by_color_merged(num_extruders);
|
std::vector<std::vector<ExPolygons>> triangles_by_color_merged(num_extruders);
|
||||||
triangles_by_color_merged.assign(num_extruders, std::vector<ExPolygons>(input_expolygons.size()));
|
triangles_by_color_merged.assign(num_extruders, std::vector<ExPolygons>(input_expolygons.size()));
|
||||||
|
@ -1369,9 +1376,9 @@ static std::vector<std::vector<std::pair<ExPolygon, size_t>>> merge_segmented_la
|
||||||
{
|
{
|
||||||
std::vector<std::vector<std::pair<ExPolygon, size_t>>> segmented_regions_merged(segmented_regions.size());
|
std::vector<std::vector<std::pair<ExPolygon, size_t>>> segmented_regions_merged(segmented_regions.size());
|
||||||
|
|
||||||
|
BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - merging segmented layers in parallel - begin";
|
||||||
tbb::parallel_for(tbb::blocked_range<size_t>(0, segmented_regions.size()), [&](const tbb::blocked_range<size_t> &range) {
|
tbb::parallel_for(tbb::blocked_range<size_t>(0, segmented_regions.size()), [&](const tbb::blocked_range<size_t> &range) {
|
||||||
for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) {
|
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<ExPolygon, size_t> &colored_expoly : segmented_regions[layer_idx]) {
|
for (const std::pair<ExPolygon, size_t> &colored_expoly : segmented_regions[layer_idx]) {
|
||||||
throw_on_cancel_callback();
|
throw_on_cancel_callback();
|
||||||
ExPolygons cut_colored_expoly = {colored_expoly.first};
|
ExPolygons cut_colored_expoly = {colored_expoly.first};
|
||||||
|
@ -1386,6 +1393,7 @@ static std::vector<std::vector<std::pair<ExPolygon, size_t>>> merge_segmented_la
|
||||||
segmented_regions_merged[layer_idx].emplace_back(std::move(expoly), color_idx);
|
segmented_regions_merged[layer_idx].emplace_back(std::move(expoly), color_idx);
|
||||||
}
|
}
|
||||||
}); // end of parallel_for
|
}); // end of parallel_for
|
||||||
|
BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - merging segmented layers in parallel - end";
|
||||||
|
|
||||||
return segmented_regions_merged;
|
return segmented_regions_merged;
|
||||||
}
|
}
|
||||||
|
@ -1402,6 +1410,7 @@ std::vector<std::vector<std::pair<ExPolygon, size_t>>> multi_material_segmentati
|
||||||
throw_on_cancel_callback();
|
throw_on_cancel_callback();
|
||||||
|
|
||||||
// Merge all regions and remove small holes
|
// Merge all regions and remove small holes
|
||||||
|
BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - slices preparation in parallel - begin";
|
||||||
tbb::parallel_for(tbb::blocked_range<size_t>(0, layers.size()), [&](const tbb::blocked_range<size_t> &range) {
|
tbb::parallel_for(tbb::blocked_range<size_t>(0, layers.size()), [&](const tbb::blocked_range<size_t> &range) {
|
||||||
for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) {
|
for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) {
|
||||||
throw_on_cancel_callback();
|
throw_on_cancel_callback();
|
||||||
|
@ -1425,6 +1434,7 @@ std::vector<std::vector<std::pair<ExPolygon, size_t>>> multi_material_segmentati
|
||||||
input_polygons[layer_idx] = to_polygons(input_expolygons[layer_idx]);
|
input_polygons[layer_idx] = to_polygons(input_expolygons[layer_idx]);
|
||||||
}
|
}
|
||||||
}); // end of parallel_for
|
}); // 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) {
|
for (size_t layer_idx = 0; layer_idx < layers.size(); ++layer_idx) {
|
||||||
throw_on_cancel_callback();
|
throw_on_cancel_callback();
|
||||||
|
@ -1434,6 +1444,7 @@ std::vector<std::vector<std::pair<ExPolygon, size_t>>> multi_material_segmentati
|
||||||
edge_grids[layer_idx].create(input_expolygons[layer_idx], coord_t(scale_(10.)));
|
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) {
|
for (const ModelVolume *mv : print_object.model_object()->volumes) {
|
||||||
const size_t num_extruders = print_object.print()->config().nozzle_diameter.size();
|
const size_t num_extruders = print_object.print()->config().nozzle_diameter.size();
|
||||||
for (size_t extruder_idx = 1; extruder_idx < num_extruders; ++extruder_idx) {
|
for (size_t extruder_idx = 1; extruder_idx < num_extruders; ++extruder_idx) {
|
||||||
|
@ -1500,12 +1511,14 @@ std::vector<std::vector<std::pair<ExPolygon, size_t>>> 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<PaintedLine> &pl) { return !pl.empty(); });
|
||||||
|
|
||||||
|
BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - layers segmentation in parallel - begin";
|
||||||
tbb::parallel_for(tbb::blocked_range<size_t>(0, print_object.layers().size()), [&](const tbb::blocked_range<size_t> &range) {
|
tbb::parallel_for(tbb::blocked_range<size_t>(0, print_object.layers().size()), [&](const tbb::blocked_range<size_t> &range) {
|
||||||
for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) {
|
for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) {
|
||||||
throw_on_cancel_callback();
|
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) {
|
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);
|
Point first_start_p = *(edge_grids[layer_idx].contours()[first.contour_idx].begin() + first.line_idx);
|
||||||
|
|
||||||
|
@ -1530,6 +1543,7 @@ std::vector<std::vector<std::pair<ExPolygon, size_t>>> multi_material_segmentati
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}); // end of parallel_for
|
}); // end of parallel_for
|
||||||
|
BOOST_LOG_TRIVIAL(debug) << "MMU segmentation - layers segmentation in parallel - end";
|
||||||
throw_on_cancel_callback();
|
throw_on_cancel_callback();
|
||||||
|
|
||||||
if (auto w = print_object.config().mmu_segmented_region_max_width; w > 0.f) {
|
if (auto w = print_object.config().mmu_segmented_region_max_width; w > 0.f) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue