mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 12:11:15 -06:00 
			
		
		
		
	NEW: add overhang highlight area
overhang rgb=(200,0,0),remove supportType,do not save para after overhang operation preview Change-Id: I947bbd9db264f00f0609b3f02140060f9a2621fb (cherry picked from commit 796c4460fe998da206f9ca77973a20796fa1d3ca)
This commit is contained in:
		
							parent
							
								
									35d6b072d3
								
							
						
					
					
						commit
						507a8a6d36
					
				
					 9 changed files with 84 additions and 20 deletions
				
			
		|  | @ -1236,8 +1236,17 @@ GLVolumeWithIdAndZList volumes_to_render(const GLVolumePtrs& volumes, GLVolumeCo | |||
|     return list; | ||||
| } | ||||
| 
 | ||||
| int GLVolumeCollection::get_selection_support_threshold_angle(bool &enable_support) const | ||||
| { | ||||
|     const DynamicPrintConfig& glb_cfg        = GUI::wxGetApp().preset_bundle->prints.get_edited_preset().config; | ||||
|     enable_support =  glb_cfg.opt_bool("enable_support"); | ||||
|     int support_threshold_angle =  glb_cfg.opt_int("support_threshold_angle"); | ||||
|     return  support_threshold_angle ; | ||||
| } | ||||
| 
 | ||||
| //BBS: add outline drawing logic
 | ||||
| void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disable_cullface, const Transform3d& view_matrix, std::function<bool(const GLVolume&)> filter_func, bool with_outline) const | ||||
| void GLVolumeCollection::render( | ||||
|     GLVolumeCollection::ERenderType type, bool disable_cullface, const Transform3d &view_matrix, std::function<bool(const GLVolume &)> filter_func, bool with_outline) const | ||||
| { | ||||
|     GLVolumeWithIdAndZList to_render = volumes_to_render(volumes, type, view_matrix, filter_func); | ||||
|     if (to_render.empty()) | ||||
|  | @ -1305,10 +1314,16 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab | |||
|             //use -1 ad a invalid type
 | ||||
|             shader->set_uniform("print_volume.type", -1); | ||||
|         } | ||||
|          | ||||
|         bool  enable_support; | ||||
|         int   support_threshold_angle = get_selection_support_threshold_angle(enable_support); | ||||
|      | ||||
|         float normal_z  = -::cos(Geometry::deg2rad((float) support_threshold_angle)); | ||||
|    | ||||
|         shader->set_uniform("volume_world_matrix", volume.first->world_matrix()); | ||||
|         shader->set_uniform("slope.actived", m_slope.active && !volume.first->is_modifier && !volume.first->is_wipe_tower); | ||||
|         shader->set_uniform("slope.actived", enable_support && m_slope.isGlobalActive && !volume.first->is_modifier && !volume.first->is_wipe_tower); | ||||
|         shader->set_uniform("slope.volume_world_normal_matrix", static_cast<Matrix3f>(volume.first->world_matrix().matrix().block(0, 0, 3, 3).inverse().transpose().cast<float>())); | ||||
|         shader->set_uniform("slope.normal_z", m_slope.normal_z); | ||||
|         shader->set_uniform("slope.normal_z", normal_z); | ||||
| 
 | ||||
| #if ENABLE_ENVIRONMENT_MAP | ||||
|         unsigned int environment_texture_id = GUI::wxGetApp().plater()->get_environment_texture_id(); | ||||
|  |  | |||
|  | @ -604,7 +604,8 @@ private: | |||
|     struct Slope | ||||
|     { | ||||
|         // toggle for slope rendering
 | ||||
|         bool active{ false }; | ||||
|         bool active{ false };//local active
 | ||||
|         bool isGlobalActive{false}; | ||||
|         float normal_z; | ||||
|     }; | ||||
| 
 | ||||
|  | @ -656,9 +657,14 @@ public: | |||
|     GLVolume* new_toolpath_volume(const std::array<float, 4>& rgba, size_t reserve_vbo_floats = 0); | ||||
|     GLVolume* new_nontoolpath_volume(const std::array<float, 4>& rgba, size_t reserve_vbo_floats = 0); | ||||
| 
 | ||||
|     int get_selection_support_threshold_angle(bool&) const; | ||||
|     // Render the volumes by OpenGL.
 | ||||
|     //BBS: add outline drawing logic
 | ||||
|     void render(ERenderType type, bool disable_cullface, const Transform3d& view_matrix, std::function<bool(const GLVolume&)> filter_func = std::function<bool(const GLVolume&)>(), bool with_outline = true) const; | ||||
|     void render(ERenderType                           type, | ||||
|                 bool                                  disable_cullface, | ||||
|                 const Transform3d &                   view_matrix, | ||||
|                 std::function<bool(const GLVolume &)> filter_func  = std::function<bool(const GLVolume &)>(), | ||||
|                 bool with_outline = true) const; | ||||
| 
 | ||||
|     // Finalize the initialization of the geometry & indices,
 | ||||
|     // upload the geometry and indices to OpenGL VBO objects
 | ||||
|  | @ -678,8 +684,10 @@ public: | |||
|     void set_z_range(float min_z, float max_z) { m_z_range[0] = min_z; m_z_range[1] = max_z; } | ||||
|     void set_clipping_plane(const double* coeffs) { m_clipping_plane[0] = coeffs[0]; m_clipping_plane[1] = coeffs[1]; m_clipping_plane[2] = coeffs[2]; m_clipping_plane[3] = coeffs[3]; } | ||||
| 
 | ||||
|     bool is_slope_GlobalActive() const { return m_slope.isGlobalActive; } | ||||
|     bool is_slope_active() const { return m_slope.active; } | ||||
|     void set_slope_active(bool active) { m_slope.active = active; } | ||||
|     void set_slope_GlobalActive(bool active) { m_slope.isGlobalActive = active; } | ||||
| 
 | ||||
|     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; } | ||||
|  |  | |||
|  | @ -412,6 +412,7 @@ class GLCanvas3D | |||
|         void render(const std::vector<const ModelInstance*>& sorted_instances) const; | ||||
|     }; | ||||
| 
 | ||||
|    | ||||
|     class Tooltip | ||||
|     { | ||||
|         std::string m_text; | ||||
|  | @ -439,6 +440,8 @@ class GLCanvas3D | |||
|         bool is_enabled() const { return m_enabled; } | ||||
|         void use(bool use) { m_volumes.set_slope_active(m_enabled ? use : false); } | ||||
|         bool is_used() const { return m_volumes.is_slope_active(); } | ||||
|         void globalUse(bool use) { m_volumes.set_slope_GlobalActive(m_enabled ? use : false); } | ||||
|         bool is_GlobalUsed() const { return m_volumes.is_slope_GlobalActive(); } | ||||
|         void set_normal_angle(float angle_in_deg) const { | ||||
|             m_volumes.set_slope_normal_z(-::cos(Geometry::deg2rad(90.0f - angle_in_deg))); | ||||
|         } | ||||
|  | @ -591,6 +594,7 @@ private: | |||
|     Labels m_labels; | ||||
|     Tooltip m_tooltip; | ||||
|     bool m_tooltip_enabled{ true }; | ||||
| 
 | ||||
|     Slope m_slope; | ||||
| 
 | ||||
|     OrientSettings m_orient_settings_fff, m_orient_settings_sla; | ||||
|  | @ -994,6 +998,9 @@ public: | |||
|     bool are_labels_shown() const { return m_labels.is_shown(); } | ||||
|     void show_labels(bool show) { m_labels.show(show); } | ||||
| 
 | ||||
|     bool is_overhang_shown() const { return m_slope.is_GlobalUsed(); } | ||||
|     void show_overhang(bool show) { m_slope.globalUse(show); } | ||||
|      | ||||
|     bool is_using_slope() const { return m_slope.is_used(); } | ||||
|     void use_slope(bool use) { m_slope.use(use); } | ||||
|     void set_slope_normal_angle(float angle_in_deg) { m_slope.set_normal_angle(angle_in_deg); } | ||||
|  |  | |||
|  | @ -2383,6 +2383,12 @@ void MainFrame::init_menubar_as_editor() | |||
|             [this](wxCommandEvent&) { m_plater->show_view3D_labels(!m_plater->are_view3D_labels_shown()); m_plater->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); }, this, | ||||
|             [this]() { return m_plater->is_view3D_shown(); }, [this]() { return m_plater->are_view3D_labels_shown(); }, this); | ||||
| 
 | ||||
|         append_menu_check_item(viewMenu, wxID_ANY, _L("Show &Overhang"), _L("Show object overhang highlight in 3D scene"), | ||||
|             [this](wxCommandEvent &) { | ||||
|                 m_plater->show_view3D_overhang(!m_plater->is_view3D_overhang_shown()); | ||||
|                 m_plater->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); | ||||
|             }, | ||||
|             this, [this]() { return m_plater->is_view3D_shown(); }, [this]() { return m_plater->is_view3D_overhang_shown(); }, this); | ||||
|         /*viewMenu->AppendSeparator();
 | ||||
|         append_menu_check_item(viewMenu, wxID_ANY, _L("Show &Wireframe") + "\tCtrl+Shift+Enter", _L("Show wireframes in 3D scene"), | ||||
|             [this](wxCommandEvent&) { m_plater->toggle_show_wireframe(); m_plater->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); }, this, | ||||
|  |  | |||
|  | @ -1877,6 +1877,12 @@ struct Plater::priv | |||
|     bool are_view3D_labels_shown() const { return (current_panel == view3D) && view3D->get_canvas3d()->are_labels_shown(); } | ||||
|     void show_view3D_labels(bool show) { if (current_panel == view3D) view3D->get_canvas3d()->show_labels(show); } | ||||
| 
 | ||||
|     bool is_view3D_overhang_shown() const { return (current_panel == view3D) && view3D->get_canvas3d()->is_overhang_shown(); } | ||||
|     void show_view3D_overhang(bool show) | ||||
|     { | ||||
|         if (current_panel == view3D) view3D->get_canvas3d()->show_overhang(show); | ||||
|     } | ||||
| 
 | ||||
|     bool is_sidebar_collapsed() const   { return sidebar->is_collapsed(); } | ||||
|     void collapse_sidebar(bool collapse); | ||||
| 
 | ||||
|  | @ -8884,6 +8890,9 @@ bool Plater::is_view3D_shown() const { return p->is_view3D_shown(); } | |||
| bool Plater::are_view3D_labels_shown() const { return p->are_view3D_labels_shown(); } | ||||
| void Plater::show_view3D_labels(bool show) { p->show_view3D_labels(show); } | ||||
| 
 | ||||
| bool Plater::is_view3D_overhang_shown() const { return p->is_view3D_overhang_shown(); } | ||||
| void Plater::show_view3D_overhang(bool show)  {  p->show_view3D_overhang(show); } | ||||
| 
 | ||||
| bool Plater::is_sidebar_collapsed() const { return p->is_sidebar_collapsed(); } | ||||
| void Plater::collapse_sidebar(bool show) { p->collapse_sidebar(show); } | ||||
| 
 | ||||
|  |  | |||
|  | @ -275,6 +275,9 @@ public: | |||
|     bool are_view3D_labels_shown() const; | ||||
|     void show_view3D_labels(bool show); | ||||
| 
 | ||||
|     bool is_view3D_overhang_shown() const; | ||||
|     void show_view3D_overhang(bool show); | ||||
|      | ||||
|     bool is_sidebar_collapsed() const; | ||||
|     void collapse_sidebar(bool show); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 zhou.xu
						zhou.xu