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) { if ($self->print->has_support_material) {
my $object0 = $self->objects->[0]; 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'); 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; $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", 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, print_config => $self->print->config,
object_config => $self->config, object_config => $self->config,
first_layer_flow => $first_layer_flow, 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), 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; 1;

View File

@ -1316,29 +1316,26 @@ PrintObject::_support_material()
Flow Flow
PrintObject::_support_material_flow(FlowRole role) PrintObject::_support_material_flow(FlowRole role)
{ {
// Create support flow. const int extruder = (role == frSupportMaterial)
int extruder = ? this->config.support_material_extruder.value
(role == frSupportMaterial) ? : this->config.support_material_interface_extruder.value;
config.support_material_extruder.value : config
.support_material_interface_extruder.value;
auto width = config.support_material_extrusion_width; // || config.extrusion_width; auto width = this->config.support_material_extrusion_width;
if (width.value == 0) width = this->config.extrusion_width;
if (role == frSupportMaterialInterface) if (role == frSupportMaterialInterface
width = config.support_material_interface_extrusion_width; // || width; && 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 // We use a bogus layer_height because we use the same flow for all
// support material layers. // support material layers.
Flow support_flow = Flow::new_from_config_width( return Flow::new_from_config_width(
role, role,
width, width,
static_cast<float>(print()->config.nozzle_diameter this->_print->config.nozzle_diameter.get_at(extruder-1),
.get_at(static_cast<size_t>(extruder - 1))), // Check this line $self->print->config->nozzle_diameter->[0]. this->config.layer_height.value,
static_cast<float>(config.layer_height.value),
0 0
); );
return support_flow;
} }
void void

View File

@ -110,7 +110,7 @@ _constant()
Ref<Layer> add_layer(int id, coordf_t height, coordf_t print_z, Ref<Layer> add_layer(int id, coordf_t height, coordf_t print_z,
coordf_t slice_z); coordf_t slice_z);
void delete_layer(int idx); void delete_layer(int idx);
%name{support_material_flow} Clone<Flow> _support_material_flow(FlowRole role = frSupportMaterial);
size_t support_layer_count(); size_t support_layer_count();
void clear_support_layers(); void clear_support_layers();
Ref<SupportLayer> get_support_layer(int idx); Ref<SupportLayer> get_support_layer(int idx);