Implemented increase/decrease for instances.

This commit is contained in:
Joseph Lenox 2018-05-13 09:19:12 -05:00 committed by Joseph Lenox
parent 035ce47c4e
commit 50345c3412
2 changed files with 70 additions and 6 deletions

View File

@ -677,12 +677,51 @@ void Plater::reset(bool dont_push) {
this->on_model_change();
}
void Plater::increase() {
//TODO
void Plater::increase(size_t copies, bool dont_push) {
auto obj {this->selected_object()};
if (obj == this->objects.end()) return; // do nothing; nothing is selected.
this->stop_background_process();
auto* model_object {this->model->objects.at(obj->identifier)};
ModelInstance* instance {model_object->instances.back()};
for (size_t i = 1; i <= copies; i++) {
instance = model_object->add_instance(*instance);
instance->offset.x += 10;
instance->offset.y += 10;
this->print->objects.at(obj->identifier)->add_copy(instance->offset);
}
if (!dont_push) {
this->add_undo_operation(UndoCmd::Increase, obj->identifier, copies);
}
if(settings->autocenter) {
this->arrange();
} else {
this->on_model_change();
}
}
void Plater::decrease() {
//TODO
void Plater::decrease(size_t copies, bool dont_push) {
auto obj {this->selected_object()};
if (obj == this->objects.end()) return; // do nothing; nothing is selected.
this->stop_background_process();
auto* model_object {this->model->objects.at(obj->identifier)};
if (model_object->instances.size() > copies) {
for (size_t i = 1; i <= copies; i++) {
model_object->delete_last_instance();
this->print->objects.at(obj->identifier)->delete_last_copy();
}
if (!dont_push) {
this->add_undo_operation(UndoCmd::Decrease, obj->identifier, copies);
}
} else {
this->remove();
}
this->on_model_change();
}
void Plater::rotate(double angle) {
@ -714,9 +753,27 @@ void Plater::add_undo_operation(UndoCmd cmd, int obj_id, Slic3r::Model& model) {
add_undo_operation(cmd, tmp, model);
}
void Plater::add_undo_operation(UndoCmd cmd, int obj_id, size_t copies) {
}
void Plater::object_list_changed() {
//TODO
}
void Plater::stop_background_process() {
//TODO
}
void Plater::start_background_process() {
//TODO
}
void Plater::pause_background_process() {
//TODO
}
void Plater::resume_background_process() {
//TODO
}
}} // Namespace Slic3r::GUI

View File

@ -165,10 +165,10 @@ private:
void reset(bool dont_push = false);
/// Make instances of the currently selected model.
void increase();
void increase(size_t copies = 1, bool dont_push = false);
/// Remove instances of the currently selected model.
void decrease();
void decrease(size_t copies = 1, bool dont_push = false);
/// Rotate the currently selected model.
void rotate(double angle);
@ -188,6 +188,13 @@ private:
/// Process a change in the object list.
void object_list_changed();
/// Halt ongoing background processes.
void stop_background_process();
void start_background_process();
void pause_background_process();
void resume_background_process();
};