mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	Use perimeter extruder for brim. #618
This commit is contained in:
		
							parent
							
								
									e79aa2e81c
								
							
						
					
					
						commit
						c00061678b
					
				
					 8 changed files with 39 additions and 11 deletions
				
			
		|  | @ -351,11 +351,11 @@ The author of the Silk icon set is Mark James. | |||
|         --extruder-offset   Offset of each extruder, if firmware doesn't handle the displacement | ||||
|                             (can be specified multiple times, default: 0x0) | ||||
|         --perimeter-extruder | ||||
|                             Extruder to use for perimeters (1+, default: 1) | ||||
|                             Extruder to use for perimeters and brim (1+, default: 1) | ||||
|         --infill-extruder   Extruder to use for infill (1+, default: 1) | ||||
|         --solid-infill-extruder   Extruder to use for solid infill (1+, default: 1) | ||||
|         --support-material-extruder | ||||
|                             Extruder to use for support material (1+, default: 1) | ||||
|                             Extruder to use for support material, raft and skirt (1+, default: 1) | ||||
|         --support-material-interface-extruder | ||||
|                             Extruder to use for support material interface (1+, default: 1) | ||||
|                             --ooze-prevention   Drop temperature and park extruders outside a full skirt for automatic wiping | ||||
|  |  | |||
|  | @ -332,9 +332,9 @@ sub make_brim { | |||
|     } | ||||
|     $self->status_cb->(88, "Generating brim"); | ||||
|      | ||||
|     # brim is only printed on first layer and uses support material extruder | ||||
|     # brim is only printed on first layer and uses perimeter extruder | ||||
|     my $first_layer_height = $self->skirt_first_layer_height; | ||||
|     my $flow = $self->skirt_flow; | ||||
|     my $flow = $self->brim_flow; | ||||
|     my $mm3_per_mm = $flow->mm3_per_mm; | ||||
|      | ||||
|     my $grow_distance = $flow->scaled_width / 2; | ||||
|  |  | |||
|  | @ -348,7 +348,7 @@ sub process_layer { | |||
|      | ||||
|     # extrude brim | ||||
|     if (!$self->_brim_done) { | ||||
|         $gcode .= $self->_gcodegen->set_extruder($self->print->objects->[0]->config->support_material_extruder-1); | ||||
|         $gcode .= $self->_gcodegen->set_extruder($self->print->regions->[0]->config->perimeter_extruder-1); | ||||
|         $self->_gcodegen->set_origin(Slic3r::Pointf->new(0,0)); | ||||
|         $self->_gcodegen->avoid_crossing_perimeters->use_external_mp(1); | ||||
|         $gcode .= $self->_gcodegen->extrude_loop($_, 'brim', $object->config->support_material_speed) | ||||
|  |  | |||
|  | @ -503,11 +503,11 @@ $j | |||
|     --extruder-offset   Offset of each extruder, if firmware doesn't handle the displacement | ||||
|                         (can be specified multiple times, default: 0x0) | ||||
|     --perimeter-extruder | ||||
|                         Extruder to use for perimeters (1+, default: $config->{perimeter_extruder}) | ||||
|                         Extruder to use for perimeters and brim (1+, default: $config->{perimeter_extruder}) | ||||
|     --infill-extruder   Extruder to use for infill (1+, default: $config->{infill_extruder}) | ||||
|     --solid-infill-extruder   Extruder to use for solid infill (1+, default: $config->{solid_infill_extruder}) | ||||
|     --support-material-extruder | ||||
|                         Extruder to use for support material (1+, default: $config->{support_material_extruder}) | ||||
|                         Extruder to use for support material, raft and skirt (1+, default: $config->{support_material_extruder}) | ||||
|     --support-material-interface-extruder | ||||
|                         Extruder to use for support material interface (1+, default: $config->{support_material_interface_extruder}) | ||||
|     --ooze-prevention   Drop temperature and park extruders outside a full skirt for automatic wiping | ||||
|  |  | |||
|  | @ -669,11 +669,12 @@ Print::total_bounding_box() const | |||
|     } | ||||
|      | ||||
|     // consider brim and skirt
 | ||||
|     Flow skirt_flow = this->skirt_flow(); | ||||
|     if (this->config.brim_width.value > 0) { | ||||
|         extra = std::max(extra, this->config.brim_width.value + skirt_flow.width/2); | ||||
|         Flow brim_flow = this->brim_flow(); | ||||
|         extra = std::max(extra, this->config.brim_width.value + brim_flow.width/2); | ||||
|     } | ||||
|     if (this->config.skirts.value > 0) { | ||||
|         Flow skirt_flow = this->skirt_flow(); | ||||
|         extra = std::max( | ||||
|             extra, | ||||
|             this->config.brim_width.value | ||||
|  | @ -696,12 +697,37 @@ Print::skirt_first_layer_height() const | |||
|     return this->objects.front()->config.get_abs_value("first_layer_height"); | ||||
| } | ||||
| 
 | ||||
| Flow | ||||
| Print::brim_flow() const | ||||
| { | ||||
|     ConfigOptionFloatOrPercent width = this->config.first_layer_extrusion_width; | ||||
|     if (width.value == 0) width = this->regions.front()->config.perimeter_extrusion_width; | ||||
|      | ||||
|     /* We currently use a random region's perimeter extruder.
 | ||||
|        While this works for most cases, we should probably consider all of the perimeter | ||||
|        extruders and take the one with, say, the smallest index. | ||||
|        The same logic should be applied to the code that selects the extruder during G-code | ||||
|        generation as well. */ | ||||
|     return Flow::new_from_config_width( | ||||
|         frPerimeter, | ||||
|         width,  | ||||
|         this->config.nozzle_diameter.get_at(this->regions.front()->config.perimeter_extruder-1), | ||||
|         this->skirt_first_layer_height(), | ||||
|         0 | ||||
|     ); | ||||
| } | ||||
| 
 | ||||
| Flow | ||||
| Print::skirt_flow() const | ||||
| { | ||||
|     ConfigOptionFloatOrPercent width = this->config.first_layer_extrusion_width; | ||||
|     if (width.value == 0) width = this->regions.front()->config.perimeter_extrusion_width; | ||||
|      | ||||
|     /* We currently use a random object's support material extruder.
 | ||||
|        While this works for most cases, we should probably consider all of the support material | ||||
|        extruders and take the one with, say, the smallest index; | ||||
|        The same logic should be applied to the code that selects the extruder during G-code | ||||
|        generation as well. */ | ||||
|     return Flow::new_from_config_width( | ||||
|         frPerimeter, | ||||
|         width,  | ||||
|  |  | |||
|  | @ -188,6 +188,7 @@ class Print | |||
|     BoundingBox bounding_box() const; | ||||
|     BoundingBox total_bounding_box() const; | ||||
|     double skirt_first_layer_height() const; | ||||
|     Flow brim_flow() const; | ||||
|     Flow skirt_flow() const; | ||||
|      | ||||
|     std::set<size_t> extruders() const; | ||||
|  |  | |||
|  | @ -529,7 +529,7 @@ PrintConfigDef::build_def() { | |||
|     Options["perimeter_extruder"].type = coInt; | ||||
|     Options["perimeter_extruder"].label = "Perimeter extruder"; | ||||
|     Options["perimeter_extruder"].category = "Extruders"; | ||||
|     Options["perimeter_extruder"].tooltip = "The extruder to use when printing perimeters. First extruder is 1."; | ||||
|     Options["perimeter_extruder"].tooltip = "The extruder to use when printing perimeters and brim. First extruder is 1."; | ||||
|     Options["perimeter_extruder"].cli = "perimeter-extruder=i"; | ||||
|     Options["perimeter_extruder"].aliases.push_back("perimeters_extruder"); | ||||
|     Options["perimeter_extruder"].min = 1; | ||||
|  | @ -781,7 +781,7 @@ PrintConfigDef::build_def() { | |||
|     Options["support_material_extruder"].type = coInt; | ||||
|     Options["support_material_extruder"].label = "Support material extruder"; | ||||
|     Options["support_material_extruder"].category = "Extruders"; | ||||
|     Options["support_material_extruder"].tooltip = "The extruder to use when printing support material. This affects brim and raft too."; | ||||
|     Options["support_material_extruder"].tooltip = "The extruder to use when printing support material, raft and skirt."; | ||||
|     Options["support_material_extruder"].cli = "support-material-extruder=i"; | ||||
|     Options["support_material_extruder"].min = 1; | ||||
| 
 | ||||
|  |  | |||
|  | @ -190,6 +190,7 @@ _constant() | |||
|     Clone<BoundingBox> bounding_box(); | ||||
|     Clone<BoundingBox> total_bounding_box(); | ||||
|     double skirt_first_layer_height(); | ||||
|     Clone<Flow> brim_flow(); | ||||
|     Clone<Flow> skirt_flow(); | ||||
| %{ | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Alessandro Ranellucci
						Alessandro Ranellucci