mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	Implemented possibility to set a resin cost
This commit is contained in:
		
							parent
							
								
									6f8a9bc1ff
								
							
						
					
					
						commit
						82bc243281
					
				
					 8 changed files with 107 additions and 11 deletions
				
			
		|  | @ -90,7 +90,7 @@ struct stl_neighbors { | |||
| 
 | ||||
| struct stl_stats { | ||||
|     stl_stats() { memset(&header, 0, 81); } | ||||
|     char          header[81]                = ""; | ||||
|     char          header[81];//                = "";
 | ||||
|     stl_type      type                      = (stl_type)0; | ||||
|     uint32_t      number_of_facets          = 0; | ||||
|     stl_vertex    max                       = stl_vertex::Zero(); | ||||
|  |  | |||
|  | @ -2404,6 +2404,34 @@ void PrintConfigDef::init_sla_params() | |||
|     def->min = 0; | ||||
|     def->set_default_value(new ConfigOptionFloat(0.3)); | ||||
| 
 | ||||
|     def = this->add("bottle_volume", coFloat); | ||||
|     def->label = L("Bottle volume"); | ||||
|     def->tooltip = L("Bottle volume"); | ||||
|     def->sidetext = L("ml"); | ||||
|     def->min = 50; | ||||
|     def->set_default_value(new ConfigOptionFloat(960.0)); | ||||
| 
 | ||||
|     def = this->add("bottle_weight", coFloat); | ||||
|     def->label = L("Bottle weight"); | ||||
|     def->tooltip = L("Bottle weight"); | ||||
|     def->sidetext = L("kg"); | ||||
|     def->min = 0; | ||||
|     def->set_default_value(new ConfigOptionFloat(1.0)); | ||||
| 
 | ||||
|     def = this->add("material_density", coFloat); | ||||
|     def->label = L("Density"); | ||||
|     def->tooltip = L("Density"); | ||||
|     def->sidetext = L("g/ml"); | ||||
|     def->min = 0; | ||||
|     def->set_default_value(new ConfigOptionFloat(0.960)); | ||||
| 
 | ||||
|     def = this->add("bottle_cost", coFloat); | ||||
|     def->label = L("Cost"); | ||||
|     def->tooltip = L("Cost"); | ||||
|     def->sidetext = L("money/bottle"); | ||||
|     def->min = 0; | ||||
|     def->set_default_value(new ConfigOptionFloat(0.0)); | ||||
| 
 | ||||
|     def = this->add("faded_layers", coInt); | ||||
|     def->label = L("Faded layers"); | ||||
|     def->tooltip = L("Number of the layers needed for the exposure time fade from initial exposure time to the exposure time"); | ||||
|  |  | |||
|  | @ -1098,6 +1098,10 @@ class SLAMaterialConfig : public StaticPrintConfig | |||
|     STATIC_PRINT_CONFIG_CACHE(SLAMaterialConfig) | ||||
| public: | ||||
|     ConfigOptionFloat                       initial_layer_height; | ||||
|     ConfigOptionFloat                       bottle_cost; | ||||
|     ConfigOptionFloat                       bottle_volume; | ||||
|     ConfigOptionFloat                       bottle_weight; | ||||
|     ConfigOptionFloat                       material_density; | ||||
|     ConfigOptionFloat                       exposure_time; | ||||
|     ConfigOptionFloat                       initial_exposure_time; | ||||
|     ConfigOptionFloats                      material_correction; | ||||
|  | @ -1105,6 +1109,10 @@ protected: | |||
|     void initialize(StaticCacheBase &cache, const char *base_ptr) | ||||
|     { | ||||
|         OPT_PTR(initial_layer_height); | ||||
|         OPT_PTR(bottle_cost); | ||||
|         OPT_PTR(bottle_volume); | ||||
|         OPT_PTR(bottle_weight); | ||||
|         OPT_PTR(material_density); | ||||
|         OPT_PTR(exposure_time); | ||||
|         OPT_PTR(initial_exposure_time); | ||||
|         OPT_PTR(material_correction); | ||||
|  |  | |||
|  | @ -1620,7 +1620,11 @@ bool SLAPrint::invalidate_state_by_config_options(const std::vector<t_config_opt | |||
|         "output_filename_format", | ||||
|         "fast_tilt_time", | ||||
|         "slow_tilt_time", | ||||
|         "area_fill" | ||||
|         "area_fill", | ||||
|         "bottle_cost", | ||||
|         "bottle_volume", | ||||
|         "bottle_weight", | ||||
|         "material_density" | ||||
|     }; | ||||
| 
 | ||||
|     std::vector<SLAPrintStep> steps; | ||||
|  |  | |||
|  | @ -221,7 +221,7 @@ SlicedInfo::SlicedInfo(wxWindow *parent) : | |||
|     init_info_label(_(L("Used Filament (mm³)"))); | ||||
|     init_info_label(_(L("Used Filament (g)"))); | ||||
|     init_info_label(_(L("Used Material (unit)"))); | ||||
|     init_info_label(_(L("Cost"))); | ||||
|     init_info_label(_(L("Cost (money)"))); | ||||
|     init_info_label(_(L("Estimated printing time"))); | ||||
|     init_info_label(_(L("Number of tool changes"))); | ||||
| 
 | ||||
|  | @ -1117,12 +1117,10 @@ void Sidebar::show_info_sizer() | |||
|     } | ||||
| } | ||||
| 
 | ||||
| void Sidebar::show_sliced_info_sizer(const bool show) | ||||
| void Sidebar::update_sliced_info_sizer() | ||||
| { | ||||
|     wxWindowUpdateLocker freeze_guard(this); | ||||
| 
 | ||||
|     p->sliced_info->Show(show); | ||||
|     if (show) { | ||||
|     if (p->sliced_info->IsShown(size_t(0))) | ||||
|     { | ||||
|         if (p->plater->printer_technology() == ptSLA) | ||||
|         { | ||||
|             const SLAPrintStatistics& ps = p->plater->sla_print().print_statistics(); | ||||
|  | @ -1138,7 +1136,18 @@ void Sidebar::show_sliced_info_sizer(const bool show) | |||
|                 wxString::Format("%.2f", (ps.objects_used_material + ps.support_used_material) / 1000); | ||||
|             p->sliced_info->SetTextAndShow(siMateril_unit, info_text, new_label); | ||||
| 
 | ||||
|             p->sliced_info->SetTextAndShow(siCost, "N/A"/*wxString::Format("%.2f", ps.total_cost)*/); | ||||
|             wxString str_total_cost = "N/A"; | ||||
| 
 | ||||
|             DynamicPrintConfig* cfg = wxGetApp().get_tab(Preset::TYPE_SLA_MATERIAL)->get_config(); | ||||
|             if (cfg->option("bottle_cost")->getFloat() > 0.0 && | ||||
|                 cfg->option("bottle_volume")->getFloat() > 0.0) | ||||
|             { | ||||
|                 double material_cost = cfg->option("bottle_cost")->getFloat() /  | ||||
|                                        cfg->option("bottle_volume")->getFloat(); | ||||
|                 str_total_cost = wxString::Format("%.2f", material_cost*(ps.objects_used_material + ps.support_used_material) / 1000);                 | ||||
|             } | ||||
|             p->sliced_info->SetTextAndShow(siCost, str_total_cost); | ||||
| 
 | ||||
|             wxString t_est = std::isnan(ps.estimated_print_time) ? "N/A" : get_time_dhms(float(ps.estimated_print_time)); | ||||
|             p->sliced_info->SetTextAndShow(siEstimatedTime, t_est, _(L("Estimated printing time")) + " :"); | ||||
| 
 | ||||
|  | @ -1212,6 +1221,15 @@ void Sidebar::show_sliced_info_sizer(const bool show) | |||
|             p->sliced_info->SetTextAndShow(siMateril_unit, "N/A"); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void Sidebar::show_sliced_info_sizer(const bool show) | ||||
| { | ||||
|     wxWindowUpdateLocker freeze_guard(this); | ||||
| 
 | ||||
|     p->sliced_info->Show(show); | ||||
|     if (show) | ||||
|         update_sliced_info_sizer(); | ||||
| 
 | ||||
|     Layout(); | ||||
|     p->scrolled->Refresh(); | ||||
|  |  | |||
|  | @ -108,6 +108,7 @@ public: | |||
|     void                    update_objects_list_extruder_column(size_t extruders_count); | ||||
|     void                    show_info_sizer(); | ||||
|     void                    show_sliced_info_sizer(const bool show); | ||||
|     void                    update_sliced_info_sizer(); | ||||
|     void                    enable_buttons(bool enable); | ||||
|     void                    set_btn_label(const ActionButtonType btn_type, const wxString& label) const; | ||||
|     bool                    show_reslice(bool show) const; | ||||
|  |  | |||
|  | @ -500,6 +500,10 @@ const std::vector<std::string>& Preset::sla_material_options() | |||
|     if (s_opts.empty()) { | ||||
|         s_opts = { | ||||
|             "initial_layer_height", | ||||
|             "bottle_cost", | ||||
|             "bottle_volume", | ||||
|             "bottle_weight", | ||||
|             "material_density", | ||||
|             "exposure_time", | ||||
|             "initial_exposure_time", | ||||
|             "material_correction", | ||||
|  |  | |||
|  | @ -3398,8 +3398,41 @@ void TabSLAMaterial::build() | |||
| 
 | ||||
|     auto page = add_options_page(_(L("Material")), "resin"); | ||||
| 
 | ||||
|     auto optgroup = page->new_optgroup(_(L("Layers"))); | ||||
| //     optgroup->append_single_option_line("layer_height");
 | ||||
|     auto optgroup = page->new_optgroup(_(L("Material"))); | ||||
|     optgroup->append_single_option_line("bottle_cost"); | ||||
|     optgroup->append_single_option_line("bottle_volume"); | ||||
|     optgroup->append_single_option_line("bottle_weight"); | ||||
|     optgroup->append_single_option_line("material_density"); | ||||
| 
 | ||||
|     optgroup->m_on_change = [this, optgroup](t_config_option_key opt_key, boost::any value) | ||||
|     { | ||||
|         DynamicPrintConfig new_conf = *m_config; | ||||
| 
 | ||||
|         if (opt_key == "bottle_volume") { | ||||
|             double new_bottle_weight =  boost::any_cast<double>(value)/(new_conf.option("material_density")->getFloat() * 1000); | ||||
|             new_conf.set_key_value("bottle_weight", new ConfigOptionFloat(new_bottle_weight)); | ||||
|         } | ||||
|         if (opt_key == "bottle_weight") { | ||||
|             double new_bottle_volume =  boost::any_cast<double>(value)*(new_conf.option("material_density")->getFloat() * 1000); | ||||
|             new_conf.set_key_value("bottle_volume", new ConfigOptionFloat(new_bottle_volume)); | ||||
|         } | ||||
|         if (opt_key == "material_density") { | ||||
|             double new_bottle_weight = new_conf.option("bottle_volume")->getFloat() * boost::any_cast<double>(value) / 1000; | ||||
|             new_conf.set_key_value("bottle_weight", new ConfigOptionFloat(new_bottle_weight)); | ||||
|         } | ||||
| 
 | ||||
|         load_config(new_conf); | ||||
| 
 | ||||
|         update_dirty(); | ||||
|         on_value_change(opt_key, value); | ||||
| 
 | ||||
|         if (opt_key == "bottle_volume" || opt_key == "bottle_cost") { | ||||
|             wxGetApp().sidebar().update_sliced_info_sizer(); | ||||
|             wxGetApp().sidebar().Layout(); | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
|     optgroup = page->new_optgroup(_(L("Layers"))); | ||||
|     optgroup->append_single_option_line("initial_layer_height"); | ||||
| 
 | ||||
|     optgroup = page->new_optgroup(_(L("Exposure"))); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 YuSanka
						YuSanka