diff options
Diffstat (limited to 'xs/src/libslic3r/PrintRegion.cpp')
-rw-r--r-- | xs/src/libslic3r/PrintRegion.cpp | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/xs/src/libslic3r/PrintRegion.cpp b/xs/src/libslic3r/PrintRegion.cpp new file mode 100644 index 000000000..d651b57ab --- /dev/null +++ b/xs/src/libslic3r/PrintRegion.cpp @@ -0,0 +1,70 @@ +#include "Print.hpp" + +namespace Slic3r { + +PrintRegion::PrintRegion(Print* print) + : _print(print) +{ +} + +PrintRegion::~PrintRegion() +{ +} + +Print* +PrintRegion::print() +{ + return this->_print; +} + +Flow +PrintRegion::flow(FlowRole role, double layer_height, bool bridge, bool first_layer, double width, const PrintObject &object) const +{ + ConfigOptionFloatOrPercent config_width; + if (width != -1) { + // use the supplied custom width, if any + config_width.value = width; + config_width.percent = false; + } else { + // otherwise, get extrusion width from configuration + // (might be an absolute value, or a percent value, or zero for auto) + if (first_layer && this->_print->config.first_layer_extrusion_width.value > 0) { + config_width = this->_print->config.first_layer_extrusion_width; + } else if (role == frExternalPerimeter) { + config_width = this->config.external_perimeter_extrusion_width; + } else if (role == frPerimeter) { + config_width = this->config.perimeter_extrusion_width; + } else if (role == frInfill) { + config_width = this->config.infill_extrusion_width; + } else if (role == frSolidInfill) { + config_width = this->config.solid_infill_extrusion_width; + } else if (role == frTopSolidInfill) { + config_width = this->config.top_infill_extrusion_width; + } else { + CONFESS("Unknown role"); + } + } + if (config_width.value == 0) { + config_width = object.config.extrusion_width; + } + + // get the configured nozzle_diameter for the extruder associated + // to the flow role requested + size_t extruder; // 1-based + if (role == frPerimeter || role == frExternalPerimeter) { + extruder = this->config.perimeter_extruder; + } else if (role == frInfill || role == frSolidInfill || role == frTopSolidInfill) { + extruder = this->config.infill_extruder; + } else { + CONFESS("Unknown role $role"); + } + double nozzle_diameter = this->_print->config.nozzle_diameter.get_at(extruder-1); + + return Flow::new_from_config_width(role, config_width, nozzle_diameter, layer_height, bridge ? this->config.bridge_flow_ratio : 0); +} + +#ifdef SLIC3RXS +REGISTER_CLASS(PrintRegion, "Print::Region"); +#endif + +} |