Bugfix: auto-center didn't update the PrintObject copies properly, causing misalignment. #2464
This commit is contained in:
parent
4b7cec28b9
commit
494efe65b2
4 changed files with 29 additions and 27 deletions
|
@ -89,16 +89,7 @@ sub new {
|
||||||
};
|
};
|
||||||
my $on_instance_moved = sub {
|
my $on_instance_moved = sub {
|
||||||
my ($obj_idx, $instance_idx) = @_;
|
my ($obj_idx, $instance_idx) = @_;
|
||||||
|
|
||||||
$self->update;
|
$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 2D preview canvas
|
# Initialize 2D preview canvas
|
||||||
|
@ -564,7 +555,6 @@ sub remove {
|
||||||
|
|
||||||
$self->select_object(undef);
|
$self->select_object(undef);
|
||||||
$self->update;
|
$self->update;
|
||||||
|
|
||||||
$self->schedule_background_process;
|
$self->schedule_background_process;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -675,10 +665,10 @@ sub rotate {
|
||||||
$model_object->update_bounding_box;
|
$model_object->update_bounding_box;
|
||||||
# update print and start background processing
|
# update print and start background processing
|
||||||
$self->{print}->add_model_object($model_object, $obj_idx);
|
$self->{print}->add_model_object($model_object, $obj_idx);
|
||||||
$self->schedule_background_process;
|
|
||||||
|
|
||||||
$self->selection_changed; # refresh info (size etc.)
|
$self->selection_changed; # refresh info (size etc.)
|
||||||
$self->update;
|
$self->update;
|
||||||
|
$self->schedule_background_process;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub flip {
|
sub flip {
|
||||||
|
@ -703,11 +693,10 @@ sub flip {
|
||||||
# update print and start background processing
|
# update print and start background processing
|
||||||
$self->stop_background_process;
|
$self->stop_background_process;
|
||||||
$self->{print}->add_model_object($model_object, $obj_idx);
|
$self->{print}->add_model_object($model_object, $obj_idx);
|
||||||
$self->schedule_background_process;
|
|
||||||
|
|
||||||
$self->selection_changed; # refresh info (size etc.)
|
$self->selection_changed; # refresh info (size etc.)
|
||||||
$self->update;
|
$self->update;
|
||||||
$self->refresh_canvases;
|
$self->schedule_background_process;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub changescale {
|
sub changescale {
|
||||||
|
@ -758,11 +747,10 @@ sub changescale {
|
||||||
# update print and start background processing
|
# update print and start background processing
|
||||||
$self->stop_background_process;
|
$self->stop_background_process;
|
||||||
$self->{print}->add_model_object($model_object, $obj_idx);
|
$self->{print}->add_model_object($model_object, $obj_idx);
|
||||||
$self->schedule_background_process;
|
|
||||||
|
|
||||||
$self->selection_changed(1); # refresh info (size, volume etc.)
|
$self->selection_changed(1); # refresh info (size, volume etc.)
|
||||||
$self->update;
|
$self->update;
|
||||||
$self->refresh_canvases;
|
$self->schedule_background_process;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub arrange {
|
sub arrange {
|
||||||
|
@ -778,17 +766,6 @@ sub arrange {
|
||||||
# when parts don't fit in print bed
|
# when parts don't fit in print bed
|
||||||
|
|
||||||
$self->update(1);
|
$self->update(1);
|
||||||
|
|
||||||
my $invalidated = 0;
|
|
||||||
foreach my $object (@{$self->{print}->objects}) {
|
|
||||||
$invalidated = 1 if $object->reload_model_instances;
|
|
||||||
}
|
|
||||||
if ($invalidated) {
|
|
||||||
$self->schedule_background_process;
|
|
||||||
} else {
|
|
||||||
$self->resume_background_process;
|
|
||||||
}
|
|
||||||
$self->refresh_canvases;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub split_object {
|
sub split_object {
|
||||||
|
@ -1207,7 +1184,6 @@ sub on_thumbnail_made {
|
||||||
my ($obj_idx) = @_;
|
my ($obj_idx) = @_;
|
||||||
|
|
||||||
$self->{objects}[$obj_idx]->transform_thumbnail($self->{model}, $obj_idx);
|
$self->{objects}[$obj_idx]->transform_thumbnail($self->{model}, $obj_idx);
|
||||||
$self->update;
|
|
||||||
$self->refresh_canvases;
|
$self->refresh_canvases;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1220,9 +1196,23 @@ sub update {
|
||||||
$self->{model}->center_instances_around_point($self->bed_centerf);
|
$self->{model}->center_instances_around_point($self->bed_centerf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$self->pause_background_process;
|
||||||
|
my $invalidated = $self->{print}->reload_model_instances();
|
||||||
|
if ($invalidated) {
|
||||||
|
$self->schedule_background_process;
|
||||||
|
} else {
|
||||||
|
$self->resume_background_process;
|
||||||
|
}
|
||||||
|
|
||||||
$self->refresh_canvases;
|
$self->refresh_canvases;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub on_model_instances_changed {
|
||||||
|
my ($self) = @_;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
sub on_extruders_change {
|
sub on_extruders_change {
|
||||||
my ($self, $num_extruders) = @_;
|
my ($self, $num_extruders) = @_;
|
||||||
|
|
||||||
|
|
|
@ -116,6 +116,16 @@ Print::reload_object(size_t idx)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
Print::reload_model_instances()
|
||||||
|
{
|
||||||
|
bool invalidated = false;
|
||||||
|
FOREACH_OBJECT(this, object) {
|
||||||
|
if ((*object)->reload_model_instances()) invalidated = true;
|
||||||
|
}
|
||||||
|
return invalidated;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Print::clear_regions()
|
Print::clear_regions()
|
||||||
{
|
{
|
||||||
|
|
|
@ -174,6 +174,7 @@ class Print
|
||||||
PrintObject* get_object(size_t idx);
|
PrintObject* get_object(size_t idx);
|
||||||
void delete_object(size_t idx);
|
void delete_object(size_t idx);
|
||||||
void reload_object(size_t idx);
|
void reload_object(size_t idx);
|
||||||
|
bool reload_model_instances();
|
||||||
|
|
||||||
// methods for handling regions
|
// methods for handling regions
|
||||||
PrintRegion* get_region(size_t idx);
|
PrintRegion* get_region(size_t idx);
|
||||||
|
|
|
@ -143,6 +143,7 @@ _constant()
|
||||||
Ref<PrintObject> get_object(int idx);
|
Ref<PrintObject> get_object(int idx);
|
||||||
void delete_object(int idx);
|
void delete_object(int idx);
|
||||||
void reload_object(int idx);
|
void reload_object(int idx);
|
||||||
|
bool reload_model_instances();
|
||||||
size_t object_count()
|
size_t object_count()
|
||||||
%code%{ RETVAL = THIS->objects.size(); %};
|
%code%{ RETVAL = THIS->objects.size(); %};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue