FIX:fix bug of toggle_selection by right click
Jira: STUDIO-6511 Change-Id: I24efc6462c97902890bdd1b73ae6005cb3b6d958
This commit is contained in:
parent
94f62f7389
commit
f2c712a688
|
@ -573,6 +573,9 @@ void GLGizmoAdvancedCut::on_start_dragging()
|
||||||
|
|
||||||
void GLGizmoAdvancedCut::on_stop_dragging()
|
void GLGizmoAdvancedCut::on_stop_dragging()
|
||||||
{
|
{
|
||||||
|
if (m_is_dragging ==false) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
m_is_dragging = false;
|
m_is_dragging = false;
|
||||||
if (m_hover_id == X || m_hover_id == Y || m_hover_id == Z) {
|
if (m_hover_id == X || m_hover_id == Y || m_hover_id == Z) {
|
||||||
Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Rotate cut plane");
|
Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Rotate cut plane");
|
||||||
|
@ -867,7 +870,7 @@ void GLGizmoAdvancedCut::perform_cut(const Selection& selection)
|
||||||
});
|
});
|
||||||
|
|
||||||
const bool cut_with_groove = m_cut_mode == CutMode::cutTongueAndGroove;
|
const bool cut_with_groove = m_cut_mode == CutMode::cutTongueAndGroove;
|
||||||
bool cut_by_contour = false;//!cut_with_groove && !m_cut_to_parts && m_part_selection->valid();
|
bool cut_by_contour = !cut_with_groove && m_part_selection->valid() && m_part_selection->has_modified_cut_parts();
|
||||||
|
|
||||||
ModelObject *cut_mo = cut_by_contour ? m_part_selection->model_object() : nullptr;
|
ModelObject *cut_mo = cut_by_contour ? m_part_selection->model_object() : nullptr;
|
||||||
if (cut_mo)
|
if (cut_mo)
|
||||||
|
@ -2577,6 +2580,10 @@ PartSelection::PartSelection(
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_back_cut_parts_state.resize(m_cut_parts.size());
|
||||||
|
for (size_t i = 0; i < m_cut_parts.size(); i++) {
|
||||||
|
m_back_cut_parts_state[i] = m_cut_parts[i].is_up_part;
|
||||||
|
}
|
||||||
// Now go through the contours and create a map from contours to parts.
|
// Now go through the contours and create a map from contours to parts.
|
||||||
m_contour_points.clear();
|
m_contour_points.clear();
|
||||||
m_contour_to_parts.clear();
|
m_contour_to_parts.clear();
|
||||||
|
@ -2687,6 +2694,19 @@ std::vector<Cut::Part> PartSelection::get_cut_parts()
|
||||||
return parts;
|
return parts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool PartSelection::has_modified_cut_parts()
|
||||||
|
{
|
||||||
|
if (m_back_cut_parts_state.size() == 0 || m_back_cut_parts_state.size() != m_cut_parts.size()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (size_t i = 0; i < m_cut_parts.size(); i++) {
|
||||||
|
if (m_back_cut_parts_state[i] != m_cut_parts[i].is_up_part) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void PartSelection::toggle_selection(const Vec2d &mouse_pos)
|
void PartSelection::toggle_selection(const Vec2d &mouse_pos)
|
||||||
{
|
{
|
||||||
const Camera &camera = wxGetApp().plater()->get_camera();
|
const Camera &camera = wxGetApp().plater()->get_camera();
|
||||||
|
|
|
@ -51,11 +51,13 @@ public:
|
||||||
|
|
||||||
std::vector<Cut::Part> get_cut_parts();
|
std::vector<Cut::Part> get_cut_parts();
|
||||||
std::vector<PartPara> &get_parts() { return m_cut_parts; }
|
std::vector<PartPara> &get_parts() { return m_cut_parts; }
|
||||||
|
bool has_modified_cut_parts();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Model m_model;
|
Model m_model;
|
||||||
int m_instance_idx;
|
int m_instance_idx;
|
||||||
std::vector<PartPara> m_cut_parts;
|
std::vector<PartPara> m_cut_parts;
|
||||||
|
std::vector<bool> m_back_cut_parts_state;
|
||||||
bool m_valid = false;
|
bool m_valid = false;
|
||||||
std::vector<std::pair<std::vector<size_t>, std::vector<size_t>>> m_contour_to_parts; // for each contour, there is a vector of parts above and a vector of parts below
|
std::vector<std::pair<std::vector<size_t>, std::vector<size_t>>> m_contour_to_parts; // for each contour, there is a vector of parts above and a vector of parts below
|
||||||
std::vector<size_t> m_ignored_contours; // contour that should not be rendered (the parts on both sides will both be parts of the same object)
|
std::vector<size_t> m_ignored_contours; // contour that should not be rendered (the parts on both sides will both be parts of the same object)
|
||||||
|
|
Loading…
Reference in New Issue