mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-09-24 06:53:16 +08:00
fix for segfault caused by using the wrong LayerHeightSpline object
This commit is contained in:
parent
f43e004f44
commit
8ec0275967
@ -18,7 +18,7 @@ sub new {
|
|||||||
my $model_object = $self->{model_object} = $params{model_object};
|
my $model_object = $self->{model_object} = $params{model_object};
|
||||||
my $obj_idx = $self->{obj_idx} = $params{obj_idx};
|
my $obj_idx = $self->{obj_idx} = $params{obj_idx};
|
||||||
my $plater = $self->{plater} = $parent;
|
my $plater = $self->{plater} = $parent;
|
||||||
my $object = $self->{object} = $self->{plater}->{print}->get_object($self->{obj_idx});
|
my $object = $self->{plater}->{print}->get_object($self->{obj_idx});
|
||||||
|
|
||||||
$self->{update_spline_control} = 0;
|
$self->{update_spline_control} = 0;
|
||||||
|
|
||||||
@ -93,9 +93,6 @@ sub new {
|
|||||||
$self->{splineControl}->on_layer_update(sub {
|
$self->{splineControl}->on_layer_update(sub {
|
||||||
# trigger re-slicing
|
# trigger re-slicing
|
||||||
$self->_trigger_slicing;
|
$self->_trigger_slicing;
|
||||||
#$self->{plater}->stop_background_process;
|
|
||||||
#$self->{object}->invalidate_step(STEP_SLICE);
|
|
||||||
#$self->{plater}->start_background_process;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$self->{splineControl}->on_z_indicator(sub {
|
$self->{splineControl}->on_z_indicator(sub {
|
||||||
@ -105,7 +102,7 @@ sub new {
|
|||||||
});
|
});
|
||||||
|
|
||||||
# init quality slider
|
# init quality slider
|
||||||
if($object->config->adaptive_slicing) {
|
if($object->config->get('adaptive_slicing')) {
|
||||||
my $quality_value = $object->config->get('adaptive_slicing_quality');
|
my $quality_value = $object->config->get('adaptive_slicing_quality');
|
||||||
$value_label->SetLabel(sprintf '%.2f', $quality_value);
|
$value_label->SetLabel(sprintf '%.2f', $quality_value);
|
||||||
$quality_slider->SetRange(0, 100);
|
$quality_slider->SetRange(0, 100);
|
||||||
@ -131,8 +128,9 @@ sub new {
|
|||||||
|
|
||||||
sub _trigger_slicing {
|
sub _trigger_slicing {
|
||||||
my ($self) = @_;
|
my ($self) = @_;
|
||||||
|
my $object = $self->{plater}->{print}->get_object($self->{obj_idx});
|
||||||
|
$self->{plater}->pause_background_process;
|
||||||
$self->{plater}->stop_background_process;
|
$self->{plater}->stop_background_process;
|
||||||
$self->{object}->invalidate_step(STEP_SLICE);
|
|
||||||
if (!$Slic3r::GUI::Settings->{_}{background_processing}) {
|
if (!$Slic3r::GUI::Settings->{_}{background_processing}) {
|
||||||
$self->{plater}->statusbar->SetCancelCallback(sub {
|
$self->{plater}->statusbar->SetCancelCallback(sub {
|
||||||
$self->{plater}->stop_background_process;
|
$self->{plater}->stop_background_process;
|
||||||
@ -143,6 +141,8 @@ sub _trigger_slicing {
|
|||||||
$self->{plater}->on_model_change;
|
$self->{plater}->on_model_change;
|
||||||
$self->{plater}->start_background_process;
|
$self->{plater}->start_background_process;
|
||||||
}else{
|
}else{
|
||||||
|
$self->{plater}->{print}->reload_object($self->{obj_idx});
|
||||||
|
$self->{plater}->on_model_change;
|
||||||
$self->{plater}->schedule_background_process;
|
$self->{plater}->schedule_background_process;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -151,10 +151,11 @@ sub reload_preview {
|
|||||||
my ($self) = @_;
|
my ($self) = @_;
|
||||||
$self->{splineControl}->update;
|
$self->{splineControl}->update;
|
||||||
$self->{preview3D}->reload_print;
|
$self->{preview3D}->reload_print;
|
||||||
if($self->{object}->layer_count-1 > 0) {
|
my $object = $self->{plater}->{print}->get_object($self->{obj_idx});
|
||||||
|
if($object->layer_count-1 > 0) {
|
||||||
# causes segfault...
|
# causes segfault...
|
||||||
#my $top_layer = $self->{object}->get_layer($self->{object}->layer_count-1);
|
my $top_layer = $object->get_layer($object->layer_count-1);
|
||||||
#$self->{preview3D}->set_z($top_layer->print_z);
|
$self->{preview3D}->set_z($top_layer->print_z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -317,6 +317,7 @@ PrintObject::invalidate_all_steps()
|
|||||||
for (std::set<PrintObjectStep>::const_iterator step = steps.begin(); step != steps.end(); ++step) {
|
for (std::set<PrintObjectStep>::const_iterator step = steps.begin(); step != steps.end(); ++step) {
|
||||||
if (this->invalidate_step(*step)) invalidated = true;
|
if (this->invalidate_step(*step)) invalidated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return invalidated;
|
return invalidated;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -671,14 +672,16 @@ std::vector<coordf_t> PrintObject::generate_object_layers(coordf_t first_layer_h
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store layer vector for interactive manipulation and push back to model
|
// Store layer vector for interactive manipulation
|
||||||
this->layer_height_spline.setLayers(result);
|
this->layer_height_spline.setLayers(result);
|
||||||
this->_model_object->layer_height_spline = this->layer_height_spline;
|
|
||||||
if (this->config.adaptive_slicing.value) { // smoothing after adaptive algorithm
|
if (this->config.adaptive_slicing.value) { // smoothing after adaptive algorithm
|
||||||
result = this->layer_height_spline.getInterpolatedLayers();
|
result = this->layer_height_spline.getInterpolatedLayers();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// push modified spline object back to model
|
||||||
|
this->_model_object->layer_height_spline = this->layer_height_spline;
|
||||||
|
|
||||||
// apply z-gradation (this is redundant for static layer height...)
|
// apply z-gradation (this is redundant for static layer height...)
|
||||||
coordf_t gradation = 1 / this->_print->config.z_steps_per_mm * 4;
|
coordf_t gradation = 1 / this->_print->config.z_steps_per_mm * 4;
|
||||||
if(this->_print->config.z_steps_per_mm > 0) {
|
if(this->_print->config.z_steps_per_mm > 0) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user