Bugfix: skirt and brim were not recalculated when objects where just moved in plater

This commit is contained in:
Alessandro Ranellucci 2014-11-12 23:28:42 +01:00
parent a5787cfb04
commit 334086d605
7 changed files with 37 additions and 27 deletions

View file

@ -89,7 +89,17 @@ sub new {
$menu->Destroy;
});
$self->{canvas}->on_instance_moved(sub {
my ($obj_idx, $instance_idx) = @_;
$self->update;
$self->pause_background_process;
my $invalidated = $self->{print}->objects->[$obj_idx]->reload_model_instances();
if ($invalidated) {
$self->schedule_background_process;
} else {
$self->resume_background_process;
}
});
# Initialize 3D preview canvas
@ -736,6 +746,7 @@ sub arrange {
my $bb = Slic3r::Geometry::BoundingBoxf->new_from_points($self->{config}->bed_shape);
eval {
$self->{model}->arrange_objects($self->GetFrame->config->min_object_distance, $bb);
$_->reload_model_instances for @{$self->{print}->objects};
};
# ignore arrange failures on purpose: user has visual feedback and we don't need to warn him
# when parts don't fit in print bed
@ -1128,15 +1139,6 @@ sub update {
$self->{model}->center_instances_around_point($self->bed_centerf);
}
# sync model and print object instances
for my $obj_idx (0..$#{$self->{objects}}) {
my $model_object = $self->{model}->objects->[$obj_idx];
my $print_object = $self->{print}->objects->[$obj_idx];
$print_object->delete_all_copies;
$print_object->add_copy(@{$_->offset}) for @{$model_object->instances};
}
$self->{canvas}->Refresh;
$self->{canvas3D}->update if $self->{canvas3D};
}

View file

@ -209,7 +209,7 @@ sub mouse_event {
}
$self->Refresh;
} elsif ($event->ButtonUp(&Wx::wxMOUSE_BTN_LEFT)) {
$self->{on_instance_moved}->();
$self->{on_instance_moved}->(@{ $self->{drag_object} });
$self->Refresh;
$self->{drag_start_pos} = undef;
$self->{drag_object} = undef;

View file

@ -37,19 +37,19 @@ sub add_copy {
my ($self, $x, $y) = @_;
my @copies = @{$self->copies};
push @copies, Slic3r::Point->new_scale($x, $y);
$self->set_copies(\@copies);
return $self->set_copies(\@copies);
}
sub delete_last_copy {
my ($self) = @_;
my @copies = $self->copies;
pop @copies;
$self->set_copies(\@copies);
return $self->set_copies(\@copies);
}
sub delete_all_copies {
my ($self) = @_;
$self->set_copies([]);
return $self->set_copies([]);
}
# this is the *total* layer count (including support layers)