From 725d0ab40801105b39159793bcea135c152122ef Mon Sep 17 00:00:00 2001 From: Alessandro Ranellucci Date: Mon, 26 Nov 2018 00:59:54 +0100 Subject: [PATCH] Ported PrintObject::_support_material_flow() to C++ --- lib/Slic3r/Print/GCode.pm | 2 +- lib/Slic3r/Print/Object.pm | 26 +------------------------- xs/src/libslic3r/PrintObject.cpp | 27 ++++++++++++--------------- xs/xsp/Print.xsp | 2 +- 4 files changed, 15 insertions(+), 42 deletions(-) diff --git a/lib/Slic3r/Print/GCode.pm b/lib/Slic3r/Print/GCode.pm index b856b498a..bc0cd9df4 100644 --- a/lib/Slic3r/Print/GCode.pm +++ b/lib/Slic3r/Print/GCode.pm @@ -118,7 +118,7 @@ sub export { if ($self->print->has_support_material) { my $object0 = $self->objects->[0]; - my $flow = $object0->support_material_flow; + my $flow = $object0->support_material_flow(FLOW_ROLE_SUPPORT_MATERIAL); my $vol_speed = $flow->mm3_per_mm * $object0->config->get_abs_value('support_material_speed'); $vol_speed = min($vol_speed, $self->config->max_volumetric_speed) if $self->config->max_volumetric_speed > 0; printf $fh "; support material extrusion width = %.2fmm (%.2fmm^3/s)\n", diff --git a/lib/Slic3r/Print/Object.pm b/lib/Slic3r/Print/Object.pm index 359a5515d..e3142e6ef 100644 --- a/lib/Slic3r/Print/Object.pm +++ b/lib/Slic3r/Print/Object.pm @@ -247,7 +247,7 @@ sub _support_material { print_config => $self->print->config, object_config => $self->config, first_layer_flow => $first_layer_flow, - flow => $self->support_material_flow, + flow => $self->support_material_flow(FLOW_ROLE_SUPPORT_MATERIAL), interface_flow => $self->support_material_flow(FLOW_ROLE_SUPPORT_MATERIAL_INTERFACE), ); } @@ -570,28 +570,4 @@ sub _simplify_slices { } } -sub support_material_flow { - my ($self, $role) = @_; - - $role //= FLOW_ROLE_SUPPORT_MATERIAL; - my $extruder = ($role == FLOW_ROLE_SUPPORT_MATERIAL) - ? $self->config->support_material_extruder - : $self->config->support_material_interface_extruder; - - my $width = $self->config->support_material_extrusion_width || $self->config->extrusion_width; - if ($role == FLOW_ROLE_SUPPORT_MATERIAL_INTERFACE) { - $width = $self->config->support_material_interface_extrusion_width || $width; - } - - # we use a bogus layer_height because we use the same flow for all - # support material layers - return Slic3r::Flow->new_from_width( - width => $width, - role => $role, - nozzle_diameter => $self->print->config->nozzle_diameter->[$extruder-1] // $self->print->config->nozzle_diameter->[0], - layer_height => $self->config->layer_height, - bridge_flow_ratio => 0, - ); -} - 1; diff --git a/xs/src/libslic3r/PrintObject.cpp b/xs/src/libslic3r/PrintObject.cpp index 7220a7bc2..a4f8f3bdf 100644 --- a/xs/src/libslic3r/PrintObject.cpp +++ b/xs/src/libslic3r/PrintObject.cpp @@ -1316,29 +1316,26 @@ PrintObject::_support_material() Flow PrintObject::_support_material_flow(FlowRole role) { - // Create support flow. - int extruder = - (role == frSupportMaterial) ? - config.support_material_extruder.value : config - .support_material_interface_extruder.value; + const int extruder = (role == frSupportMaterial) + ? this->config.support_material_extruder.value + : this->config.support_material_interface_extruder.value; - auto width = config.support_material_extrusion_width; // || config.extrusion_width; - - if (role == frSupportMaterialInterface) - width = config.support_material_interface_extrusion_width; // || width; + auto width = this->config.support_material_extrusion_width; + if (width.value == 0) width = this->config.extrusion_width; + if (role == frSupportMaterialInterface + && this->config.support_material_interface_extrusion_width.value > 0) + width = this->config.support_material_interface_extrusion_width; + // We use a bogus layer_height because we use the same flow for all // support material layers. - Flow support_flow = Flow::new_from_config_width( + return Flow::new_from_config_width( role, width, - static_cast(print()->config.nozzle_diameter - .get_at(static_cast(extruder - 1))), // Check this line $self->print->config->nozzle_diameter->[0]. - static_cast(config.layer_height.value), + this->_print->config.nozzle_diameter.get_at(extruder-1), + this->config.layer_height.value, 0 ); - - return support_flow; } void diff --git a/xs/xsp/Print.xsp b/xs/xsp/Print.xsp index a1054492e..7372c63c9 100644 --- a/xs/xsp/Print.xsp +++ b/xs/xsp/Print.xsp @@ -110,7 +110,7 @@ _constant() Ref add_layer(int id, coordf_t height, coordf_t print_z, coordf_t slice_z); void delete_layer(int idx); - + %name{support_material_flow} Clone _support_material_flow(FlowRole role = frSupportMaterial); size_t support_layer_count(); void clear_support_layers(); Ref get_support_layer(int idx);