kopia lustrzana https://github.com/inkstitch/inkstitch
				
				
				
			add avoid_self_Crossing option
							rodzic
							
								
									60fb7d0a9e
								
							
						
					
					
						commit
						76ab319731
					
				| 
						 | 
				
			
			@ -118,6 +118,11 @@ class FillStitch(EmbroideryElement):
 | 
			
		|||
    def interlaced(self):
 | 
			
		||||
        return self.get_boolean_param('interlaced', True)
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    @param('avoid_self_crossing', _('Avoid self-crossing'), type='boolean', default=False, select_items=[('fill_method', 1)], sort_index=2)
 | 
			
		||||
    def avoid_self_crossing(self):
 | 
			
		||||
        return self.get_boolean_param('avoid_self_crossing', False)
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    @param('angle',
 | 
			
		||||
           _('Angle of lines of stitches'),
 | 
			
		||||
| 
						 | 
				
			
			@ -574,7 +579,9 @@ class FillStitch(EmbroideryElement):
 | 
			
		|||
                min(self.min_stitch_length, self.max_stitch_length),
 | 
			
		||||
                self.interlaced,
 | 
			
		||||
                self.tangential_strategy,
 | 
			
		||||
                shgeo.Point(starting_point))
 | 
			
		||||
                shgeo.Point(starting_point),
 | 
			
		||||
                self.avoid_self_crossing
 | 
			
		||||
            )
 | 
			
		||||
            path = [InkstitchPoint(*p) for p in connectedLine]
 | 
			
		||||
            stitch_group = StitchGroup(
 | 
			
		||||
                color=self.color,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -115,7 +115,8 @@ def check_and_prepare_tree_for_valid_spiral(tree):
 | 
			
		|||
    return process_node('root')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def offset_poly(poly, offset, join_style, stitch_distance, min_stitch_distance, offset_by_half, strategy, starting_point):  # noqa: C901
 | 
			
		||||
def offset_poly(poly, offset, join_style, stitch_distance, min_stitch_distance, offset_by_half, strategy, starting_point,  # noqa: C901
 | 
			
		||||
                avoid_self_crossing):
 | 
			
		||||
    """
 | 
			
		||||
    Takes a polygon (which can have holes) as input and creates offsetted
 | 
			
		||||
    versions until the polygon is filled with these smaller offsets.
 | 
			
		||||
| 
						 | 
				
			
			@ -139,6 +140,7 @@ def offset_poly(poly, offset, join_style, stitch_distance, min_stitch_distance,
 | 
			
		|||
     In contrast to the other two options, "SPIRAL" does not end at the starting point
 | 
			
		||||
     but at the innermost point
 | 
			
		||||
    -starting_point: Defines the starting point for the stitching
 | 
			
		||||
    -avoid_self_crossing: don't let the path cross itself when using the Inner to Outer strategy
 | 
			
		||||
    Output:
 | 
			
		||||
    -List of point coordinate tuples
 | 
			
		||||
    -Tag (origin) of each point to analyze why a point was placed
 | 
			
		||||
| 
						 | 
				
			
			@ -277,7 +279,7 @@ def offset_poly(poly, offset, join_style, stitch_distance, min_stitch_distance,
 | 
			
		|||
 | 
			
		||||
    if strategy == StitchingStrategy.INNER_TO_OUTER:
 | 
			
		||||
        connected_line = tangential_fill_stitch_pattern_creator.connect_raster_tree_from_inner_to_outer(
 | 
			
		||||
            tree, 'root', abs(offset), stitch_distance, min_stitch_distance, starting_point, offset_by_half)
 | 
			
		||||
            tree, 'root', abs(offset), stitch_distance, min_stitch_distance, starting_point, offset_by_half, avoid_self_crossing)
 | 
			
		||||
        path = [Stitch(*point) for point in connected_line.coords]
 | 
			
		||||
        return running_stitch(path, stitch_distance), "whatever"
 | 
			
		||||
    elif strategy == StitchingStrategy.SPIRAL:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -110,7 +110,7 @@ def create_nearest_points_list(
 | 
			
		|||
 | 
			
		||||
@debug.time
 | 
			
		||||
def connect_raster_tree_from_inner_to_outer(tree, node, offset, stitch_distance, min_stitch_distance, starting_point,
 | 
			
		||||
                                            offset_by_half):  # noqa: C901
 | 
			
		||||
                                            offset_by_half, avoid_self_crossing, forward=True):
 | 
			
		||||
    """
 | 
			
		||||
    Takes the offset curves organized as a tree, connects and samples them.
 | 
			
		||||
    Strategy: A connection from parent to child is made as fast as possible to
 | 
			
		||||
| 
						 | 
				
			
			@ -137,6 +137,9 @@ def connect_raster_tree_from_inner_to_outer(tree, node, offset, stitch_distance,
 | 
			
		|||
    current_node = tree.nodes[node]
 | 
			
		||||
    current_ring = current_node.val
 | 
			
		||||
 | 
			
		||||
    if not forward and avoid_self_crossing:
 | 
			
		||||
        current_ring = reverse_line_string(current_ring)
 | 
			
		||||
 | 
			
		||||
    # reorder the coordinates of this ring so that it starts with
 | 
			
		||||
    # a point nearest the starting_point
 | 
			
		||||
    start_distance = current_ring.project(starting_point)
 | 
			
		||||
| 
						 | 
				
			
			@ -157,7 +160,8 @@ def connect_raster_tree_from_inner_to_outer(tree, node, offset, stitch_distance,
 | 
			
		|||
    if not nearest_points_list:
 | 
			
		||||
        # We have no children, so we're at the center of a spiral.  Reversing
 | 
			
		||||
        # the ring gives a nicer visual appearance.
 | 
			
		||||
        current_ring = reverse_line_string(current_ring)
 | 
			
		||||
        # current_ring = reverse_line_string(current_ring)
 | 
			
		||||
        pass
 | 
			
		||||
    else:
 | 
			
		||||
        # This is a recursive algorithm.  We'll stitch along this ring, pausing
 | 
			
		||||
        # to jump to each child ring in turn and sew it before continuing on
 | 
			
		||||
| 
						 | 
				
			
			@ -184,6 +188,8 @@ def connect_raster_tree_from_inner_to_outer(tree, node, offset, stitch_distance,
 | 
			
		|||
                min_stitch_distance,
 | 
			
		||||
                child_connection.nearest_point_child,
 | 
			
		||||
                offset_by_half,
 | 
			
		||||
                avoid_self_crossing,
 | 
			
		||||
                not forward
 | 
			
		||||
            )
 | 
			
		||||
            result_coords.extend(child_path.coords)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -56,6 +56,7 @@ inkstitch_attribs = [
 | 
			
		|||
    'tangential_strategy',
 | 
			
		||||
    'join_style',
 | 
			
		||||
    'interlaced',
 | 
			
		||||
    'avoid_self_crossing',
 | 
			
		||||
    'expand_mm',
 | 
			
		||||
    'fill_underlay',
 | 
			
		||||
    'fill_underlay_angle',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue