Tech ENABLE_WORLD_COORDINATE - Modified behavior of mirror buttons in sidebar panel. Trigger transformation but do not show state.
This commit is contained in:
parent
72dff918d0
commit
5f26b8c601
@ -268,25 +268,39 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) :
|
|||||||
btn->SetToolTip(wxString::Format(_L("Toggle %c axis mirroring"), (int)label));
|
btn->SetToolTip(wxString::Format(_L("Toggle %c axis mirroring"), (int)label));
|
||||||
btn->SetBitmapDisabled_(m_mirror_bitmap_hidden);
|
btn->SetBitmapDisabled_(m_mirror_bitmap_hidden);
|
||||||
|
|
||||||
|
#if ENABLE_WORLD_COORDINATE
|
||||||
|
m_mirror_buttons[axis_idx] = btn;
|
||||||
|
#else
|
||||||
m_mirror_buttons[axis_idx].first = btn;
|
m_mirror_buttons[axis_idx].first = btn;
|
||||||
m_mirror_buttons[axis_idx].second = mbShown;
|
m_mirror_buttons[axis_idx].second = mbShown;
|
||||||
|
#endif // ENABLE_WORLD_COORDINATE
|
||||||
|
|
||||||
sizer->AddStretchSpacer(2);
|
sizer->AddStretchSpacer(2);
|
||||||
sizer->Add(btn, 0, wxALIGN_CENTER_VERTICAL);
|
sizer->Add(btn, 0, wxALIGN_CENTER_VERTICAL);
|
||||||
|
|
||||||
btn->Bind(wxEVT_BUTTON, [this, axis_idx](wxCommandEvent&) {
|
btn->Bind(wxEVT_BUTTON, [this, axis_idx](wxCommandEvent&) {
|
||||||
|
#if !ENABLE_WORLD_COORDINATE
|
||||||
Axis axis = (Axis)(axis_idx + X);
|
Axis axis = (Axis)(axis_idx + X);
|
||||||
if (m_mirror_buttons[axis_idx].second == mbHidden)
|
if (m_mirror_buttons[axis_idx].second == mbHidden)
|
||||||
return;
|
return;
|
||||||
|
#endif // !ENABLE_WORLD_COORDINATE
|
||||||
|
|
||||||
GLCanvas3D* canvas = wxGetApp().plater()->canvas3D();
|
GLCanvas3D* canvas = wxGetApp().plater()->canvas3D();
|
||||||
Selection& selection = canvas->get_selection();
|
Selection& selection = canvas->get_selection();
|
||||||
|
|
||||||
#if ENABLE_WORLD_COORDINATE
|
#if ENABLE_WORLD_COORDINATE
|
||||||
if (selection.is_single_volume_or_modifier()) {
|
TransformationType transformation_type;
|
||||||
|
if (is_local_coordinates())
|
||||||
|
transformation_type.set_local();
|
||||||
|
else if (is_instance_coordinates())
|
||||||
|
transformation_type.set_instance();
|
||||||
|
|
||||||
|
transformation_type.set_relative();
|
||||||
|
|
||||||
|
selection.setup_cache();
|
||||||
|
selection.mirror((Axis)axis_idx, transformation_type);
|
||||||
#else
|
#else
|
||||||
if (selection.is_single_volume() || selection.is_single_modifier()) {
|
if (selection.is_single_volume() || selection.is_single_modifier()) {
|
||||||
#endif // ENABLE_WORLD_COORDINATE
|
|
||||||
GLVolume* volume = const_cast<GLVolume*>(selection.get_first_volume());
|
GLVolume* volume = const_cast<GLVolume*>(selection.get_first_volume());
|
||||||
volume->set_volume_mirror(axis, -volume->get_volume_mirror(axis));
|
volume->set_volume_mirror(axis, -volume->get_volume_mirror(axis));
|
||||||
}
|
}
|
||||||
@ -302,6 +316,7 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) :
|
|||||||
// Update mirroring at the GLVolumes.
|
// Update mirroring at the GLVolumes.
|
||||||
selection.synchronize_unselected_instances(Selection::SyncRotationType::GENERAL);
|
selection.synchronize_unselected_instances(Selection::SyncRotationType::GENERAL);
|
||||||
selection.synchronize_unselected_volumes();
|
selection.synchronize_unselected_volumes();
|
||||||
|
#endif // ENABLE_WORLD_COORDINATE
|
||||||
// Copy mirroring values from GLVolumes into Model (ModelInstance / ModelVolume), trigger background processing.
|
// Copy mirroring values from GLVolumes into Model (ModelInstance / ModelVolume), trigger background processing.
|
||||||
canvas->do_mirror(L("Set Mirror"));
|
canvas->do_mirror(L("Set Mirror"));
|
||||||
UpdateAndShow(true);
|
UpdateAndShow(true);
|
||||||
@ -977,16 +992,14 @@ void ObjectManipulation::update_mirror_buttons_visibility()
|
|||||||
{
|
{
|
||||||
GLCanvas3D* canvas = wxGetApp().plater()->canvas3D();
|
GLCanvas3D* canvas = wxGetApp().plater()->canvas3D();
|
||||||
Selection& selection = canvas->get_selection();
|
Selection& selection = canvas->get_selection();
|
||||||
std::array<MirrorButtonState, 3> new_states = {mbHidden, mbHidden, mbHidden};
|
|
||||||
|
|
||||||
#if ENABLE_WORLD_COORDINATE
|
#if ENABLE_WORLD_COORDINATE
|
||||||
if (is_local_coordinates()) {
|
if (is_local_coordinates()) {
|
||||||
#else
|
|
||||||
if (!m_world_coordinates) {
|
|
||||||
#endif // ENABLE_WORLD_COORDINATE
|
|
||||||
#if ENABLE_WORLD_COORDINATE
|
|
||||||
if (selection.is_single_full_instance() || selection.is_single_volume_or_modifier()) {
|
if (selection.is_single_full_instance() || selection.is_single_volume_or_modifier()) {
|
||||||
#else
|
#else
|
||||||
|
std::array<MirrorButtonState, 3> new_states = { mbHidden, mbHidden, mbHidden };
|
||||||
|
|
||||||
|
if (!m_world_coordinates) {
|
||||||
if (selection.is_single_full_instance() || selection.is_single_modifier() || selection.is_single_volume()) {
|
if (selection.is_single_full_instance() || selection.is_single_modifier() || selection.is_single_volume()) {
|
||||||
#endif // ENABLE_WORLD_COORDINATE
|
#endif // ENABLE_WORLD_COORDINATE
|
||||||
const GLVolume* volume = selection.get_first_volume();
|
const GLVolume* volume = selection.get_first_volume();
|
||||||
@ -997,10 +1010,13 @@ void ObjectManipulation::update_mirror_buttons_visibility()
|
|||||||
else
|
else
|
||||||
mirror = volume->get_volume_mirror();
|
mirror = volume->get_volume_mirror();
|
||||||
|
|
||||||
|
#if !ENABLE_WORLD_COORDINATE
|
||||||
for (unsigned char i=0; i<3; ++i)
|
for (unsigned char i=0; i<3; ++i)
|
||||||
new_states[i] = (mirror[i] < 0. ? mbActive : mbShown);
|
new_states[i] = (mirror[i] < 0. ? mbActive : mbShown);
|
||||||
|
#endif // !ENABLE_WORLD_COORDINATE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if !ENABLE_WORLD_COORDINATE
|
||||||
else {
|
else {
|
||||||
// the mirroring buttons should be hidden in world coordinates,
|
// the mirroring buttons should be hidden in world coordinates,
|
||||||
// unless we make it actually mirror in world coords.
|
// unless we make it actually mirror in world coords.
|
||||||
@ -1022,6 +1038,7 @@ void ObjectManipulation::update_mirror_buttons_visibility()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
#endif // !ENABLE_WORLD_COORDINATE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1432,8 +1449,14 @@ void ObjectManipulation::sys_color_changed()
|
|||||||
m_drop_to_bed_button->sys_color_changed();
|
m_drop_to_bed_button->sys_color_changed();
|
||||||
m_lock_bnt->sys_color_changed();
|
m_lock_bnt->sys_color_changed();
|
||||||
|
|
||||||
|
#if ENABLE_WORLD_COORDINATE
|
||||||
|
for (int id = 0; id < 3; ++id) {
|
||||||
|
m_mirror_buttons[id]->sys_color_changed();
|
||||||
|
}
|
||||||
|
#else
|
||||||
for (int id = 0; id < 3; ++id)
|
for (int id = 0; id < 3; ++id)
|
||||||
m_mirror_buttons[id].first->sys_color_changed();
|
m_mirror_buttons[id].first->sys_color_changed();
|
||||||
|
#endif // ENABLE_WORLD_COORDINATE
|
||||||
}
|
}
|
||||||
|
|
||||||
#if ENABLE_WORLD_COORDINATE
|
#if ENABLE_WORLD_COORDINATE
|
||||||
|
@ -132,6 +132,9 @@ private:
|
|||||||
|
|
||||||
wxCheckBox* m_check_inch {nullptr};
|
wxCheckBox* m_check_inch {nullptr};
|
||||||
|
|
||||||
|
#if ENABLE_WORLD_COORDINATE
|
||||||
|
std::array<ScalableButton*, 3> m_mirror_buttons;
|
||||||
|
#else
|
||||||
// Mirroring buttons and their current state
|
// Mirroring buttons and their current state
|
||||||
enum MirrorButtonState {
|
enum MirrorButtonState {
|
||||||
mbHidden,
|
mbHidden,
|
||||||
@ -139,6 +142,7 @@ private:
|
|||||||
mbActive
|
mbActive
|
||||||
};
|
};
|
||||||
std::array<std::pair<ScalableButton*, MirrorButtonState>, 3> m_mirror_buttons;
|
std::array<std::pair<ScalableButton*, MirrorButtonState>, 3> m_mirror_buttons;
|
||||||
|
#endif // ENABLE_WORLD_COORDINATE
|
||||||
|
|
||||||
// Bitmaps for the mirroring buttons.
|
// Bitmaps for the mirroring buttons.
|
||||||
ScalableBitmap m_mirror_bitmap_on;
|
ScalableBitmap m_mirror_bitmap_on;
|
||||||
@ -149,8 +153,8 @@ private:
|
|||||||
bool m_dirty = false;
|
bool m_dirty = false;
|
||||||
// Cached labels for the delayed update, not localized!
|
// Cached labels for the delayed update, not localized!
|
||||||
std::string m_new_move_label_string;
|
std::string m_new_move_label_string;
|
||||||
std::string m_new_rotate_label_string;
|
std::string m_new_rotate_label_string;
|
||||||
std::string m_new_scale_label_string;
|
std::string m_new_scale_label_string;
|
||||||
Vec3d m_new_position;
|
Vec3d m_new_position;
|
||||||
Vec3d m_new_rotation;
|
Vec3d m_new_rotation;
|
||||||
Vec3d m_new_scale;
|
Vec3d m_new_scale;
|
||||||
|
Loading…
Reference in New Issue
Block a user