mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-16 08:55:57 +08:00
GLGizmoEmboss: Fixed set_volume_type() for added text volume
This commit is contained in:
parent
176df52f64
commit
1c7e5dae92
@ -486,8 +486,9 @@ wxMenu* MenuFactory::append_submenu_add_generic(wxMenu* menu, ModelVolumeType ty
|
|||||||
|
|
||||||
auto add_text = [type](wxCommandEvent &) {
|
auto add_text = [type](wxCommandEvent &) {
|
||||||
GLGizmosManager &mng = plater()->canvas3D()->get_gizmos_manager();
|
GLGizmosManager &mng = plater()->canvas3D()->get_gizmos_manager();
|
||||||
if (mng.get_current_type() == GLGizmosManager::Emboss ||
|
if ((mng.get_current_type() == GLGizmosManager::Emboss ||
|
||||||
mng.open_gizmo(GLGizmosManager::Emboss)) {
|
mng.open_gizmo(GLGizmosManager::Emboss)) &&
|
||||||
|
type != ModelVolumeType::INVALID) {
|
||||||
GLGizmoEmboss *emboss = dynamic_cast<GLGizmoEmboss *>(mng.get_current());
|
GLGizmoEmboss *emboss = dynamic_cast<GLGizmoEmboss *>(mng.get_current());
|
||||||
emboss->set_volume_type(type);
|
emboss->set_volume_type(type);
|
||||||
}
|
}
|
||||||
@ -495,6 +496,7 @@ wxMenu* MenuFactory::append_submenu_add_generic(wxMenu* menu, ModelVolumeType ty
|
|||||||
|
|
||||||
if (type == ModelVolumeType::MODEL_PART
|
if (type == ModelVolumeType::MODEL_PART
|
||||||
|| type == ModelVolumeType::NEGATIVE_VOLUME
|
|| type == ModelVolumeType::NEGATIVE_VOLUME
|
||||||
|
|| type == ModelVolumeType::PARAMETER_MODIFIER
|
||||||
|| type == ModelVolumeType::INVALID // cannot use gizmo without selected object
|
|| type == ModelVolumeType::INVALID // cannot use gizmo without selected object
|
||||||
)
|
)
|
||||||
append_menu_item(sub_menu, wxID_ANY, _L("Text"), "", add_text, "", menu);
|
append_menu_item(sub_menu, wxID_ANY, _L("Text"), "", add_text, "", menu);
|
||||||
|
@ -409,6 +409,26 @@ bool GLGizmoEmboss::process()
|
|||||||
return add_volume(create_volume_name(), its);
|
return add_volume(create_volume_name(), its);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLGizmoEmboss::set_volume_type(ModelVolumeType volume_type)
|
||||||
|
{
|
||||||
|
m_volume_type = volume_type; // fsFIXME - may be it's no needed
|
||||||
|
|
||||||
|
const Selection& selection = m_parent.get_selection();
|
||||||
|
if (selection.is_empty() || selection.get_object_idx() < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_volume->set_type(volume_type);
|
||||||
|
|
||||||
|
ObjectList* obj_list = wxGetApp().obj_list();
|
||||||
|
ModelVolume* volume = m_volume; // copy pointer for lambda
|
||||||
|
wxDataViewItemArray sel = obj_list->reorder_volumes_and_get_selection(selection.get_object_idx(), [volume](const ModelVolume* vol) { return vol == volume; });
|
||||||
|
if (!sel.IsEmpty())
|
||||||
|
obj_list->select_item(sel.front());
|
||||||
|
|
||||||
|
obj_list->selection_changed();
|
||||||
|
m_parent.reload_scene(true);
|
||||||
|
}
|
||||||
|
|
||||||
bool GLGizmoEmboss::add_volume(const std::string &name, indexed_triangle_set &its)
|
bool GLGizmoEmboss::add_volume(const std::string &name, indexed_triangle_set &its)
|
||||||
{
|
{
|
||||||
if (its.indices.empty()) return false;
|
if (its.indices.empty()) return false;
|
||||||
@ -453,32 +473,6 @@ bool GLGizmoEmboss::add_volume(const std::string &name, indexed_triangle_set &it
|
|||||||
m_volume->config.set_key_value("extruder", new ConfigOptionInt(0));
|
m_volume->config.set_key_value("extruder", new ConfigOptionInt(0));
|
||||||
m_volume->text_configuration = create_configuration();
|
m_volume->text_configuration = create_configuration();
|
||||||
|
|
||||||
// select new added volume
|
|
||||||
ModelObject *mo = m_volume->get_object();
|
|
||||||
// Editing object volume change its name
|
|
||||||
if (mo->volumes.size() == 1) mo->name = name;
|
|
||||||
ObjectList * obj_list = app.obj_list();
|
|
||||||
const ModelObjectPtrs &objs = *obj_list->objects();
|
|
||||||
auto item = find(objs.begin(), objs.end(), mo);
|
|
||||||
assert(item != objs.end());
|
|
||||||
int object_idx = item - objs.begin();
|
|
||||||
ModelVolume *new_volume = m_volume; // copy pointer for lambda
|
|
||||||
obj_list->select_item([new_volume, object_idx, obj_list]() {
|
|
||||||
wxDataViewItemArray items = obj_list->reorder_volumes_and_get_selection(
|
|
||||||
object_idx, [new_volume](const ModelVolume *volume) {
|
|
||||||
return volume == new_volume;
|
|
||||||
});
|
|
||||||
if (items.IsEmpty()) return wxDataViewItem();
|
|
||||||
return items.front();
|
|
||||||
});
|
|
||||||
|
|
||||||
if (m_volume->type() == ModelVolumeType::MODEL_PART)
|
|
||||||
// update printable state on canvas
|
|
||||||
m_parent.update_instance_printable_state_for_object(
|
|
||||||
(size_t) object_idx);
|
|
||||||
|
|
||||||
obj_list->selection_changed();
|
|
||||||
m_parent.reload_scene(true);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,7 +23,8 @@ public:
|
|||||||
GLGizmoEmboss(GLCanvas3D& parent);
|
GLGizmoEmboss(GLCanvas3D& parent);
|
||||||
virtual ~GLGizmoEmboss();
|
virtual ~GLGizmoEmboss();
|
||||||
|
|
||||||
void set_volume_type(ModelVolumeType volume_type) { m_volume_type = volume_type; }
|
void set_volume_type(ModelVolumeType volume_type);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual bool on_init() override;
|
virtual bool on_init() override;
|
||||||
virtual std::string on_get_name() const override;
|
virtual std::string on_get_name() const override;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user