Fix to #9629 - Cut tool will not cut unless there is an object

Allow to perform a cut even if CutPlane doesn't cross the solid parts of object.
But show the warning line
This commit is contained in:
YuSanka 2023-02-09 15:22:01 +01:00
parent 73635e0855
commit b52ce29d12
2 changed files with 9 additions and 1 deletions

View File

@ -656,7 +656,7 @@ void GLGizmoCut3D::render_cut_plane()
shader->set_uniform("view_model_matrix", view_model_matrix); shader->set_uniform("view_model_matrix", view_model_matrix);
shader->set_uniform("projection_matrix", camera.get_projection_matrix()); shader->set_uniform("projection_matrix", camera.get_projection_matrix());
if (can_perform_cut()) if (can_perform_cut() && has_valid_contour())
// m_plane.set_color({ 0.8f, 0.8f, 0.8f, 0.5f }); // m_plane.set_color({ 0.8f, 0.8f, 0.8f, 0.5f });
m_plane.set_color({ 0.9f, 0.9f, 0.9f, 0.5f }); m_plane.set_color({ 0.9f, 0.9f, 0.9f, 0.5f });
else else
@ -1834,6 +1834,8 @@ void GLGizmoCut3D::render_input_window_warning() const
} }
if (!m_keep_upper && !m_keep_lower) if (!m_keep_upper && !m_keep_lower)
m_imgui->text(wxString(ImGui::WarningMarkerSmall) + _L("Invalid state. \nNo one part is selected for keep after cut")); m_imgui->text(wxString(ImGui::WarningMarkerSmall) + _L("Invalid state. \nNo one part is selected for keep after cut"));
if (!has_valid_contour())
m_imgui->text(wxString(ImGui::WarningMarkerSmall) + _L("Warning state. \nCut plane is placed out of object"));
} }
void GLGizmoCut3D::on_render_input_window(float x, float y, float bottom_limit) void GLGizmoCut3D::on_render_input_window(float x, float y, float bottom_limit)
@ -2038,6 +2040,11 @@ bool GLGizmoCut3D::can_perform_cut() const
if (m_has_invalid_connector || (!m_keep_upper && !m_keep_lower) || m_connectors_editing) if (m_has_invalid_connector || (!m_keep_upper && !m_keep_lower) || m_connectors_editing)
return false; return false;
return true;// has_valid_contour();
}
bool GLGizmoCut3D::has_valid_contour() const
{
const auto clipper = m_c->object_clipper(); const auto clipper = m_c->object_clipper();
return clipper && clipper->has_valid_contour(); return clipper && clipper->has_valid_contour();
} }

View File

@ -250,6 +250,7 @@ private:
void render_connectors(); void render_connectors();
bool can_perform_cut() const; bool can_perform_cut() const;
bool has_valid_contour() const;
void apply_connectors_in_model(ModelObject* mo, bool &create_dowels_as_separate_object); void apply_connectors_in_model(ModelObject* mo, bool &create_dowels_as_separate_object);
bool cut_line_processing() const; bool cut_line_processing() const;
void discard_cut_line_processing(); void discard_cut_line_processing();