mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 04:31:15 -06:00 
			
		
		
		
	Descriptive textual feedback for cooling settings
This commit is contained in:
		
							parent
							
								
									f9b6caaecb
								
							
						
					
					
						commit
						deea02b444
					
				
					 3 changed files with 75 additions and 6 deletions
				
			
		|  | @ -698,7 +698,7 @@ END | ||||||
|         default => 100, |         default => 100, | ||||||
|     }, |     }, | ||||||
|     'bridge_fan_speed' => { |     'bridge_fan_speed' => { | ||||||
|         label   => 'Bridges', |         label   => 'Bridges fan speed', | ||||||
|         tooltip => 'This fan speed is enforced during all bridges.', |         tooltip => 'This fan speed is enforced during all bridges.', | ||||||
|         sidetext => '%', |         sidetext => '%', | ||||||
|         cli     => 'bridge-fan-speed=i', |         cli     => 'bridge-fan-speed=i', | ||||||
|  |  | ||||||
|  | @ -67,11 +67,19 @@ sub BUILD { | ||||||
|     $grid_sizer->SetFlexibleDirection(wxHORIZONTAL); |     $grid_sizer->SetFlexibleDirection(wxHORIZONTAL); | ||||||
|     $grid_sizer->AddGrowableCol($self->no_labels ? 0 : 1); |     $grid_sizer->AddGrowableCol($self->no_labels ? 0 : 1); | ||||||
|      |      | ||||||
|     $self->{sidetext_font} = Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); |  | ||||||
|     $self->_build_line($_, $grid_sizer) for @{$self->lines}; |  | ||||||
|      |  | ||||||
|     # TODO: border size may be related to wxWidgets 2.8.x vs. 2.9.x instead of wxMAC specific |     # TODO: border size may be related to wxWidgets 2.8.x vs. 2.9.x instead of wxMAC specific | ||||||
|     $self->sizer->Add($grid_sizer, 0, wxEXPAND | wxALL, &Wx::wxMAC ? 0 : 5); |     $self->sizer->Add($grid_sizer, 0, wxEXPAND | wxALL, &Wx::wxMAC ? 0 : 5); | ||||||
|  |      | ||||||
|  |     $self->{sidetext_font} = Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); | ||||||
|  |      | ||||||
|  |     foreach my $line (@{$self->lines}) { | ||||||
|  |         if ($line->{widget}) { | ||||||
|  |             my $window = $line->{widget}->GetWindow($self->parent); | ||||||
|  |             $self->sizer->Add($window, 0, wxEXPAND | wxALL, &Wx::wxMAC ? 0 : 15); | ||||||
|  |         } else { | ||||||
|  |             $self->_build_line($line, $grid_sizer); | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| # default behavior: one option per line | # default behavior: one option per line | ||||||
|  | @ -107,7 +115,7 @@ sub _build_line { | ||||||
|      |      | ||||||
|     my $label; |     my $label; | ||||||
|     if (!$self->no_labels) { |     if (!$self->no_labels) { | ||||||
|         $label = Wx::StaticText->new($self->parent, -1, "$line->{label}:", wxDefaultPosition, [$self->label_width, -1]); |         $label = Wx::StaticText->new($self->parent, -1, $line->{label} ? "$line->{label}:" : "", wxDefaultPosition, [$self->label_width, -1]); | ||||||
|         $label->Wrap($self->label_width) ;  # needed to avoid Linux/GTK bug |         $label->Wrap($self->label_width) ;  # needed to avoid Linux/GTK bug | ||||||
|         $grid_sizer->Add($label, 0, wxALIGN_CENTER_VERTICAL, 0); |         $grid_sizer->Add($label, 0, wxALIGN_CENTER_VERTICAL, 0); | ||||||
|         $label->SetToolTipString($line->{tooltip}) if $line->{tooltip}; |         $label->SetToolTipString($line->{tooltip}) if $line->{tooltip}; | ||||||
|  | @ -363,4 +371,27 @@ sub _config_methods { | ||||||
|         : qw(get 0); |         : qw(get 0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | package Slic3r::GUI::OptionsGroup::StaticTextLine; | ||||||
|  | use Moo; | ||||||
|  | use Wx qw(:misc :systemsettings); | ||||||
|  | 
 | ||||||
|  | sub GetWindow { | ||||||
|  |     my $self = shift; | ||||||
|  |     my ($parent) = @_; | ||||||
|  |      | ||||||
|  |     $self->{statictext} = Wx::StaticText->new($parent, -1, "foo", wxDefaultPosition, wxDefaultSize); | ||||||
|  |     my $font = Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); | ||||||
|  |     $self->{statictext}->SetFont($font); | ||||||
|  |     return $self->{statictext}; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | sub SetText { | ||||||
|  |     my $self = shift; | ||||||
|  |     my ($value) = @_; | ||||||
|  |      | ||||||
|  |     $self->{statictext}->SetLabel($value); | ||||||
|  |     $self->{statictext}->Wrap(400); | ||||||
|  |     $self->{statictext}->GetParent->Layout; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| 1; | 1; | ||||||
|  |  | ||||||
|  | @ -541,6 +541,13 @@ sub build { | ||||||
|         { |         { | ||||||
|             title => 'Enable', |             title => 'Enable', | ||||||
|             options => [qw(cooling)], |             options => [qw(cooling)], | ||||||
|  |             lines => [ | ||||||
|  |                 Slic3r::GUI::OptionsGroup->single_option_line('cooling'), | ||||||
|  |                 { | ||||||
|  |                     label => '', | ||||||
|  |                     widget => ($self->{description_line} = Slic3r::GUI::OptionsGroup::StaticTextLine->new), | ||||||
|  |                 }, | ||||||
|  |             ], | ||||||
|         }, |         }, | ||||||
|         { |         { | ||||||
|             title => 'Fan settings', |             title => 'Fan settings', | ||||||
|  | @ -548,8 +555,9 @@ sub build { | ||||||
|             lines => [ |             lines => [ | ||||||
|                 { |                 { | ||||||
|                     label   => 'Fan speed', |                     label   => 'Fan speed', | ||||||
|                     options => [qw(min_fan_speed max_fan_speed bridge_fan_speed)], |                     options => [qw(min_fan_speed max_fan_speed)], | ||||||
|                 }, |                 }, | ||||||
|  |                 Slic3r::GUI::OptionsGroup->single_option_line('bridge_fan_speed'), | ||||||
|                 Slic3r::GUI::OptionsGroup->single_option_line('disable_fan_first_layers'), |                 Slic3r::GUI::OptionsGroup->single_option_line('disable_fan_first_layers'), | ||||||
|                 Slic3r::GUI::OptionsGroup->single_option_line('fan_always_on'), |                 Slic3r::GUI::OptionsGroup->single_option_line('fan_always_on'), | ||||||
|             ], |             ], | ||||||
|  | @ -562,6 +570,36 @@ sub build { | ||||||
|     ]); |     ]); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | sub _update_description { | ||||||
|  |     my $self = shift; | ||||||
|  |      | ||||||
|  |     my $config = $self->config; | ||||||
|  |      | ||||||
|  |     my $msg = ""; | ||||||
|  |     if ($config->cooling) { | ||||||
|  |         $msg = sprintf "If estimated layer time is below ~%ds, fan will run at 100%% and print speed will be reduced so that no less than %ds are spent on that layer (however, speed will never be reduced below %dmm/s).", | ||||||
|  |             $config->slowdown_below_layer_time, $config->slowdown_below_layer_time, $config->min_print_speed; | ||||||
|  |         if ($config->fan_below_layer_time > $config->slowdown_below_layer_time) { | ||||||
|  |             $msg .= sprintf "\nIf estimated layer time is greater, but still below ~%ds, fan will run at a proportionally decreasing speed between %d%% and %d%%.", | ||||||
|  |                 $config->fan_below_layer_time, $config->max_fan_speed, $config->min_fan_speed; | ||||||
|  |         } | ||||||
|  |         if ($config->fan_always_on) { | ||||||
|  |             $msg .= sprintf "\nDuring the other layers, fan will always run at %d%%.", $config->min_fan_speed; | ||||||
|  |         } else { | ||||||
|  |             $msg .= "\nDuring the other layers, fan will be turned off." | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     $self->{description_line}->SetText($msg); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | sub on_value_change { | ||||||
|  |     my $self = shift; | ||||||
|  |     my ($opt_key) = @_; | ||||||
|  |     $self->SUPER::on_value_change(@_); | ||||||
|  |      | ||||||
|  |     $self->_update_description; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| package Slic3r::GUI::Tab::Printer; | package Slic3r::GUI::Tab::Printer; | ||||||
| use base 'Slic3r::GUI::Tab'; | use base 'Slic3r::GUI::Tab'; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Alessandro Ranellucci
						Alessandro Ranellucci