mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 04:31:15 -06:00 
			
		
		
		
	Do not show sinking contours when a gizmo hides some objects
This commit is contained in:
		
							parent
							
								
									83ab034f9a
								
							
						
					
					
						commit
						b14faf627b
					
				
					 5 changed files with 28 additions and 17 deletions
				
			
		|  | @ -843,12 +843,13 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab | |||
|         volume.first->set_render_color(); | ||||
| 
 | ||||
|         // render sinking contours of non-hovered volumes
 | ||||
|         if (volume.first->is_sinking() && !volume.first->is_below_printbed() && | ||||
|             volume.first->hover == GLVolume::HS_None && !volume.first->force_sinking_contours) { | ||||
|             shader->stop_using(); | ||||
|             volume.first->render_sinking_contours(); | ||||
|             shader->start_using(); | ||||
|         } | ||||
|         if (m_show_sinking_contours) | ||||
|             if (volume.first->is_sinking() && !volume.first->is_below_printbed() && | ||||
|                 volume.first->hover == GLVolume::HS_None && !volume.first->force_sinking_contours) { | ||||
|                 shader->stop_using(); | ||||
|                 volume.first->render_sinking_contours(); | ||||
|                 shader->start_using(); | ||||
|             } | ||||
| 
 | ||||
|         glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); | ||||
|         glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); | ||||
|  | @ -887,17 +888,18 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab | |||
|         glsafe(::glDisableClientState(GL_NORMAL_ARRAY)); | ||||
|     } | ||||
| 
 | ||||
|     for (GLVolumeWithIdAndZ& volume : to_render) { | ||||
|         // render sinking contours of hovered/displaced volumes
 | ||||
|         if (volume.first->is_sinking() && !volume.first->is_below_printbed() && | ||||
|             (volume.first->hover != GLVolume::HS_None || volume.first->force_sinking_contours)) { | ||||
|             shader->stop_using(); | ||||
|             glsafe(::glDepthFunc(GL_ALWAYS)); | ||||
|             volume.first->render_sinking_contours(); | ||||
|             glsafe(::glDepthFunc(GL_LESS)); | ||||
|             shader->start_using(); | ||||
|     if (m_show_sinking_contours) | ||||
|         for (GLVolumeWithIdAndZ& volume : to_render) { | ||||
|             // render sinking contours of hovered/displaced volumes
 | ||||
|             if (volume.first->is_sinking() && !volume.first->is_below_printbed() && | ||||
|                 (volume.first->hover != GLVolume::HS_None || volume.first->force_sinking_contours)) { | ||||
|                 shader->stop_using(); | ||||
|                 glsafe(::glDepthFunc(GL_ALWAYS)); | ||||
|                 volume.first->render_sinking_contours(); | ||||
|                 glsafe(::glDepthFunc(GL_LESS)); | ||||
|                 shader->start_using(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| #else | ||||
|     glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); | ||||
|     glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); | ||||
|  |  | |||
|  | @ -539,6 +539,7 @@ private: | |||
|     }; | ||||
| 
 | ||||
|     Slope m_slope; | ||||
|     bool m_show_sinking_contours = false; | ||||
| 
 | ||||
| public: | ||||
|     GLVolumePtrs volumes; | ||||
|  | @ -608,6 +609,7 @@ public: | |||
|     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_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 the containment state in the given out_state, if non-null
 | ||||
|  |  | |||
|  | @ -5107,6 +5107,7 @@ void GLCanvas3D::_render_objects() | |||
|         m_volumes.set_z_range(-FLT_MAX, FLT_MAX); | ||||
| 
 | ||||
|     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"); | ||||
|     if (shader != nullptr) { | ||||
|  |  | |||
|  | @ -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 | ||||
| { | ||||
|     return m_gizmos[type]->get_shortcut_key(); | ||||
|  |  | |||
|  | @ -122,7 +122,6 @@ private: | |||
|     MouseCapture m_mouse_capture; | ||||
|     std::string m_tooltip; | ||||
|     bool m_serializing; | ||||
|     //std::unique_ptr<CommonGizmosData> m_common_gizmos_data;
 | ||||
|     std::unique_ptr<CommonGizmosDataPool> m_common_gizmos_data; | ||||
| 
 | ||||
| public: | ||||
|  | @ -218,6 +217,7 @@ public: | |||
|     bool wants_reslice_supports_on_undo() 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_for_picking_pass() const; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Lukas Matena
						Lukas Matena