mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-19 04:37:52 -06:00
Fit objects to print bed when they are too large and warn user. #2853
This commit is contained in:
parent
57e6a7becd
commit
b7b017c3fa
1 changed files with 24 additions and 10 deletions
|
@ -4,7 +4,7 @@ use warnings;
|
||||||
use utf8;
|
use utf8;
|
||||||
|
|
||||||
use File::Basename qw(basename dirname);
|
use File::Basename qw(basename dirname);
|
||||||
use List::Util qw(sum first);
|
use List::Util qw(sum first max);
|
||||||
use Slic3r::Geometry qw(X Y Z MIN MAX scale unscale deg2rad);
|
use Slic3r::Geometry qw(X Y Z MIN MAX scale unscale deg2rad);
|
||||||
use threads::shared qw(shared_clone);
|
use threads::shared qw(shared_clone);
|
||||||
use Wx qw(:button :cursor :dialog :filedialog :keycode :icon :font :id :listctrl :misc
|
use Wx qw(:button :cursor :dialog :filedialog :keycode :icon :font :id :listctrl :misc
|
||||||
|
@ -489,8 +489,11 @@ sub load_model_objects {
|
||||||
my ($self, @model_objects) = @_;
|
my ($self, @model_objects) = @_;
|
||||||
|
|
||||||
my $bed_centerf = $self->bed_centerf;
|
my $bed_centerf = $self->bed_centerf;
|
||||||
|
my $bed_shape = Slic3r::Polygon->new_scale(@{$self->{config}->bed_shape});
|
||||||
|
my $bed_size = $bed_shape->bounding_box->size;
|
||||||
|
|
||||||
my $need_arrange = 0;
|
my $need_arrange = 0;
|
||||||
|
my $scaled_down = 0;
|
||||||
my @obj_idx = ();
|
my @obj_idx = ();
|
||||||
foreach my $model_object (@model_objects) {
|
foreach my $model_object (@model_objects) {
|
||||||
my $o = $self->{model}->add_object($model_object);
|
my $o = $self->{model}->add_object($model_object);
|
||||||
|
@ -509,6 +512,16 @@ sub load_model_objects {
|
||||||
$o->add_instance(offset => $bed_centerf);
|
$o->add_instance(offset => $bed_centerf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
# if the object is too large (more than 5 times the bed), scale it down
|
||||||
|
my $size = $o->bounding_box->size;
|
||||||
|
my $ratio = max(@$size[X,Y]) / unscale(max(@$bed_size[X,Y]));
|
||||||
|
if ($ratio > 5) {
|
||||||
|
$_->set_scaling_factor(1/$ratio) for @{$o->instances};
|
||||||
|
$scaled_down = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$self->{print}->auto_assign_extruders($o);
|
$self->{print}->auto_assign_extruders($o);
|
||||||
$self->{print}->add_model_object($o);
|
$self->{print}->add_model_object($o);
|
||||||
}
|
}
|
||||||
|
@ -518,14 +531,15 @@ sub load_model_objects {
|
||||||
$need_arrange = 0;
|
$need_arrange = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
$self->objects_loaded(\@obj_idx, no_arrange => !$need_arrange);
|
if ($scaled_down) {
|
||||||
}
|
Slic3r::GUI::show_info(
|
||||||
|
$self,
|
||||||
|
'Your object appears to be too large, so it was automatically scaled down to fit your print bed.',
|
||||||
|
'Object too large?',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
sub objects_loaded {
|
foreach my $obj_idx (@obj_idx) {
|
||||||
my $self = shift;
|
|
||||||
my ($obj_idxs, %params) = @_;
|
|
||||||
|
|
||||||
foreach my $obj_idx (@$obj_idxs) {
|
|
||||||
my $object = $self->{objects}[$obj_idx];
|
my $object = $self->{objects}[$obj_idx];
|
||||||
my $model_object = $self->{model}->objects->[$obj_idx];
|
my $model_object = $self->{model}->objects->[$obj_idx];
|
||||||
$self->{list}->InsertStringItem($obj_idx, $object->name);
|
$self->{list}->InsertStringItem($obj_idx, $object->name);
|
||||||
|
@ -537,7 +551,7 @@ sub objects_loaded {
|
||||||
|
|
||||||
$self->make_thumbnail($obj_idx);
|
$self->make_thumbnail($obj_idx);
|
||||||
}
|
}
|
||||||
$self->arrange unless $params{no_arrange};
|
$self->arrange if $need_arrange;
|
||||||
$self->update;
|
$self->update;
|
||||||
|
|
||||||
# zoom to objects
|
# zoom to objects
|
||||||
|
@ -545,7 +559,7 @@ sub objects_loaded {
|
||||||
if $self->{canvas3D};
|
if $self->{canvas3D};
|
||||||
|
|
||||||
$self->{list}->Update;
|
$self->{list}->Update;
|
||||||
$self->{list}->Select($obj_idxs->[-1], 1);
|
$self->{list}->Select($obj_idx[-1], 1);
|
||||||
$self->object_list_changed;
|
$self->object_list_changed;
|
||||||
|
|
||||||
$self->schedule_background_process;
|
$self->schedule_background_process;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue