When slicing from command line, emit a warning if parts might not fit in the print bed. #2725

This commit is contained in:
Alessandro Ranellucci 2017-03-13 13:50:05 +01:00
parent a49d82691e
commit ff43f9a7f8

View File

@ -9,6 +9,7 @@ package Slic3r::Print::Simple;
use Moo; use Moo;
use Slic3r::Geometry qw(X Y); use Slic3r::Geometry qw(X Y);
use Slic3r::Geometry::Clipper qw(diff);
has '_print' => ( has '_print' => (
is => 'ro', is => 'ro',
@ -56,6 +57,13 @@ has 'output_file' => (
is => 'rw', is => 'rw',
); );
sub _bed_polygon {
my ($self) = @_;
my $bed_shape = $self->_print->config->bed_shape;
return Slic3r::Polygon->new_scale(@$bed_shape);
}
sub set_model { sub set_model {
# $model is of type Slic3r::Model # $model is of type Slic3r::Model
my ($self, $model) = @_; my ($self, $model) = @_;
@ -86,11 +94,8 @@ sub set_model {
$_->translate(0,0,-$_->bounding_box->z_min) for @{$model->objects}; $_->translate(0,0,-$_->bounding_box->z_min) for @{$model->objects};
if (!$self->dont_arrange) { if (!$self->dont_arrange) {
my $print_center = $self->print_center; my $print_center = $self->print_center
if (!defined $print_center) { // Slic3r::Pointf->new_unscale(@{ $self->_bed_polygon->centroid });
my $polygon = Slic3r::Polygon->new_scale(@$bed_shape);
$print_center = Slic3r::Pointf->new_unscale(@{ $polygon->centroid });
}
$model->center_instances_around_point($print_center); $model->center_instances_around_point($print_center);
} }
@ -110,6 +115,13 @@ sub _before_export {
sub _after_export { sub _after_export {
my ($self) = @_; my ($self) = @_;
# check that all parts fit in bed shape, and warn if they don't
# TODO: use actual toolpaths instead of total bounding box
if (@{diff([$self->_print->bounding_box->polygon], [$self->_bed_polygon])}) {
warn "Warning: the supplied parts might not fit in the configured bed shape. "
. "You might want to review the result before printing.\n";
}
$self->_print->set_status_cb(undef); $self->_print->set_status_cb(undef);
} }