mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	DLP support material in SVG output (untested)
This commit is contained in:
		
							parent
							
								
									1f35a3f6aa
								
							
						
					
					
						commit
						55ed4af06e
					
				
					 1 changed files with 26 additions and 0 deletions
				
			
		|  | @ -359,10 +359,12 @@ EOF | |||
|             ($type eq 'contour' ? 'white' : 'black'); | ||||
|     }; | ||||
|      | ||||
|     my @previous_layer_slices = (); | ||||
|     for my $layer_id (0..$self->layer_count-1) { | ||||
|         my @layers = map $_->layers->[$layer_id], @{$self->objects}; | ||||
|         printf $fh qq{  <g id="layer%d" slic3r:z="%s">\n}, $layer_id, unscale +(grep defined $_, @layers)[0]->slice_z; | ||||
|          | ||||
|         my @current_layer_slices = (); | ||||
|         for my $obj_idx (0 .. $#{$self->objects}) { | ||||
|             my $layer = $self->objects->[$obj_idx]->layers->[$layer_id] or next; | ||||
|              | ||||
|  | @ -374,10 +376,34 @@ EOF | |||
|                     $expolygon->translate(@$copy); | ||||
|                     $print_polygon->($expolygon->contour, 'contour'); | ||||
|                     $print_polygon->($_, 'hole') for $expolygon->holes; | ||||
|                     push @current_layer_slices, $expolygon; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         # generate support material | ||||
|         if ($Slic3r::support_material && $layer_id > 0) { | ||||
|             my (@supported_slices, @unsupported_slices) = (); | ||||
|             foreach my $expolygon (@current_layer_slices) { | ||||
|                 my $intersection = intersection_ex( | ||||
|                     [ map @$_, @previous_layer_slices ], | ||||
|                     $expolygon, | ||||
|                 ); | ||||
|                 @$intersection | ||||
|                     ? push @supported_slices, $expolygon | ||||
|                     : push @unsupported_slices, $expolygon; | ||||
|             } | ||||
|             my @supported_points = map @$_, @$_, @supported_slices; | ||||
|             foreach my $expolygon (@unsupported_slices) { | ||||
|                 # look for the nearest point to this island among all | ||||
|                 # supported points | ||||
|                 my $support_point = nearest_point($expolygon->contour->[0], \@supported_points); | ||||
|                 my $anchor_point = nearest_point($support_point, $expolygon->contour->[0]); | ||||
|                 printf $fh qq{    <line x1="%s" y1="%s" x2="%s" y2="%s" style="stroke-width: 2" />\n}, | ||||
|                     map @$_, $support_point, $anchor_point; | ||||
|             } | ||||
|         } | ||||
|         print $fh qq{  </g>\n}; | ||||
|         @previous_layer_slices = @current_layer_slices; | ||||
|     } | ||||
|      | ||||
|     print $fh "</svg>\n"; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Alessandro Ranellucci
						Alessandro Ranellucci