mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 20:51:23 -07:00 
			
		
		
		
	Ported encloses_point() to XS and renamed to contains_point()
This commit is contained in:
		
							parent
							
								
									a225a8b2ef
								
							
						
					
					
						commit
						5f81292f3f
					
				
					 22 changed files with 81 additions and 76 deletions
				
			
		| 
						 | 
				
			
			@ -139,7 +139,7 @@ sub process_layer {
 | 
			
		|||
                    for 1 .. (@{$layer->slices} || 1);  # make sure we have at least one island hash to avoid failure of the -1 subscript below
 | 
			
		||||
                PERIMETER: foreach my $perimeter (@{$layerm->perimeters}) {
 | 
			
		||||
                    for my $i (0 .. $#{$layer->slices}-1) {
 | 
			
		||||
                        if ($layer->slices->[$i]->contour->encloses_point($perimeter->first_point)) {
 | 
			
		||||
                        if ($layer->slices->[$i]->contour->contains_point($perimeter->first_point)) {
 | 
			
		||||
                            push @{ $islands[$i]{perimeters} }, $perimeter;
 | 
			
		||||
                            next PERIMETER;
 | 
			
		||||
                        }
 | 
			
		||||
| 
						 | 
				
			
			@ -148,7 +148,7 @@ sub process_layer {
 | 
			
		|||
                }
 | 
			
		||||
                FILL: foreach my $fill (@{$layerm->fills}) {
 | 
			
		||||
                    for my $i (0 .. $#{$layer->slices}-1) {
 | 
			
		||||
                        if ($layer->slices->[$i]->contour->encloses_point($fill->first_point)) {
 | 
			
		||||
                        if ($layer->slices->[$i]->contour->contains_point($fill->first_point)) {
 | 
			
		||||
                            push @{ $islands[$i]{fills} }, $fill;
 | 
			
		||||
                            next FILL;
 | 
			
		||||
                        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -192,13 +192,13 @@ sub find_node {
 | 
			
		|||
    
 | 
			
		||||
    # if we're inside a hole, move to a point on hole;
 | 
			
		||||
    {
 | 
			
		||||
        my $polygon = first { $_->encloses_point($point) } (map @{$_->holes}, map @$_, @{$self->_inner});
 | 
			
		||||
        my $polygon = first { $_->contains_point($point) } (map @{$_->holes}, map @$_, @{$self->_inner});
 | 
			
		||||
        return $point->nearest_point([ @$polygon ]) if $polygon;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    # if we're inside an expolygon move to a point on contour or holes
 | 
			
		||||
    {
 | 
			
		||||
        my $expolygon = first { $_->encloses_point_quick($point) } (map @$_, @{$self->_inner});
 | 
			
		||||
        my $expolygon = first { $_->contains_point($point) } (map @$_, @{$self->_inner});
 | 
			
		||||
        return $point->nearest_point([ map @$_, @$expolygon ]) if $expolygon;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
| 
						 | 
				
			
			@ -206,11 +206,11 @@ sub find_node {
 | 
			
		|||
        my $outer_polygon_idx;
 | 
			
		||||
        if (!$self->no_internal) {
 | 
			
		||||
            # look for an outer expolygon whose contour contains our point
 | 
			
		||||
            $outer_polygon_idx = first { first { $_->contour->encloses_point($point) } @{$self->_contours_ex->[$_]} }
 | 
			
		||||
            $outer_polygon_idx = first { first { $_->contour->contains_point($point) } @{$self->_contours_ex->[$_]} }
 | 
			
		||||
                0 .. $#{ $self->_contours_ex };
 | 
			
		||||
        } else {
 | 
			
		||||
            # # look for an outer expolygon containing our point
 | 
			
		||||
            $outer_polygon_idx = first { first { $_->encloses_point($point) } @{$self->_outer->[$_]} }
 | 
			
		||||
            $outer_polygon_idx = first { first { $_->contains_point($point) } @{$self->_outer->[$_]} }
 | 
			
		||||
                0 .. $#{ $self->_outer };
 | 
			
		||||
        }
 | 
			
		||||
        my $candidates = defined $outer_polygon_idx
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue