mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-08-07 14:04:11 -06:00
Merge new-support2
This commit is contained in:
parent
a2cc230bb5
commit
913f401280
13 changed files with 578 additions and 309 deletions
|
@ -18,42 +18,11 @@ has 'height' => (is => 'ro', required => 1); # layer height in unscal
|
|||
# also known as 'islands' (all regions and surface types are merged here)
|
||||
has 'slices' => (is => 'rw');
|
||||
|
||||
# ordered collection of extrusion paths to fill surfaces for support material
|
||||
has 'support_islands' => (is => 'rw');
|
||||
has 'support_fills' => (is => 'rw');
|
||||
has 'support_contact_fills' => (is => 'rw');
|
||||
|
||||
sub _trigger_id {
|
||||
my $self = shift;
|
||||
$_->_trigger_layer for @{$self->regions || []};
|
||||
}
|
||||
|
||||
# layer height of contact paths in unscaled coordinates
|
||||
sub support_material_contact_height {
|
||||
my $self = shift;
|
||||
|
||||
return $self->height if $self->id == 0;
|
||||
|
||||
# TODO: check what upper region applies instead of considering the first one
|
||||
my $upper_layer = $self->object->layers->[ $self->id + 1 ] // $self;
|
||||
my $h = ($self->height + $upper_layer->height) - $upper_layer->regions->[0]->extruders->{infill}->bridge_flow->width;
|
||||
|
||||
# If layer height is less than half the bridge width then we'll get a negative height for contact area.
|
||||
# The optimal solution would be to skip some layers during support material generation, but for now
|
||||
# we'll apply a (dirty) workaround that should still work.
|
||||
if ($h <= 0) {
|
||||
$h = $self->height;
|
||||
}
|
||||
|
||||
return $h;
|
||||
}
|
||||
|
||||
# Z used for printing support material contact in scaled coordinates
|
||||
sub support_material_contact_z {
|
||||
my $self = shift;
|
||||
return ($self->print_z - ($self->height - $self->support_material_contact_height)) / &Slic3r::SCALING_FACTOR;
|
||||
}
|
||||
|
||||
sub upper_layer_slices {
|
||||
my $self = shift;
|
||||
|
||||
|
@ -94,4 +63,13 @@ sub support_islands_enclose_line {
|
|||
return (first { $_->encloses_line($line) } @{$self->support_islands}) ? 1 : 0;
|
||||
}
|
||||
|
||||
package Slic3r::Layer::Support;
|
||||
use Moo;
|
||||
extends 'Slic3r::Layer';
|
||||
|
||||
# ordered collection of extrusion paths to fill surfaces for support material
|
||||
has 'support_islands' => (is => 'rw');
|
||||
has 'support_fills' => (is => 'rw');
|
||||
has 'support_interface_fills' => (is => 'rw');
|
||||
|
||||
1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue