diff --git a/src/libslic3r/Format/3mf.cpp b/src/libslic3r/Format/3mf.cpp index 939ec7450..47f78b360 100644 --- a/src/libslic3r/Format/3mf.cpp +++ b/src/libslic3r/Format/3mf.cpp @@ -1506,7 +1506,7 @@ namespace Slic3r { if (metadata.key == NAME_KEY) volume->name = metadata.value; else if ((metadata.key == MODIFIER_KEY) && (metadata.value == "1")) - volume->set_type(ModelVolume::PARAMETER_MODIFIER); + volume->set_type(ModelVolumeType::PARAMETER_MODIFIER); else if (metadata.key == VOLUME_TYPE_KEY) volume->set_type(ModelVolume::type_from_string(metadata.value)); else diff --git a/src/libslic3r/Format/AMF.cpp b/src/libslic3r/Format/AMF.cpp index 81ca67129..2f5284db9 100644 --- a/src/libslic3r/Format/AMF.cpp +++ b/src/libslic3r/Format/AMF.cpp @@ -604,7 +604,7 @@ void AMFParserContext::endElement(const char * /* name */) if (strcmp(opt_key, "modifier") == 0) { // Is this volume a modifier volume? // "modifier" flag comes first in the XML file, so it may be later overwritten by the "type" flag. - m_volume->set_type((atoi(m_value[1].c_str()) == 1) ? ModelVolume::PARAMETER_MODIFIER : ModelVolume::MODEL_PART); + m_volume->set_type((atoi(m_value[1].c_str()) == 1) ? ModelVolumeType::PARAMETER_MODIFIER : ModelVolumeType::MODEL_PART); } else if (strcmp(opt_key, "volume_type") == 0) { m_volume->set_type(ModelVolume::type_from_string(m_value[1])); } diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index 422717279..6e291412c 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -1480,32 +1480,32 @@ const TriangleMesh& ModelVolume::get_convex_hull() const return m_convex_hull; } -ModelVolume::Type ModelVolume::type_from_string(const std::string &s) +ModelVolumeType ModelVolume::type_from_string(const std::string &s) { // Legacy support if (s == "1") - return PARAMETER_MODIFIER; + return ModelVolumeType::PARAMETER_MODIFIER; // New type (supporting the support enforcers & blockers) if (s == "ModelPart") - return MODEL_PART; + return ModelVolumeType::MODEL_PART; if (s == "ParameterModifier") - return PARAMETER_MODIFIER; + return ModelVolumeType::PARAMETER_MODIFIER; if (s == "SupportEnforcer") - return SUPPORT_ENFORCER; + return ModelVolumeType::SUPPORT_ENFORCER; if (s == "SupportBlocker") - return SUPPORT_BLOCKER; + return ModelVolumeType::SUPPORT_BLOCKER; assert(s == "0"); // Default value if invalud type string received. - return MODEL_PART; + return ModelVolumeType::MODEL_PART; } -std::string ModelVolume::type_to_string(const Type t) +std::string ModelVolume::type_to_string(const ModelVolumeType t) { switch (t) { - case MODEL_PART: return "ModelPart"; - case PARAMETER_MODIFIER: return "ParameterModifier"; - case SUPPORT_ENFORCER: return "SupportEnforcer"; - case SUPPORT_BLOCKER: return "SupportBlocker"; + case ModelVolumeType::MODEL_PART: return "ModelPart"; + case ModelVolumeType::PARAMETER_MODIFIER: return "ParameterModifier"; + case ModelVolumeType::SUPPORT_ENFORCER: return "SupportEnforcer"; + case ModelVolumeType::SUPPORT_BLOCKER: return "SupportBlocker"; default: assert(false); return "ModelPart"; @@ -1671,7 +1671,7 @@ bool model_object_list_extended(const Model &model_old, const Model &model_new) return true; } -bool model_volume_list_changed(const ModelObject &model_object_old, const ModelObject &model_object_new, const ModelVolume::Type type) +bool model_volume_list_changed(const ModelObject &model_object_old, const ModelObject &model_object_new, const ModelVolumeType type) { bool modifiers_differ = false; size_t i_old, i_new; diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index b67c6bf2e..a215f9b9f 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -295,6 +295,15 @@ private: mutable bool m_raw_mesh_bounding_box_valid; }; +// Declared outside of ModelVolume, so it could be forward declared. +enum class ModelVolumeType : int { + INVALID = -1, + MODEL_PART = 0, + PARAMETER_MODIFIER, + SUPPORT_ENFORCER, + SUPPORT_BLOCKER, +}; + // An object STL, or a modifier volume, over which a different set of parameters shall be applied. // ModelVolume instances are owned by a ModelObject. class ModelVolume : public ModelBase @@ -307,23 +316,15 @@ public: // overriding the global Slic3r settings and the ModelObject settings. DynamicPrintConfig config; - enum Type { - MODEL_TYPE_INVALID = -1, - MODEL_PART = 0, - PARAMETER_MODIFIER, - SUPPORT_ENFORCER, - SUPPORT_BLOCKER, - }; - // A parent object owning this modifier volume. ModelObject* get_object() const { return this->object; }; - Type type() const { return m_type; } - void set_type(const Type t) { m_type = t; } - bool is_model_part() const { return m_type == MODEL_PART; } - bool is_modifier() const { return m_type == PARAMETER_MODIFIER; } - bool is_support_enforcer() const { return m_type == SUPPORT_ENFORCER; } - bool is_support_blocker() const { return m_type == SUPPORT_BLOCKER; } - bool is_support_modifier() const { return m_type == SUPPORT_BLOCKER || m_type == SUPPORT_ENFORCER; } + ModelVolumeType type() const { return m_type; } + void set_type(const ModelVolumeType t) { m_type = t; } + bool is_model_part() const { return m_type == ModelVolumeType::MODEL_PART; } + bool is_modifier() const { return m_type == ModelVolumeType::PARAMETER_MODIFIER; } + bool is_support_enforcer() const { return m_type == ModelVolumeType::SUPPORT_ENFORCER; } + bool is_support_blocker() const { return m_type == ModelVolumeType::SUPPORT_BLOCKER; } + bool is_support_modifier() const { return m_type == ModelVolumeType::SUPPORT_BLOCKER || m_type == ModelVolumeType::SUPPORT_ENFORCER; } t_model_material_id material_id() const { return m_material_id; } void set_material_id(t_model_material_id material_id); ModelMaterial* material() const; @@ -357,8 +358,8 @@ public: const TriangleMesh& get_convex_hull() const; // Helpers for loading / storing into AMF / 3MF files. - static Type type_from_string(const std::string &s); - static std::string type_to_string(const Type t); + static ModelVolumeType type_from_string(const std::string &s); + static std::string type_to_string(const ModelVolumeType t); const Geometry::Transformation& get_transformation() const { return m_transformation; } void set_transformation(const Geometry::Transformation& transformation) { m_transformation = transformation; } @@ -403,7 +404,7 @@ private: // Parent object owning this ModelVolume. ModelObject* object; // Is it an object to be printed, or a modifier volume? - Type m_type; + ModelVolumeType m_type; t_model_material_id m_material_id; // The convex hull of this model's mesh. TriangleMesh m_convex_hull; @@ -415,13 +416,13 @@ private: // 1 -> is splittable int m_is_splittable {-1}; - ModelVolume(ModelObject *object, const TriangleMesh &mesh) : mesh(mesh), m_type(MODEL_PART), object(object) + ModelVolume(ModelObject *object, const TriangleMesh &mesh) : mesh(mesh), m_type(ModelVolumeType::MODEL_PART), object(object) { if (mesh.stl.stats.number_of_facets > 1) calculate_convex_hull(); } ModelVolume(ModelObject *object, TriangleMesh &&mesh, TriangleMesh &&convex_hull) : - mesh(std::move(mesh)), m_convex_hull(std::move(convex_hull)), m_type(MODEL_PART), object(object) {} + mesh(std::move(mesh)), m_convex_hull(std::move(convex_hull)), m_type(ModelVolumeType::MODEL_PART), object(object) {} // Copying an existing volume, therefore this volume will get a copy of the ID assigned. ModelVolume(ModelObject *object, const ModelVolume &other) : @@ -633,7 +634,7 @@ extern bool model_object_list_extended(const Model &model_old, const Model &mode // Test whether the new ModelObject contains a different set of volumes (or sorted in a different order) // than the old ModelObject. -extern bool model_volume_list_changed(const ModelObject &model_object_old, const ModelObject &model_object_new, const ModelVolume::Type type); +extern bool model_volume_list_changed(const ModelObject &model_object_old, const ModelObject &model_object_new, const ModelVolumeType type); #ifndef NDEBUG // Verify whether the IDs of Model / ModelObject / ModelVolume / ModelInstance / ModelMaterial are valid and unique. diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index da7e882f4..87e78f11c 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -571,7 +571,7 @@ void Print::model_volume_list_update_supports(ModelObject &model_object_dst, con delete mv_with_status.first; } -static inline void model_volume_list_copy_configs(ModelObject &model_object_dst, const ModelObject &model_object_src, const ModelVolume::Type type) +static inline void model_volume_list_copy_configs(ModelObject &model_object_dst, const ModelObject &model_object_src, const ModelVolumeType type) { size_t i_src, i_dst; for (i_src = 0, i_dst = 0; i_src < model_object_src.volumes.size() && i_dst < model_object_dst.volumes.size();) { @@ -841,10 +841,10 @@ Print::ApplyStatus Print::apply(const Model &model, const DynamicPrintConfig &co assert(it_status->status == ModelObjectStatus::Old || it_status->status == ModelObjectStatus::Moved); const ModelObject &model_object_new = *model.objects[idx_model_object]; // Check whether a model part volume was added or removed, their transformations or order changed. - bool model_parts_differ = model_volume_list_changed(model_object, model_object_new, ModelVolume::MODEL_PART); - bool modifiers_differ = model_volume_list_changed(model_object, model_object_new, ModelVolume::PARAMETER_MODIFIER); - bool support_blockers_differ = model_volume_list_changed(model_object, model_object_new, ModelVolume::SUPPORT_BLOCKER); - bool support_enforcers_differ = model_volume_list_changed(model_object, model_object_new, ModelVolume::SUPPORT_ENFORCER); + bool model_parts_differ = model_volume_list_changed(model_object, model_object_new, ModelVolumeType::MODEL_PART); + bool modifiers_differ = model_volume_list_changed(model_object, model_object_new, ModelVolumeType::PARAMETER_MODIFIER); + bool support_blockers_differ = model_volume_list_changed(model_object, model_object_new, ModelVolumeType::SUPPORT_BLOCKER); + bool support_enforcers_differ = model_volume_list_changed(model_object, model_object_new, ModelVolumeType::SUPPORT_ENFORCER); if (model_parts_differ || modifiers_differ || model_object.origin_translation != model_object_new.origin_translation || model_object.layer_height_ranges != model_object_new.layer_height_ranges || @@ -886,8 +886,8 @@ Print::ApplyStatus Print::apply(const Model &model, const DynamicPrintConfig &co } // Synchronize (just copy) the remaining data of ModelVolumes (name, config). //FIXME What to do with m_material_id? - model_volume_list_copy_configs(model_object /* dst */, model_object_new /* src */, ModelVolume::MODEL_PART); - model_volume_list_copy_configs(model_object /* dst */, model_object_new /* src */, ModelVolume::PARAMETER_MODIFIER); + model_volume_list_copy_configs(model_object /* dst */, model_object_new /* src */, ModelVolumeType::MODEL_PART); + model_volume_list_copy_configs(model_object /* dst */, model_object_new /* src */, ModelVolumeType::PARAMETER_MODIFIER); // Copy the ModelObject name, input_file and instances. The instances will compared against PrintObject instances in the next step. model_object.name = model_object_new.name; model_object.input_file = model_object_new.input_file; diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index 01f35149d..7f3bc2557 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -310,7 +310,7 @@ SLAPrint::ApplyStatus SLAPrint::apply(const Model &model, const DynamicPrintConf if (it_print_object_status != print_object_status.end() && it_print_object_status->id != model_object.id()) it_print_object_status = print_object_status.end(); // Check whether a model part volume was added or removed, their transformations or order changed. - bool model_parts_differ = model_volume_list_changed(model_object, model_object_new, ModelVolume::MODEL_PART); + bool model_parts_differ = model_volume_list_changed(model_object, model_object_new, ModelVolumeType::MODEL_PART); bool sla_trafo_differs = model_object.instances.empty() != model_object_new.instances.empty() || (! model_object.instances.empty() && ! sla_trafo(model_object).isApprox(sla_trafo(model_object_new))); if (model_parts_differ || sla_trafo_differs) { diff --git a/src/slic3r/GUI/GLGizmo.cpp b/src/slic3r/GUI/GLGizmo.cpp index 1ccb5ae81..723ac32a2 100644 --- a/src/slic3r/GUI/GLGizmo.cpp +++ b/src/slic3r/GUI/GLGizmo.cpp @@ -1514,7 +1514,7 @@ void GLGizmoFlatten::update_planes() TriangleMesh ch; for (const ModelVolume* vol : m_model_object->volumes) { - if (vol->type() != ModelVolume::Type::MODEL_PART) + if (vol->type() != ModelVolumeType::MODEL_PART) continue; TriangleMesh vol_ch = vol->get_convex_hull(); vol_ch.transform(vol->get_matrix()); diff --git a/src/slic3r/GUI/GLGizmo.hpp b/src/slic3r/GUI/GLGizmo.hpp index a24384012..7118c1650 100644 --- a/src/slic3r/GUI/GLGizmo.hpp +++ b/src/slic3r/GUI/GLGizmo.hpp @@ -403,7 +403,7 @@ private: // This holds information to decide whether recalculation is necessary: std::vector m_volumes_matrices; - std::vector m_volumes_types; + std::vector m_volumes_types; Vec3d m_first_instance_scale; Vec3d m_first_instance_mirror; diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 816e9d499..d973fd581 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -818,7 +818,7 @@ void ObjectList::update_settings_item() } } -void ObjectList::append_menu_item_add_generic(wxMenuItem* menu, const int type) { +void ObjectList::append_menu_item_add_generic(wxMenuItem* menu, const ModelVolumeType type) { auto sub_menu = new wxMenu; if (wxGetApp().get_mode() == comExpert) { @@ -827,10 +827,9 @@ void ObjectList::append_menu_item_add_generic(wxMenuItem* menu, const int type) sub_menu->AppendSeparator(); } - std::vector menu_items = { L("Box"), L("Cylinder"), L("Sphere"), L("Slab") }; - for (auto& item : menu_items) { + for (auto& item : { L("Box"), L("Cylinder"), L("Sphere"), L("Slab") }) { append_menu_item(sub_menu, wxID_ANY, _(item), "", - [this, type, item](wxCommandEvent&) { load_generic_subobject(_(item).ToUTF8().data(), type); }, "", menu->GetMenu()); + [this, type, item](wxCommandEvent&) { load_generic_subobject(item, type); }, "", menu->GetMenu()); } menu->SetSubMenu(sub_menu); @@ -839,10 +838,10 @@ void ObjectList::append_menu_item_add_generic(wxMenuItem* menu, const int type) void ObjectList::append_menu_items_add_volume(wxMenu* menu) { // Note: id accords to type of the sub-object, so sequence of the menu items is important - std::vector menu_object_types_items = {L("Add part"), // ~ModelVolume::MODEL_PART - L("Add modifier"), // ~ModelVolume::PARAMETER_MODIFIER - L("Add support enforcer"), // ~ModelVolume::SUPPORT_ENFORCER - L("Add support blocker") }; // ~ModelVolume::SUPPORT_BLOCKER + std::vector menu_object_types_items = {L("Add part"), // ~ModelVolumeType::MODEL_PART + L("Add modifier"), // ~ModelVolumeType::PARAMETER_MODIFIER + L("Add support enforcer"), // ~ModelVolumeType::SUPPORT_ENFORCER + L("Add support blocker") }; // ~ModelVolumeType::SUPPORT_BLOCKER // Update "add" items(delete old & create new) settings popupmenu for (auto& item : menu_object_types_items){ @@ -856,15 +855,15 @@ void ObjectList::append_menu_items_add_volume(wxMenu* menu) if (mode < comExpert) { append_menu_item(menu, wxID_ANY, _(L("Add part")), "", - [this](wxCommandEvent&) { load_subobject(ModelVolume::MODEL_PART); }, *m_bmp_vector[ModelVolume::MODEL_PART]); + [this](wxCommandEvent&) { load_subobject(ModelVolumeType::MODEL_PART); }, *m_bmp_vector[int(ModelVolumeType::MODEL_PART)]); } if (mode == comSimple) { append_menu_item(menu, wxID_ANY, _(L("Add support enforcer")), "", - [this](wxCommandEvent&) { load_generic_subobject(_(L("Box")).ToUTF8().data(), ModelVolume::SUPPORT_ENFORCER); }, - *m_bmp_vector[ModelVolume::SUPPORT_ENFORCER]); + [this](wxCommandEvent&) { load_generic_subobject(L("Box"), ModelVolumeType::SUPPORT_ENFORCER); }, + *m_bmp_vector[int(ModelVolumeType::SUPPORT_ENFORCER)]); append_menu_item(menu, wxID_ANY, _(L("Add support blocker")), "", - [this](wxCommandEvent&) { load_generic_subobject(_(L("Box")).ToUTF8().data(), ModelVolume::SUPPORT_BLOCKER); }, - *m_bmp_vector[ModelVolume::SUPPORT_BLOCKER]); + [this](wxCommandEvent&) { load_generic_subobject(L("Box"), ModelVolumeType::SUPPORT_BLOCKER); }, + *m_bmp_vector[int(ModelVolumeType::SUPPORT_BLOCKER)]); return; } @@ -875,7 +874,7 @@ void ObjectList::append_menu_items_add_volume(wxMenu* menu) auto menu_item = new wxMenuItem(menu, wxID_ANY, _(item)); menu_item->SetBitmap(*m_bmp_vector[type]); - append_menu_item_add_generic(menu_item, type); + append_menu_item_add_generic(menu_item, ModelVolumeType(type)); menu->Append(menu_item); } @@ -924,7 +923,7 @@ wxMenuItem* ObjectList::append_menu_item_settings(wxMenu* menu_) menu->DestroySeparators(); // delete old separators const auto sel_vol = get_selected_model_volume(); - if (sel_vol && sel_vol->type() >= ModelVolume::SUPPORT_ENFORCER) + if (sel_vol && sel_vol->type() >= ModelVolumeType::SUPPORT_ENFORCER) return nullptr; const ConfigOptionMode mode = wxGetApp().get_mode(); @@ -948,7 +947,7 @@ wxMenuItem* ObjectList::append_menu_item_settings(wxMenu* menu_) menu_item->SetBitmap(m_bmp_cog); // const auto sel_vol = get_selected_model_volume(); -// if (sel_vol && sel_vol->type() >= ModelVolume::SUPPORT_ENFORCER) +// if (sel_vol && sel_vol->type() >= ModelVolumeType::SUPPORT_ENFORCER) // menu_item->Enable(false); // else menu_item->SetSubMenu(create_settings_popupmenu(menu)); @@ -1103,7 +1102,7 @@ void ObjectList::update_opt_keys(t_config_option_keys& opt_keys) opt_keys.erase(opt_keys.begin() + i); } -void ObjectList::load_subobject(int type) +void ObjectList::load_subobject(ModelVolumeType type) { auto item = GetSelection(); if (!item || m_objects_model->GetParent(item) != wxDataViewItem(0)) @@ -1126,7 +1125,7 @@ void ObjectList::load_subobject(int type) void ObjectList::load_part( ModelObject* model_object, wxArrayString& part_names, - int type) + ModelVolumeType type) { wxWindow* parent = wxGetApp().tab_panel()->GetPage(0); @@ -1159,7 +1158,7 @@ void ObjectList::load_part( ModelObject* model_object, #endif // !ENABLE_VOLUMES_CENTERING_FIXES volume->translate(delta); auto new_volume = model_object->add_volume(*volume); - new_volume->set_type(static_cast(type)); + new_volume->set_type(type); new_volume->name = boost::filesystem::path(input_file).filename().string(); part_names.Add(from_u8(new_volume->name)); @@ -1174,28 +1173,28 @@ void ObjectList::load_part( ModelObject* model_object, } -void ObjectList::load_generic_subobject(const std::string& type_name, const int type) +void ObjectList::load_generic_subobject(const std::string& type_name, const ModelVolumeType type) { const auto obj_idx = get_selected_obj_idx(); if (obj_idx < 0) return; - const std::string name = "lambda-" + type_name; + const std::string name = _(L("Generic")) + "-" + _(type_name); TriangleMesh mesh; auto& bed_shape = wxGetApp().preset_bundle->printers.get_edited_preset().config.option("bed_shape")->values; const auto& sz = BoundingBoxf(bed_shape).size(); const auto side = 0.1 * std::max(sz(0), sz(1)); - if (type_name == _("Box")) { + if (type_name == "Box") { mesh = make_cube(side, side, side); // box sets the base coordinate at 0, 0, move to center of plate mesh.translate(-side * 0.5, -side * 0.5, 0); } - else if (type_name == _("Cylinder")) + else if (type_name == "Cylinder") mesh = make_cylinder(0.5*side, side); - else if (type_name == _("Sphere")) + else if (type_name == "Sphere") mesh = make_sphere(0.5*side, PI/18); - else if (type_name == _("Slab")) { + else if (type_name == "Slab") { const auto& size = (*m_objects)[obj_idx]->bounding_box().size(); mesh = make_cube(size(0)*1.5, size(1)*1.5, size(2)*0.5); // box sets the base coordinate at 0, 0, move to center of plate and move it up to initial_z @@ -1204,7 +1203,7 @@ void ObjectList::load_generic_subobject(const std::string& type_name, const int mesh.repair(); auto new_volume = (*m_objects)[obj_idx]->add_volume(mesh); - new_volume->set_type(static_cast(type)); + new_volume->set_type(type); #if !ENABLE_GENERIC_SUBPARTS_PLACEMENT new_volume->set_offset(Vec3d(0.0, 0.0, (*m_objects)[obj_idx]->origin_translation(2) - mesh.stl.stats.min(2))); @@ -1371,7 +1370,7 @@ void ObjectList::split() for (auto id = 0; id < model_object->volumes.size(); id++) { const auto vol_item = m_objects_model->AddVolumeChild(parent, from_u8(model_object->volumes[id]->name), model_object->volumes[id]->is_modifier() ? - ModelVolume::PARAMETER_MODIFIER : ModelVolume::MODEL_PART, + ModelVolumeType::PARAMETER_MODIFIER : ModelVolumeType::MODEL_PART, model_object->volumes[id]->config.has("extruder") ? model_object->volumes[id]->config.option("extruder")->value : 0, false); @@ -1973,15 +1972,15 @@ void ObjectList::change_part_type() if (!volume) return; - const auto type = volume->type(); - if (type == ModelVolume::MODEL_PART) + const ModelVolumeType type = volume->type(); + if (type == ModelVolumeType::MODEL_PART) { const int obj_idx = get_selected_obj_idx(); if (obj_idx < 0) return; int model_part_cnt = 0; for (auto vol : (*m_objects)[obj_idx]->volumes) { - if (vol->type() == ModelVolume::MODEL_PART) + if (vol->type() == ModelVolumeType::MODEL_PART) ++model_part_cnt; } @@ -1993,13 +1992,13 @@ void ObjectList::change_part_type() const wxString names[] = { "Part", "Modifier", "Support Enforcer", "Support Blocker" }; - auto new_type = wxGetSingleChoiceIndex("Type: ", _(L("Select type of part")), wxArrayString(4, names), type); + auto new_type = ModelVolumeType(wxGetSingleChoiceIndex("Type: ", _(L("Select type of part")), wxArrayString(4, names), int(type))); - if (new_type == type || new_type < 0) + if (new_type == type || new_type == ModelVolumeType::INVALID) return; const auto item = GetSelection(); - volume->set_type(static_cast(new_type)); + volume->set_type(new_type); m_objects_model->SetVolumeType(item, new_type); m_parts_changed = true; @@ -2009,11 +2008,11 @@ void ObjectList::change_part_type() //(we show additional settings for Part and Modifier and hide it for Support Blocker/Enforcer) const auto settings_item = m_objects_model->GetSettingsItem(item); if (settings_item && - (new_type == ModelVolume::SUPPORT_ENFORCER || new_type == ModelVolume::SUPPORT_BLOCKER)) { + (new_type == ModelVolumeType::SUPPORT_ENFORCER || new_type == ModelVolumeType::SUPPORT_BLOCKER)) { m_objects_model->Delete(settings_item); } else if (!settings_item && - (new_type == ModelVolume::MODEL_PART || new_type == ModelVolume::PARAMETER_MODIFIER)) { + (new_type == ModelVolumeType::MODEL_PART || new_type == ModelVolumeType::PARAMETER_MODIFIER)) { select_item(m_objects_model->AddSettingsChild(item)); } } diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp index e572bec82..138bacac4 100644 --- a/src/slic3r/GUI/GUI_ObjectList.hpp +++ b/src/slic3r/GUI/GUI_ObjectList.hpp @@ -21,6 +21,7 @@ class ConfigOptionsGroup; class DynamicPrintConfig; class ModelObject; class ModelVolume; +enum class ModelVolumeType : int; // FIXME: broken build on mac os because of this is missing: typedef std::vector t_config_option_keys; @@ -173,7 +174,7 @@ public: void get_freq_settings_choice(const wxString& bundle_name); void update_settings_item(); - void append_menu_item_add_generic(wxMenuItem* menu, const int type); + void append_menu_item_add_generic(wxMenuItem* menu, const ModelVolumeType type); void append_menu_items_add_volume(wxMenu* menu); wxMenuItem* append_menu_item_split(wxMenu* menu); wxMenuItem* append_menu_item_settings(wxMenu* menu); @@ -190,9 +191,9 @@ public: void update_opt_keys(t_config_option_keys& t_optopt_keys); - void load_subobject(int type); - void load_part(ModelObject* model_object, wxArrayString& part_names, int type); - void load_generic_subobject(const std::string& type_name, const int type); + void load_subobject(ModelVolumeType type); + void load_part(ModelObject* model_object, wxArrayString& part_names, ModelVolumeType type); + void load_generic_subobject(const std::string& type_name, const ModelVolumeType type); void del_object(const int obj_idx); void del_subobject_item(wxDataViewItem& item); void del_settings_from_config(); diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp index 58d6cab44..a3eeb45f4 100644 --- a/src/slic3r/GUI/wxExtensions.cpp +++ b/src/slic3r/GUI/wxExtensions.cpp @@ -492,7 +492,7 @@ wxDataViewItem PrusaObjectDataViewModel::Add(const wxString &name, const int ext wxDataViewItem PrusaObjectDataViewModel::AddVolumeChild(const wxDataViewItem &parent_item, const wxString &name, - const int volume_type, + const Slic3r::ModelVolumeType volume_type, const int extruder/* = 0*/, const bool create_frst_child/* = true*/) { @@ -518,7 +518,7 @@ wxDataViewItem PrusaObjectDataViewModel::AddVolumeChild(const wxDataViewItem &pa if (insert_position > 0) insert_position++; } - const auto node = new PrusaObjectDataViewModelNode(root, name, *m_volume_bmps[volume_type], extruder_str, root->m_volumes_cnt); + const auto node = new PrusaObjectDataViewModelNode(root, name, *m_volume_bmps[int(volume_type)], extruder_str, root->m_volumes_cnt); insert_position < 0 ? root->Append(node) : root->Insert(node, insert_position); // notify control const wxDataViewItem child((void*)node); @@ -1280,13 +1280,13 @@ void PrusaObjectDataViewModel::UpdateSettingsDigest(const wxDataViewItem &item, ItemChanged(item); } -void PrusaObjectDataViewModel::SetVolumeType(const wxDataViewItem &item, const int type) +void PrusaObjectDataViewModel::SetVolumeType(const wxDataViewItem &item, const Slic3r::ModelVolumeType type) { if (!item.IsOk() || GetItemType(item) != itVolume) return; PrusaObjectDataViewModelNode *node = (PrusaObjectDataViewModelNode*)item.GetID(); - node->SetBitmap(*m_volume_bmps[type]); + node->SetBitmap(*m_volume_bmps[int(type)]); ItemChanged(item); } diff --git a/src/slic3r/GUI/wxExtensions.hpp b/src/slic3r/GUI/wxExtensions.hpp index b17e73e43..1a1fe0f45 100644 --- a/src/slic3r/GUI/wxExtensions.hpp +++ b/src/slic3r/GUI/wxExtensions.hpp @@ -16,6 +16,10 @@ #include #include +namespace Slic3r { + enum class ModelVolumeType : int; +}; + wxMenuItem* append_menu_item(wxMenu* menu, int id, const wxString& string, const wxString& description, std::function cb, const wxBitmap& icon, wxEvtHandler* event_handler = nullptr); wxMenuItem* append_menu_item(wxMenu* menu, int id, const wxString& string, const wxString& description, @@ -448,7 +452,7 @@ public: wxDataViewItem Add(const wxString &name, const int extruder); wxDataViewItem AddVolumeChild(const wxDataViewItem &parent_item, const wxString &name, - const int volume_type, + const Slic3r::ModelVolumeType volume_type, const int extruder = 0, const bool create_frst_child = true); wxDataViewItem AddSettingsChild(const wxDataViewItem &parent_item); @@ -516,7 +520,7 @@ public: void UpdateSettingsDigest(const wxDataViewItem &item, const std::vector& categories); void SetVolumeBitmaps(const std::vector& volume_bmps) { m_volume_bmps = volume_bmps; } - void SetVolumeType(const wxDataViewItem &item, const int type); + void SetVolumeType(const wxDataViewItem &item, const Slic3r::ModelVolumeType type); void SetAssociatedControl(wxDataViewCtrl* ctrl) { m_ctrl = ctrl; } };