kopia lustrzana https://github.com/inkstitch/inkstitch
				
				
				
			Lettering sortable trims (#3308)
* add trims as requested through user interface for each color block * handle commands betterpull/3299/head dev-build-kaalleen-lettering_scale_group
							rodzic
							
								
									13ddafb2ad
								
							
						
					
					
						commit
						e0095ea846
					
				|  | @ -25,4 +25,7 @@ class LetteringSetColorSortIndex(InkstitchExtension): | |||
|             if element.TAG == "path": | ||||
|                 element.set('inkstitch:color_sort_index', self.options.color_sort_index) | ||||
|             elif element.TAG == "g": | ||||
|                 self.set_index(element.getchildren()) | ||||
|                 if element.get_id().startswith('command_group'): | ||||
|                     element.set('inkstitch:color_sort_index', self.options.color_sort_index) | ||||
|                 else: | ||||
|                     self.set_index(element.getchildren()) | ||||
|  |  | |||
|  | @ -236,7 +236,7 @@ class Font(object): | |||
|         self._set_style(destination_group) | ||||
| 
 | ||||
|         # add trims | ||||
|         self._add_trims(destination_group, text, trim_option, use_trim_symbols, back_and_forth) | ||||
|         self._add_trims(destination_group, text, trim_option, use_trim_symbols, back_and_forth, color_sort) | ||||
|         # make sure necessary marker and command symbols are in the defs section | ||||
|         self._ensure_command_symbols(destination_group) | ||||
|         self._ensure_marker_symbols(destination_group) | ||||
|  | @ -375,7 +375,7 @@ class Font(object): | |||
|             el = node.find(f".//*[@id='{node_id}']") | ||||
|             el.clip = clip | ||||
| 
 | ||||
|     def _add_trims(self, destination_group, text, trim_option, use_trim_symbols, back_and_forth): | ||||
|     def _add_trims(self, destination_group, text, trim_option, use_trim_symbols, back_and_forth, color_sort): | ||||
|         """ | ||||
|         trim_option == 0  --> no trims | ||||
|         trim_option == 1  --> trim at the end of each line | ||||
|  | @ -404,21 +404,35 @@ class Font(object): | |||
| 
 | ||||
|             # letter | ||||
|             if trim_option == 3: | ||||
|                 self._process_trim(group, use_trim_symbols) | ||||
|                 self._process_trim(group, use_trim_symbols, color_sort) | ||||
|             # word | ||||
|             elif trim_option == 2 and i+1 in space_indices + line_break_indices: | ||||
|                 self._process_trim(group, use_trim_symbols) | ||||
|                 self._process_trim(group, use_trim_symbols, color_sort) | ||||
|             # line | ||||
|             elif trim_option == 1 and i+1 in line_break_indices: | ||||
|                 self._process_trim(group, use_trim_symbols) | ||||
|                 self._process_trim(group, use_trim_symbols, color_sort) | ||||
| 
 | ||||
|     def _process_trim(self, group, use_trim_symbols): | ||||
|         # find the last path that does not carry a marker and add a trim there | ||||
|         for path_child in group.iterdescendants(EMBROIDERABLE_TAGS): | ||||
|             if not has_marker(path_child): | ||||
|                 path = path_child | ||||
|             element = Stroke(path) | ||||
|     def _process_trim(self, group, use_trim_symbols, color_sort): | ||||
|         if color_sort and self.sortable: | ||||
|             elements = defaultdict(list) | ||||
|             for path_child in group.iterdescendants(EMBROIDERABLE_TAGS): | ||||
|                 if not has_marker(path_child): | ||||
|                     sort_index = path_child.get('inkstitch:color_sort_index', None) | ||||
|                     if sort_index is not None: | ||||
|                         elements[sort_index] = path_child | ||||
|                     else: | ||||
|                         elements[404] = path_child | ||||
|             for value in elements.values(): | ||||
|                 self._add_trim_to_element(Stroke(value), use_trim_symbols) | ||||
|         else: | ||||
|             # find the last path that does not carry a marker and add a trim there | ||||
|             for path_child in group.iterdescendants(EMBROIDERABLE_TAGS): | ||||
|                 if not has_marker(path_child): | ||||
|                     path = path_child | ||||
|                 element = Stroke(path) | ||||
|                 self._add_trim_to_element(element, use_trim_symbols) | ||||
| 
 | ||||
|     def _add_trim_to_element(self, element, use_trim_symbols): | ||||
|         if element.shape: | ||||
|             element_id = "%s_%s" % (element.node.get('id'), randint(0, 9999)) | ||||
|             element.node.set("id", element_id) | ||||
|  | @ -500,9 +514,15 @@ class Font(object): | |||
|     def _get_color_sorted_elements(self, group): | ||||
|         elements_by_color = defaultdict(list) | ||||
|         last_parent = None | ||||
|         for element in group.iterdescendants(SVG_PATH_TAG): | ||||
|         for element in group.iterdescendants(EMBROIDERABLE_TAGS, SVG_GROUP_TAG): | ||||
|             sort_index = element.get('inkstitch:color_sort_index', None) | ||||
| 
 | ||||
|             # Skip command connectors, we only aim for command groups | ||||
|             # Skip command connectors as well, they will be included with the command group | ||||
|             if (element.TAG == 'g' and not element.get_id().startswith('command_group') | ||||
|                     or element.get_id().startswith('command_connector')): | ||||
|                 continue | ||||
| 
 | ||||
|             # get glyph group to calculate transform | ||||
|             for ancestor in element.ancestors(group): | ||||
|                 if ancestor.get_id().startswith("glyph"): | ||||
|  | @ -516,6 +536,10 @@ class Font(object): | |||
|                 elements_by_color[404].append([element]) | ||||
|                 continue | ||||
| 
 | ||||
|             if element.get_id().startswith('command_group'): | ||||
|                 elements_by_color[int(sort_index)].append([element]) | ||||
|                 continue | ||||
| 
 | ||||
|             parent = element.getparent() | ||||
|             if element.clip is None and parent.clip is not None: | ||||
|                 element.clip = parent.clip | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Kaalleen
						Kaalleen