diff --git a/lib/Slic3r/GUI/Plater.pm b/lib/Slic3r/GUI/Plater.pm index ca548e1aa..f83ba8a60 100644 --- a/lib/Slic3r/GUI/Plater.pm +++ b/lib/Slic3r/GUI/Plater.pm @@ -774,18 +774,20 @@ sub split_object { my ($obj_idx, $current_object) = $self->selected_object; # we clone model object because split_object() adds the split volumes - # into the same model object, thus causing duplicated when we call load_model_objects() - my $current_model_object = $self->{model}->clone->objects->[$obj_idx]; + # into the same model object, thus causing duplicates when we call load_model_objects() + my $new_model = $self->{model}->clone; # store this before calling get_object() + my $current_model_object = $new_model->get_object($obj_idx); - if (@{$current_model_object->volumes} > 1) { + if ($current_model_object->volumes_count > 1) { Slic3r::GUI::warning_catcher($self)->("The selected object can't be split because it contains more than one volume/material."); return; } - $self->stop_background_process; + $self->pause_background_process; my @model_objects = @{$current_model_object->split_object}; if (@model_objects == 1) { + $self->resume_background_process; Slic3r::GUI::warning_catcher($self)->("The selected object couldn't be split because it contains only one part."); return; } diff --git a/xs/src/libslic3r/Model.cpp b/xs/src/libslic3r/Model.cpp index 06919cedd..40926eb93 100644 --- a/xs/src/libslic3r/Model.cpp +++ b/xs/src/libslic3r/Model.cpp @@ -13,7 +13,7 @@ Model::Model(const Model &other) // copy objects this->objects.reserve(other.objects.size()); for (ModelObjectPtrs::const_iterator i = other.objects.begin(); i != other.objects.end(); ++i) - this->add_object(**i); + this->add_object(**i, true); } Model& Model::operator= (Model other) @@ -618,6 +618,7 @@ ModelObject::split(ModelObjectPtrs* new_objects) new_volume->material_id(volume->material_id()); new_objects->push_back(new_object); + delete *mesh; } return; diff --git a/xs/src/perlglue.hpp b/xs/src/perlglue.hpp index 833eee6f3..84c9a7ae9 100644 --- a/xs/src/perlglue.hpp +++ b/xs/src/perlglue.hpp @@ -42,9 +42,9 @@ template class Ref { T* val; public: - Ref() {} + Ref() : val(NULL) {} Ref(T* t) : val(t) {} - operator T*() const {return val; } + operator T*() const { return val; } static const char* CLASS() { return ClassTraits::name_ref; } }; @@ -52,10 +52,10 @@ template class Clone { T* val; public: - Clone() : val() {} + Clone() : val(NULL) {} Clone(T* t) : val(new T(*t)) {} Clone(const T& t) : val(new T(t)) {} - operator T*() const {return val; } + operator T*() const { return val; } static const char* CLASS() { return ClassTraits::name; } }; };