mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	Finished porting PlaceholderParser to XS
This commit is contained in:
		
							parent
							
								
									249088b4f8
								
							
						
					
					
						commit
						580d28d071
					
				
					 10 changed files with 87 additions and 98 deletions
				
			
		|  | @ -482,10 +482,10 @@ sub set_extruder { | |||
|      | ||||
|     # append custom toolchange G-code | ||||
|     if (defined $self->writer->extruder && $self->config->toolchange_gcode) { | ||||
|         $gcode .= sprintf "%s\n", $self->placeholder_parser->process($self->config->toolchange_gcode, { | ||||
|             previous_extruder   => $self->writer->extruder->id, | ||||
|             next_extruder       => $extruder_id, | ||||
|         }); | ||||
|         my $pp = $self->placeholder_parser->clone; | ||||
|         $pp->set('previous_extruder' => $self->writer->extruder->id); | ||||
|         $pp->set('next_extruder'     => $extruder_id); | ||||
|         $gcode .= sprintf "%s\n", $pp->process($self->config->toolchange_gcode); | ||||
|     } | ||||
|      | ||||
|     # if ooze prevention is enabled, park current extruder in the nearest | ||||
|  |  | |||
|  | @ -1,28 +0,0 @@ | |||
| package Slic3r::GCode::PlaceholderParser; | ||||
| use strict; | ||||
| use warnings; | ||||
| 
 | ||||
| sub process { | ||||
|     my ($self, $string, $extra) = @_; | ||||
|      | ||||
|     # extra variables have priority over the stored ones | ||||
|     if ($extra) { | ||||
|         my $regex = join '|', keys %$extra; | ||||
|         $string =~ s/\[($regex)\]/$extra->{$1}/eg; | ||||
|     } | ||||
|     { | ||||
|         my $regex = join '|', @{$self->_single_keys}; | ||||
|         $string =~ s/\[($regex)\]/$self->_single_get("$1")/eg; | ||||
|     } | ||||
|     { | ||||
|         my $regex = join '|', @{$self->_multiple_keys}; | ||||
|         $string =~ s/\[($regex)\]/$self->_multiple_get("$1")/egx; | ||||
|          | ||||
|         # unhandled indices are populated using the first value | ||||
|         $string =~ s/\[($regex)_\d+\]/$self->_multiple_get("$1")/egx; | ||||
|     } | ||||
|      | ||||
|     return $string; | ||||
| } | ||||
| 
 | ||||
| 1; | ||||
|  | @ -14,16 +14,6 @@ use Slic3r::Print::State ':steps'; | |||
| 
 | ||||
| our $status_cb; | ||||
| 
 | ||||
| sub new { | ||||
|     # TODO: port PlaceholderParser methods to C++, then its own constructor | ||||
|     # can call them and no need for this new() method at all | ||||
|     my ($class) = @_; | ||||
|     my $self = $class->_new; | ||||
|     $self->placeholder_parser->apply_env_variables; | ||||
|     $self->placeholder_parser->update_timestamp; | ||||
|     return $self; | ||||
| } | ||||
| 
 | ||||
| sub set_status_cb { | ||||
|     my ($class, $cb) = @_; | ||||
|     $status_cb = $cb; | ||||
|  |  | |||
|  | @ -378,15 +378,19 @@ sub process_layer { | |||
|     } | ||||
|      | ||||
|     # set new layer - this will change Z and force a retraction if retract_layer_change is enabled | ||||
|     $gcode .= $self->_gcodegen->placeholder_parser->process($self->print->config->before_layer_gcode, { | ||||
|         layer_num => $self->_gcodegen->layer_index + 1, | ||||
|         layer_z   => $layer->print_z, | ||||
|     }) . "\n" if $self->print->config->before_layer_gcode; | ||||
|     if ($self->print->config->before_layer_gcode) { | ||||
|         my $pp = $self->_gcodegen->placeholder_parser->clone; | ||||
|         $pp->set('layer_num' => $self->_gcodegen->layer_index + 1); | ||||
|         $pp->set('layer_z'   => $layer->print_z); | ||||
|         $gcode .= $pp->process($self->print->config->before_layer_gcode) . "\n"; | ||||
|     } | ||||
|     $gcode .= $self->_gcodegen->change_layer($layer);  # this will increase $self->_gcodegen->layer_index | ||||
|     $gcode .= $self->_gcodegen->placeholder_parser->process($self->print->config->layer_gcode, { | ||||
|         layer_num => $self->_gcodegen->layer_index, | ||||
|         layer_z   => $layer->print_z, | ||||
|     }) . "\n" if $self->print->config->layer_gcode; | ||||
|     if ($self->print->config->layer_gcode) { | ||||
|         my $pp = $self->_gcodegen->placeholder_parser->clone; | ||||
|         $pp->set('layer_num' => $self->_gcodegen->layer_index); | ||||
|         $pp->set('layer_z'   => $layer->print_z); | ||||
|         $gcode .= $pp->process($self->print->config->layer_gcode) . "\n"; | ||||
|     } | ||||
|      | ||||
|     # extrude skirt along raft layers and normal object layers | ||||
|     # (not along interlaced support material layers) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Alessandro Ranellucci
						Alessandro Ranellucci