mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 04:31:15 -06:00 
			
		
		
		
	#5611 - Added option to show gcode line number on horizontal slider in preview
This commit is contained in:
		
							parent
							
								
									32db22b77c
								
							
						
					
					
						commit
						9afaebac75
					
				
					 12 changed files with 170 additions and 12 deletions
				
			
		|  | @ -646,8 +646,16 @@ wxString Control::get_label(int tick, LabelType label_type/* = ltHeightWithLayer | |||
|     if (value >= m_values.size()) | ||||
|         return "ErrVal"; | ||||
| 
 | ||||
| #if ENABLE_GCODE_LINES_ID_IN_H_SLIDER | ||||
|     if (m_draw_mode == dmSequentialGCodeView) { | ||||
|         return (Slic3r::GUI::get_app_config()->get("seq_top_gcode_indices") == "1") ? | ||||
|             wxString::Format("%lu", static_cast<unsigned long>(m_alternate_values[value])) : | ||||
|             wxString::Format("%lu", static_cast<unsigned long>(m_values[value])); | ||||
|     } | ||||
| #else | ||||
|     if (m_draw_mode == dmSequentialGCodeView) | ||||
|         return wxString::Format("%lu", static_cast<unsigned long>(m_values[value])); | ||||
| #endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER
 | ||||
|     else { | ||||
|         if (label_type == ltEstimatedTime) { | ||||
|             return (value < m_layers_times.size()) ? short_and_splitted_time(get_time_dhms(m_layers_times[value])) : ""; | ||||
|  |  | |||
|  | @ -215,6 +215,9 @@ public: | |||
|     void    SetKoefForLabels(const double koef)                { m_label_koef = koef; } | ||||
|     void    SetSliderValues(const std::vector<double>& values); | ||||
|     void    ChangeOneLayerLock(); | ||||
| #if ENABLE_GCODE_LINES_ID_IN_H_SLIDER | ||||
|     void    SetSliderAlternateValues(const std::vector<double>& values) { m_alternate_values = values; } | ||||
| #endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER
 | ||||
| 
 | ||||
|     Info    GetTicksValues() const; | ||||
|     void    SetTicksValues(const Info &custom_gcode_per_print_z); | ||||
|  | @ -383,14 +386,17 @@ private: | |||
|     int         m_cog_icon_dim; | ||||
|     long        m_style; | ||||
|     long        m_extra_style; | ||||
|     float       m_label_koef = 1.0; | ||||
|     float       m_label_koef{ 1.0 }; | ||||
| 
 | ||||
|     std::vector<double> m_values; | ||||
|     TickCodeInfo        m_ticks; | ||||
|     std::vector<double> m_layers_times; | ||||
| 
 | ||||
|     std::vector<std::string>    m_extruder_colors; | ||||
| 
 | ||||
| #if ENABLE_GCODE_LINES_ID_IN_H_SLIDER | ||||
|     std::vector<double> m_alternate_values; | ||||
| #endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER
 | ||||
| 
 | ||||
| // control's view variables
 | ||||
|     wxCoord SLIDER_MARGIN; // margin around slider
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -1516,6 +1516,13 @@ void GCodeViewer::load_toolpaths(const GCodeProcessor::Result& gcode_result) | |||
|     m_max_bounding_box = m_paths_bounding_box; | ||||
|     m_max_bounding_box.merge(m_paths_bounding_box.max + m_sequential_view.marker.get_bounding_box().size()[2] * Vec3d::UnitZ()); | ||||
| 
 | ||||
| #if ENABLE_GCODE_LINES_ID_IN_H_SLIDER | ||||
|     m_sequential_view.gcode_ids.clear(); | ||||
|     for (const GCodeProcessor::MoveVertex& move : gcode_result.moves) { | ||||
|         m_sequential_view.gcode_ids.push_back(move.gcode_id); | ||||
|     } | ||||
| #endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER
 | ||||
| 
 | ||||
|     std::vector<MultiVertexBuffer> vertices(m_buffers.size()); | ||||
|     std::vector<MultiIndexBuffer> indices(m_buffers.size()); | ||||
|     std::vector<float> options_zs; | ||||
|  |  | |||
|  | @ -599,6 +599,9 @@ public: | |||
|         Endpoints last_current; | ||||
|         Vec3f current_position{ Vec3f::Zero() }; | ||||
|         Marker marker; | ||||
| #if ENABLE_GCODE_LINES_ID_IN_H_SLIDER | ||||
|         std::vector<unsigned int> gcode_ids; | ||||
| #endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER
 | ||||
|     }; | ||||
| 
 | ||||
|     enum class EViewType : unsigned char | ||||
|  |  | |||
|  | @ -1716,7 +1716,11 @@ void GUI_App::add_config_menu(wxMenuBar *menu) | |||
|                 PreferencesDialog dlg(mainframe); | ||||
|                 dlg.ShowModal(); | ||||
|                 app_layout_changed = dlg.settings_layout_changed(); | ||||
| #if ENABLE_GCODE_LINES_ID_IN_H_SLIDER | ||||
|                 if (dlg.seq_top_layer_only_changed() || dlg.seq_seq_top_gcode_indices_changed()) | ||||
| #else | ||||
|                 if (dlg.seq_top_layer_only_changed()) | ||||
| #endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER
 | ||||
|                     this->plater_->refresh_print(); | ||||
| #if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN | ||||
| #ifdef _WIN32 | ||||
|  |  | |||
|  | @ -816,12 +816,25 @@ void Preview::update_moves_slider() | |||
|         return; | ||||
| 
 | ||||
|     std::vector<double> values(view.endpoints.last - view.endpoints.first + 1); | ||||
| #if ENABLE_GCODE_LINES_ID_IN_H_SLIDER | ||||
|     std::vector<double> alternate_values(view.endpoints.last - view.endpoints.first + 1); | ||||
| #endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER
 | ||||
|     unsigned int count = 0; | ||||
|     for (unsigned int i = view.endpoints.first; i <= view.endpoints.last; ++i) { | ||||
| #if ENABLE_GCODE_LINES_ID_IN_H_SLIDER | ||||
|         values[count] = static_cast<double>(i + 1); | ||||
|         if (view.gcode_ids[i] > 0) | ||||
|             alternate_values[count] = static_cast<double>(view.gcode_ids[i]); | ||||
|         ++count; | ||||
| #else | ||||
|         values[count++] = static_cast<double>(i + 1); | ||||
| #endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER
 | ||||
|     } | ||||
| 
 | ||||
|     m_moves_slider->SetSliderValues(values); | ||||
| #if ENABLE_GCODE_LINES_ID_IN_H_SLIDER | ||||
|     m_moves_slider->SetSliderAlternateValues(alternate_values); | ||||
| #endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER
 | ||||
|     m_moves_slider->SetMaxValue(view.endpoints.last - view.endpoints.first); | ||||
|     m_moves_slider->SetSelectionSpan(view.current.first - view.endpoints.first, view.current.last - view.endpoints.first); | ||||
| } | ||||
|  |  | |||
|  | @ -39,7 +39,7 @@ static void activate_options_tab(std::shared_ptr<ConfigOptionsGroup> optgroup) | |||
| 	optgroup->activate(); | ||||
| 	optgroup->update_visibility(comSimple); | ||||
| 	wxBoxSizer* sizer = static_cast<wxBoxSizer*>(static_cast<wxPanel*>(optgroup->parent())->GetSizer()); | ||||
| 	sizer->Add(optgroup->sizer, 0, wxEXPAND | wxALL, 20); | ||||
| 	sizer->Add(optgroup->sizer, 0, wxEXPAND | wxALL, 10); | ||||
| } | ||||
| 
 | ||||
| void PreferencesDialog::build() | ||||
|  | @ -275,12 +275,22 @@ void PreferencesDialog::build() | |||
| 
 | ||||
| 	def.label = L("Sequential slider applied only to top layer"); | ||||
| 	def.type = coBool; | ||||
| 	def.tooltip = L("If enabled, changes made using the sequential slider, in preview, apply only to gcode top layer. " | ||||
| 	def.tooltip = L("If enabled, changes made using the sequential slider, in preview, apply only to gcode top layer." | ||||
| 					"If disabled, changes made using the sequential slider, in preview, apply to the whole gcode."); | ||||
| 	def.set_default_value(new ConfigOptionBool{ app_config->get("seq_top_layer_only") == "1" }); | ||||
| 	option = Option(def, "seq_top_layer_only"); | ||||
| 	m_optgroup_gui->append_single_option_line(option); | ||||
| 
 | ||||
| #if ENABLE_GCODE_LINES_ID_IN_H_SLIDER | ||||
| 	def.label = L("Sequential slider shows gcode line numbers"); | ||||
| 	def.type = coBool; | ||||
| 	def.tooltip = L("If enabled, the sequential slider, in preview, shows the gcode lines numbers." | ||||
| 		"If disabled, the sequential slider, in preview, shows the move index."); | ||||
| 	def.set_default_value(new ConfigOptionBool{ app_config->get("seq_top_gcode_indices") == "1" }); | ||||
| 	option = Option(def, "seq_top_gcode_indices"); | ||||
| 	m_optgroup_gui->append_single_option_line(option); | ||||
| #endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER
 | ||||
| 
 | ||||
| 	if (is_editor) { | ||||
| 		def.label = L("Show sidebar collapse/expand button"); | ||||
| 		def.type = coBool; | ||||
|  | @ -366,6 +376,12 @@ void PreferencesDialog::accept() | |||
| 	if (auto it = m_values.find("seq_top_layer_only"); it != m_values.end()) | ||||
| 		m_seq_top_layer_only_changed = app_config->get("seq_top_layer_only") != it->second; | ||||
| 
 | ||||
| #if ENABLE_GCODE_LINES_ID_IN_H_SLIDER | ||||
| 	m_seq_top_gcode_indices_changed = false; | ||||
| 	if (auto it = m_values.find("seq_top_gcode_indices"); it != m_values.end()) | ||||
| 		m_seq_top_gcode_indices_changed = app_config->get("seq_top_gcode_indices") != it->second; | ||||
| #endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER
 | ||||
| 
 | ||||
| 	m_settings_layout_changed = false; | ||||
| 	for (const std::string& key : { "old_settings_layout_mode", | ||||
| 								    "new_settings_layout_mode", | ||||
|  | @ -509,7 +525,7 @@ void PreferencesDialog::create_settings_mode_widget() | |||
| 
 | ||||
| 	auto sizer = new wxBoxSizer(wxHORIZONTAL); | ||||
| 	sizer->Add(m_layout_mode_box, 1, wxALIGN_CENTER_VERTICAL); | ||||
| 	m_optgroup_gui->sizer->Add(sizer, 0, wxEXPAND); | ||||
| 	m_optgroup_gui->sizer->Add(sizer, 0, wxEXPAND | wxTOP, em_unit()); | ||||
| } | ||||
| 
 | ||||
| void PreferencesDialog::create_settings_text_color_widget() | ||||
|  | @ -520,7 +536,7 @@ void PreferencesDialog::create_settings_text_color_widget() | |||
| 	if (!wxOSX) stb->SetBackgroundStyle(wxBG_STYLE_PAINT); | ||||
| 
 | ||||
| 	wxSizer* sizer = new wxStaticBoxSizer(stb, wxVERTICAL); | ||||
| 	wxFlexGridSizer* grid_sizer = new wxFlexGridSizer(2, 10, 20); | ||||
| 	wxFlexGridSizer* grid_sizer = new wxFlexGridSizer(2, 5, 5); | ||||
| 	sizer->Add(grid_sizer, 0, wxEXPAND); | ||||
| 
 | ||||
| 	auto sys_label = new wxStaticText(parent, wxID_ANY, _L("Value is the same as the system value")); | ||||
|  | @ -531,8 +547,8 @@ void PreferencesDialog::create_settings_text_color_widget() | |||
| 		sys_label->Refresh(); | ||||
| 	}); | ||||
| 	 | ||||
| 	grid_sizer->Add(m_sys_colour, -1, wxALIGN_CENTRE_VERTICAL); | ||||
| 	grid_sizer->Add(sys_label, -1, wxALIGN_CENTRE_VERTICAL | wxEXPAND); | ||||
| 	grid_sizer->Add(m_sys_colour, 0, wxALIGN_CENTRE_VERTICAL); | ||||
| 	grid_sizer->Add(sys_label, 0, wxALIGN_CENTRE_VERTICAL | wxEXPAND); | ||||
| 
 | ||||
| 	auto mod_label = new wxStaticText(parent, wxID_ANY, _L("Value was changed and is not equal to the system value or the last saved preset")); | ||||
| 	mod_label->SetForegroundColour(wxGetApp().get_label_clr_modified()); | ||||
|  | @ -542,8 +558,8 @@ void PreferencesDialog::create_settings_text_color_widget() | |||
| 		mod_label->Refresh(); | ||||
| 	}); | ||||
| 
 | ||||
| 	grid_sizer->Add(m_mod_colour, -1, wxALIGN_CENTRE_VERTICAL); | ||||
| 	grid_sizer->Add(mod_label, -1, wxALIGN_CENTRE_VERTICAL | wxEXPAND); | ||||
| 	grid_sizer->Add(m_mod_colour, 0, wxALIGN_CENTRE_VERTICAL); | ||||
| 	grid_sizer->Add(mod_label, 0, wxALIGN_CENTRE_VERTICAL | wxEXPAND); | ||||
| 
 | ||||
| 	m_optgroup_gui->sizer->Add(sizer, 0, wxEXPAND | wxTOP, em_unit()); | ||||
| } | ||||
|  |  | |||
|  | @ -31,12 +31,19 @@ class PreferencesDialog : public DPIDialog | |||
|     bool                                isOSX {false}; | ||||
| 	bool								m_settings_layout_changed {false}; | ||||
| 	bool								m_seq_top_layer_only_changed{ false }; | ||||
| #if ENABLE_GCODE_LINES_ID_IN_H_SLIDER | ||||
| 	bool								m_seq_top_gcode_indices_changed{ false }; | ||||
| #endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER
 | ||||
| 
 | ||||
| public: | ||||
| 	PreferencesDialog(wxWindow* parent); | ||||
| 	~PreferencesDialog() {} | ||||
| 	explicit PreferencesDialog(wxWindow* parent); | ||||
| 	~PreferencesDialog() = default; | ||||
| 
 | ||||
| 	bool settings_layout_changed() const { return m_settings_layout_changed; } | ||||
| 	bool seq_top_layer_only_changed() const { return m_seq_top_layer_only_changed; } | ||||
| #if ENABLE_GCODE_LINES_ID_IN_H_SLIDER | ||||
| 	bool seq_seq_top_gcode_indices_changed() const { return m_seq_top_gcode_indices_changed; } | ||||
| #endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER
 | ||||
| 
 | ||||
| 	void	build(); | ||||
| 	void	accept(); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 enricoturri1966
						enricoturri1966