Ported PrintObject::_support_material_flow() to C++

This commit is contained in:
Alessandro Ranellucci 2018-11-26 00:59:54 +01:00
parent e5bd2ef801
commit 725d0ab408
4 changed files with 15 additions and 42 deletions

View File

@ -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",

View File

@ -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;

View File

@ -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<float>(print()->config.nozzle_diameter
.get_at(static_cast<size_t>(extruder - 1))), // Check this line $self->print->config->nozzle_diameter->[0].
static_cast<float>(config.layer_height.value),
this->_print->config.nozzle_diameter.get_at(extruder-1),
this->config.layer_height.value,
0
);
return support_flow;
}
void

View File

@ -110,7 +110,7 @@ _constant()
Ref<Layer> 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<Flow> _support_material_flow(FlowRole role = frSupportMaterial);
size_t support_layer_count();
void clear_support_layers();
Ref<SupportLayer> get_support_layer(int idx);