2021-03-12 04:17:19 +00:00
|
|
|
# Authors: see git history
|
|
|
|
#
|
|
|
|
# Copyright (c) 2010 Authors
|
|
|
|
# Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details.
|
|
|
|
|
2021-06-28 18:05:50 +00:00
|
|
|
from ..commands import is_command
|
2022-01-29 08:53:50 +00:00
|
|
|
from ..marker import has_marker
|
2021-06-28 18:05:50 +00:00
|
|
|
from ..svg.tags import (EMBROIDERABLE_TAGS, SVG_IMAGE_TAG, SVG_PATH_TAG,
|
2022-11-27 07:37:59 +00:00
|
|
|
SVG_POLYGON_TAG, SVG_POLYLINE_TAG, SVG_TEXT_TAG)
|
2020-05-16 21:01:00 +00:00
|
|
|
from .clone import Clone, is_clone
|
2018-11-15 01:23:06 +00:00
|
|
|
from .element import EmbroideryElement
|
2020-05-27 16:39:04 +00:00
|
|
|
from .empty_d_object import EmptyDObject
|
2022-11-27 07:37:59 +00:00
|
|
|
from .fill_stitch import FillStitch
|
2020-05-16 21:01:00 +00:00
|
|
|
from .image import ImageObject
|
2022-01-30 14:48:51 +00:00
|
|
|
from .marker import MarkerObject
|
2018-11-15 01:23:06 +00:00
|
|
|
from .polyline import Polyline
|
|
|
|
from .satin_column import SatinColumn
|
|
|
|
from .stroke import Stroke
|
2020-05-16 21:01:00 +00:00
|
|
|
from .text import TextObject
|
2018-11-15 01:23:06 +00:00
|
|
|
|
|
|
|
|
2022-05-04 16:27:12 +00:00
|
|
|
def node_to_elements(node, clone_to_element=False): # noqa: C901
|
2018-11-15 01:23:06 +00:00
|
|
|
if node.tag == SVG_POLYLINE_TAG:
|
|
|
|
return [Polyline(node)]
|
2020-05-16 21:01:00 +00:00
|
|
|
|
2022-05-04 16:27:12 +00:00
|
|
|
elif is_clone(node) and not clone_to_element:
|
|
|
|
# clone_to_element: get an actual embroiderable element once a clone has been defined as a clone
|
2020-05-16 21:01:00 +00:00
|
|
|
return [Clone(node)]
|
|
|
|
|
2022-11-27 07:37:59 +00:00
|
|
|
elif ((node.tag == SVG_PATH_TAG and not node.get('d', None)) or
|
|
|
|
(node.tag in [SVG_POLYLINE_TAG, SVG_POLYGON_TAG] and not node.get('points', None))):
|
2020-05-27 16:39:04 +00:00
|
|
|
return [EmptyDObject(node)]
|
|
|
|
|
2022-01-30 14:48:51 +00:00
|
|
|
elif has_marker(node):
|
|
|
|
return [MarkerObject(node)]
|
2021-06-24 20:25:13 +00:00
|
|
|
|
2022-05-04 16:27:12 +00:00
|
|
|
elif node.tag in EMBROIDERABLE_TAGS or is_clone(node):
|
2018-11-15 01:23:06 +00:00
|
|
|
element = EmbroideryElement(node)
|
|
|
|
|
2022-11-27 07:37:59 +00:00
|
|
|
elements = []
|
|
|
|
if element.get_style("fill", "black") and not element.get_style('fill-opacity', 1) == "0":
|
|
|
|
elements.append(FillStitch(node))
|
|
|
|
if element.get_style("stroke"):
|
|
|
|
if element.get_boolean_param("satin_column"):
|
|
|
|
elements.append(SatinColumn(node))
|
|
|
|
elif not is_command(element.node):
|
|
|
|
elements.append(Stroke(node))
|
|
|
|
if element.get_boolean_param("stroke_first", False):
|
|
|
|
elements.reverse()
|
|
|
|
return elements
|
2020-05-16 21:01:00 +00:00
|
|
|
|
|
|
|
elif node.tag == SVG_IMAGE_TAG:
|
|
|
|
return [ImageObject(node)]
|
|
|
|
|
|
|
|
elif node.tag == SVG_TEXT_TAG:
|
|
|
|
return [TextObject(node)]
|
|
|
|
|
2018-11-15 01:23:06 +00:00
|
|
|
else:
|
|
|
|
return []
|
|
|
|
|
|
|
|
|
|
|
|
def nodes_to_elements(nodes):
|
|
|
|
elements = []
|
|
|
|
for node in nodes:
|
|
|
|
elements.extend(node_to_elements(node))
|
|
|
|
|
|
|
|
return elements
|