void Model::duplicate_objects_grid(size_t x, size_t y, coordf_t dist) { if (this->objects.size() > 1) throw std::runtime_error("Grid duplication is not supported with multiple objects"); if (this->objects.empty()) throw std::runtime_error("No objects!"); ModelObject* object = this->objects.front(); object->clear_instances(); Sizef3 size = object->bounding_box().size(); for (size_t x_copy = 1; x_copy <= x; ++x_copy) { for (size_t y_copy = 1; y_copy <= y; ++y_copy) { ModelInstance* instance = object->add_instance(); instance->offset.x = (size.x + dist) * (x_copy-1); instance->offset.y = (size.y + dist) * (y_copy-1); } } }
void Model::convert_multipart_object() { if (this->objects.empty()) return; ModelObject* object = this->add_object(); object->input_file = this->objects.front()->input_file; for (const ModelObject* o : this->objects) { for (const ModelVolume* v : o->volumes) { ModelVolume* v2 = object->add_volume(*v); v2->name = o->name; } } for (const ModelInstance* i : this->objects.front()->instances) object->add_instance(*i); while (this->objects.size() > 1) this->delete_object(0); }