mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 12:11:15 -06:00 
			
		
		
		
	Bugfix: infill was clipped badly. Includes regression test. #1245
This commit is contained in:
		
							parent
							
								
									5fa49aad02
								
							
						
					
					
						commit
						a8981b8b35
					
				
					 4 changed files with 35 additions and 7 deletions
				
			
		|  | @ -106,6 +106,7 @@ sub add_model { | |||
|     $model->split_meshes if $Slic3r::Config->avoid_crossing_perimeters && !$Slic3r::Config->complete_objects; | ||||
|      | ||||
|     foreach my $object (@{ $model->objects }) { | ||||
|         # we align object to origin before applying transformations | ||||
|         my @align = $object->align_to_origin; | ||||
|          | ||||
|         # extract meshes by material | ||||
|  | @ -135,8 +136,11 @@ sub add_model { | |||
|             $mesh->scale(1 / &Slic3r::SCALING_FACTOR); | ||||
|         } | ||||
|          | ||||
|         # calculate transformed size | ||||
|         my $size = [ Slic3r::Geometry::size_3D([ map @{$_->used_vertices}, grep $_, @meshes ]) ]; | ||||
|         # we also align object after transformations so that we only work with positive coordinates | ||||
|         # and the assumption that bounding_box === size works | ||||
|         my $bb = Slic3r::Geometry::BoundingBox->new_from_points_3D([ map @{$_->used_vertices}, grep $_, @meshes ]); | ||||
|         my @align2 = map -$bb->extents->[$_][MIN], (X,Y,Z); | ||||
|         $_->move(@align2) for grep $_, @meshes; | ||||
|          | ||||
|         # initialize print object | ||||
|         push @{$self->objects}, Slic3r::Print::Object->new( | ||||
|  | @ -144,10 +148,10 @@ sub add_model { | |||
|             meshes      => [ @meshes ], | ||||
|             copies      => [ | ||||
|                 $object->instances | ||||
|                     ? (map [ scale($_->offset->[X] - $align[X]), scale($_->offset->[Y] - $align[Y]) ], @{$object->instances}) | ||||
|                     ? (map [ scale($_->offset->[X] - $align[X]) - $align2[X], scale($_->offset->[Y] - $align[Y]) - $align2[Y] ], @{$object->instances}) | ||||
|                     : [0,0], | ||||
|             ], | ||||
|             size        => $size, | ||||
|             size        => $bb->size,  # transformed size | ||||
|             input_file  => $object->input_file, | ||||
|             layer_height_ranges => $object->layer_height_ranges, | ||||
|         ); | ||||
|  |  | |||
|  | @ -16,7 +16,7 @@ my %cuboids = ( | |||
| ); | ||||
| 
 | ||||
| sub model { | ||||
|     my ($model_name) = @_; | ||||
|     my ($model_name, %params) = @_; | ||||
|      | ||||
|     my ($vertices, $facets); | ||||
|     if ($cuboids{$model_name}) { | ||||
|  | @ -32,7 +32,10 @@ sub model { | |||
|     my $model = Slic3r::Model->new; | ||||
|     my $object = $model->add_object(vertices => $vertices); | ||||
|     $object->add_volume(facets => $facets); | ||||
|     $object->add_instance(offset => [0,0]); | ||||
|     $object->add_instance( | ||||
|         offset      => [0,0], | ||||
|         rotation    => $params{rotation}, | ||||
|     ); | ||||
|     return $model; | ||||
| } | ||||
| 
 | ||||
|  | @ -46,7 +49,7 @@ sub init_print { | |||
|     my $print = Slic3r::Print->new(config => $config); | ||||
|      | ||||
|     $model_name = [$model_name] if ref($model_name) ne 'ARRAY'; | ||||
|     $print->add_model(model($_)) for @$model_name; | ||||
|     $print->add_model(model($_, %params)) for @$model_name; | ||||
|     $print->validate; | ||||
|      | ||||
|     return $print; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Alessandro Ranellucci
						Alessandro Ranellucci