From 76f3f22bcc5bce21f3230766e1a909fcb252ed26 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Mon, 11 Sep 2023 10:19:38 +0800 Subject: [PATCH] FIX: layer height cannot exceed limits Jira: STUDIO-4279 Change-Id: I9c580f9192f7d37123d76e72a62022a48c2a5315 --- src/libslic3r/Print.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 32abd7d8d4..67e32bc96d 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1188,11 +1188,23 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* if (layer_height > min_nozzle_diameter) return {L("Layer height cannot exceed nozzle diameter"), object, "layer_height"}; + double min_layer_height_from_nozzle = 0.01; + double max_layer_height_from_nozzle = std::numeric_limits::max(); + for (unsigned int extruder_id : extruders) { + min_layer_height_from_nozzle = std::max(min_layer_height_from_nozzle, m_config.min_layer_height.get_at(extruder_id)); + max_layer_height_from_nozzle = std::min(max_layer_height_from_nozzle, m_config.max_layer_height.get_at(extruder_id)); + } + + if (layer_height > max_layer_height_from_nozzle || + layer_height < min_layer_height_from_nozzle) { + return { L("Layer height cannot exceed the limit in Printer Settings -> Extruder -> Layer height limits"), object, "layer_height" }; + } + for (auto range : object->m_model_object->layer_config_ranges) { double range_layer_height = range.second.opt_float("layer_height"); - if (range_layer_height > object->m_slicing_params.max_layer_height || - range_layer_height < object->m_slicing_params.min_layer_height) - return { L("Layer height cannot exceed nozzle diameter"), nullptr, "layer_height" }; + if (range_layer_height > max_layer_height_from_nozzle || + range_layer_height < min_layer_height_from_nozzle) + return { L("Layer height cannot exceed the limit in Printer Settings -> Extruder -> Layer height limits"), nullptr, "layer_height" }; } // Validate extrusion widths.