kopia lustrzana https://github.com/inkstitch/inkstitch
				
				
				
			
							rodzic
							
								
									eaa5984f92
								
							
						
					
					
						commit
						dfb43d2812
					
				|  | @ -45,7 +45,7 @@ class NotStitchableError(ValidationError): | |||
| rung_message = _("Each rung should intersect both rails once.") | ||||
| 
 | ||||
| 
 | ||||
| class TooManyIntersectionsError(ValidationError): | ||||
| class TooManyIntersectionsWarning(ValidationWarning): | ||||
|     name = _("Rungs intersects too many times") | ||||
|     description = _("Satin column: A rung intersects a rail more than once.") + " " + rung_message | ||||
| 
 | ||||
|  | @ -403,7 +403,6 @@ class SatinColumn(EmbroideryElement): | |||
|     @property | ||||
|     @cache | ||||
|     def flattened_rungs(self): | ||||
|         """The rungs, as LineStrings.""" | ||||
|         return tuple(shgeo.LineString(self.flatten_subpath(rung)) for rung in self.rungs) | ||||
| 
 | ||||
|     @property | ||||
|  | @ -501,15 +500,19 @@ class SatinColumn(EmbroideryElement): | |||
| 
 | ||||
|         rails = list(self.flattened_rails) | ||||
|         rungs = self.flattened_rungs | ||||
|         cut_points = [[], []] | ||||
| 
 | ||||
|         for rung in rungs: | ||||
|             intersections = rung.intersection(shgeo.MultiLineString(rails)) | ||||
|             # ignore the rungs that are cutting a rail multiple times | ||||
|             if isinstance(intersections, shgeo.MultiPoint) and len(intersections.geoms) > 2: | ||||
|                 continue | ||||
|             for i, rail in enumerate(rails): | ||||
|                 point_on_rung, point_on_rail = nearest_points(rung, rail) | ||||
|                 cut_points[i].append(rail.project(point_on_rail)) | ||||
| 
 | ||||
|         for i, rail in enumerate(rails): | ||||
|             cut_points = [] | ||||
| 
 | ||||
|             for rung in rungs: | ||||
|                 point_on_rung, point_on_rail = nearest_points(rung, rail) | ||||
|                 cut_points.append(rail.project(point_on_rail)) | ||||
| 
 | ||||
|             rails[i] = cut_multiple(rail, cut_points) | ||||
|             rails[i] = cut_multiple(rail, cut_points[i]) | ||||
| 
 | ||||
|         for rail in rails: | ||||
|             for i in range(len(rail)): | ||||
|  | @ -540,6 +543,8 @@ class SatinColumn(EmbroideryElement): | |||
|                 intersection = rung.intersection(rail) | ||||
|                 if intersection.is_empty: | ||||
|                     yield DanglingRungWarning(rung.interpolate(0.5, normalized=True)) | ||||
|                 elif not isinstance(intersection, shgeo.Point): | ||||
|                     yield TooManyIntersectionsWarning(rung.interpolate(0.5, normalized=True)) | ||||
| 
 | ||||
|     def validation_errors(self): | ||||
|         # The node should have exactly two paths with the same number of points - or it should | ||||
|  | @ -548,12 +553,6 @@ class SatinColumn(EmbroideryElement): | |||
|             yield TooFewPathsError((0, 0)) | ||||
|         elif len(self.rails) < 2: | ||||
|             yield TooFewPathsError(self.shape.centroid) | ||||
|         else: | ||||
|             for rung in self.flattened_rungs: | ||||
|                 for rail in self.flattened_rails: | ||||
|                     intersection = rung.intersection(rail) | ||||
|                     if not intersection.is_empty and not isinstance(intersection, shgeo.Point): | ||||
|                         yield TooManyIntersectionsError(rung.interpolate(0.5, normalized=True)) | ||||
| 
 | ||||
|         if not self.to_stitch_groups(): | ||||
|             yield NotStitchableError(self.shape.centroid) | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Kaalleen
						Kaalleen