Do not show sinking contours when a gizmo hides some objects

This commit is contained in:
Lukas Matena 2021-08-11 15:52:52 +02:00
parent 83ab034f9a
commit b14faf627b
5 changed files with 28 additions and 17 deletions

View File

@ -843,12 +843,13 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab
volume.first->set_render_color(); volume.first->set_render_color();
// render sinking contours of non-hovered volumes // render sinking contours of non-hovered volumes
if (volume.first->is_sinking() && !volume.first->is_below_printbed() && if (m_show_sinking_contours)
volume.first->hover == GLVolume::HS_None && !volume.first->force_sinking_contours) { if (volume.first->is_sinking() && !volume.first->is_below_printbed() &&
shader->stop_using(); volume.first->hover == GLVolume::HS_None && !volume.first->force_sinking_contours) {
volume.first->render_sinking_contours(); shader->stop_using();
shader->start_using(); volume.first->render_sinking_contours();
} shader->start_using();
}
glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); glsafe(::glEnableClientState(GL_VERTEX_ARRAY));
glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); glsafe(::glEnableClientState(GL_NORMAL_ARRAY));
@ -887,17 +888,18 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab
glsafe(::glDisableClientState(GL_NORMAL_ARRAY)); glsafe(::glDisableClientState(GL_NORMAL_ARRAY));
} }
for (GLVolumeWithIdAndZ& volume : to_render) { if (m_show_sinking_contours)
// render sinking contours of hovered/displaced volumes for (GLVolumeWithIdAndZ& volume : to_render) {
if (volume.first->is_sinking() && !volume.first->is_below_printbed() && // render sinking contours of hovered/displaced volumes
(volume.first->hover != GLVolume::HS_None || volume.first->force_sinking_contours)) { if (volume.first->is_sinking() && !volume.first->is_below_printbed() &&
shader->stop_using(); (volume.first->hover != GLVolume::HS_None || volume.first->force_sinking_contours)) {
glsafe(::glDepthFunc(GL_ALWAYS)); shader->stop_using();
volume.first->render_sinking_contours(); glsafe(::glDepthFunc(GL_ALWAYS));
glsafe(::glDepthFunc(GL_LESS)); volume.first->render_sinking_contours();
shader->start_using(); glsafe(::glDepthFunc(GL_LESS));
shader->start_using();
}
} }
}
#else #else
glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); glsafe(::glEnableClientState(GL_VERTEX_ARRAY));
glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); glsafe(::glEnableClientState(GL_NORMAL_ARRAY));

View File

@ -539,6 +539,7 @@ private:
}; };
Slope m_slope; Slope m_slope;
bool m_show_sinking_contours = false;
public: public:
GLVolumePtrs volumes; GLVolumePtrs volumes;
@ -608,6 +609,7 @@ public:
float get_slope_normal_z() const { return m_slope.normal_z; } float get_slope_normal_z() const { return m_slope.normal_z; }
void set_slope_normal_z(float normal_z) { m_slope.normal_z = normal_z; } void set_slope_normal_z(float normal_z) { m_slope.normal_z = normal_z; }
void set_default_slope_normal_z() { m_slope.normal_z = -::cos(Geometry::deg2rad(90.0f - 45.0f)); } void set_default_slope_normal_z() { m_slope.normal_z = -::cos(Geometry::deg2rad(90.0f - 45.0f)); }
void set_show_sinking_contours(bool show) { m_show_sinking_contours = show; }
// returns true if all the volumes are completely contained in the print volume // returns true if all the volumes are completely contained in the print volume
// returns the containment state in the given out_state, if non-null // returns the containment state in the given out_state, if non-null

View File

@ -5107,6 +5107,7 @@ void GLCanvas3D::_render_objects()
m_volumes.set_z_range(-FLT_MAX, FLT_MAX); m_volumes.set_z_range(-FLT_MAX, FLT_MAX);
m_volumes.set_clipping_plane(m_camera_clipping_plane.get_data()); m_volumes.set_clipping_plane(m_camera_clipping_plane.get_data());
m_volumes.set_show_sinking_contours(! m_gizmos.is_hiding_instances());
GLShaderProgram* shader = wxGetApp().get_shader("gouraud"); GLShaderProgram* shader = wxGetApp().get_shader("gouraud");
if (shader != nullptr) { if (shader != nullptr) {

View File

@ -1248,6 +1248,12 @@ bool GLGizmosManager::is_in_editing_mode(bool error_notification) const
} }
bool GLGizmosManager::is_hiding_instances() const
{
return (m_common_gizmos_data->instances_hider() && m_common_gizmos_data->instances_hider()->is_valid());
}
int GLGizmosManager::get_shortcut_key(GLGizmosManager::EType type) const int GLGizmosManager::get_shortcut_key(GLGizmosManager::EType type) const
{ {
return m_gizmos[type]->get_shortcut_key(); return m_gizmos[type]->get_shortcut_key();

View File

@ -122,7 +122,6 @@ private:
MouseCapture m_mouse_capture; MouseCapture m_mouse_capture;
std::string m_tooltip; std::string m_tooltip;
bool m_serializing; bool m_serializing;
//std::unique_ptr<CommonGizmosData> m_common_gizmos_data;
std::unique_ptr<CommonGizmosDataPool> m_common_gizmos_data; std::unique_ptr<CommonGizmosDataPool> m_common_gizmos_data;
public: public:
@ -218,6 +217,7 @@ public:
bool wants_reslice_supports_on_undo() const; bool wants_reslice_supports_on_undo() const;
bool is_in_editing_mode(bool error_notification = false) const; bool is_in_editing_mode(bool error_notification = false) const;
bool is_hiding_instances() const;
void render_current_gizmo() const; void render_current_gizmo() const;
void render_current_gizmo_for_picking_pass() const; void render_current_gizmo_for_picking_pass() const;