|
|
@@ -267,18 +267,14 @@ def panel_to_components(tree): |
|
|
|
|
|
|
|
# Get components layer |
|
|
|
root = tree.getroot() |
|
|
|
groups = root.findall(".//svg:g[@inkscape:label='components']", ns) |
|
|
|
group = root.find(".//svg:g[@inkscape:label='components']", ns) |
|
|
|
# Illustrator uses `id` for the group name. |
|
|
|
if len(groups) < 1: |
|
|
|
groups = root.findall(".//svg:g[@id='components']", ns) |
|
|
|
if len(groups) < 1: |
|
|
|
# Don't test with `not group` since Elements with no subelements are falsy. |
|
|
|
if group is None: |
|
|
|
group = root.find(".//svg:g[@id='components']", ns) |
|
|
|
if group is None: |
|
|
|
raise UserException("Could not find \"components\" layer on panel") |
|
|
|
|
|
|
|
# Get circles and rects |
|
|
|
components_group = groups[0] |
|
|
|
circles = components_group.findall(".//svg:circle", ns) |
|
|
|
rects = components_group.findall(".//svg:rect", ns) |
|
|
|
|
|
|
|
components = {} |
|
|
|
components['params'] = [] |
|
|
|
components['inputs'] = [] |
|
|
@@ -286,29 +282,20 @@ def panel_to_components(tree): |
|
|
|
components['lights'] = [] |
|
|
|
components['widgets'] = [] |
|
|
|
|
|
|
|
for el in circles + rects: |
|
|
|
for el in group: |
|
|
|
c = {} |
|
|
|
|
|
|
|
# Get name |
|
|
|
name = el.get('{http://www.inkscape.org/namespaces/inkscape}label') |
|
|
|
if name is None: |
|
|
|
name = el.get('{' + ns['inkscape'] + '}label') |
|
|
|
if not name: |
|
|
|
name = el.get('id') |
|
|
|
if not name: |
|
|
|
name = "" |
|
|
|
name = str_to_identifier(name).upper() |
|
|
|
c['name'] = name |
|
|
|
|
|
|
|
# Get color |
|
|
|
fill = el.get('fill') |
|
|
|
style = el.get('style') |
|
|
|
if fill: |
|
|
|
color_match = re.search(r'#(.{6})', fill) |
|
|
|
color = color_match.group(1).lower() |
|
|
|
elif style: |
|
|
|
color_match = re.search(r'fill:\S*#(.{6});', style) |
|
|
|
color = color_match.group(1).lower() |
|
|
|
else: |
|
|
|
raise UserException("Cannot get color of component") |
|
|
|
|
|
|
|
# Get position |
|
|
|
if el.tag == "{http://www.w3.org/2000/svg}rect": |
|
|
|
if el.tag == '{' + ns['svg'] + '}rect': |
|
|
|
x = float(el.get('x')) |
|
|
|
y = float(el.get('y')) |
|
|
|
width = float(el.get('width')) |
|
|
@@ -319,11 +306,27 @@ def panel_to_components(tree): |
|
|
|
c['height'] = round(height, 3) |
|
|
|
c['cx'] = round(x + width / 2, 3) |
|
|
|
c['cy'] = round(y + height / 2, 3) |
|
|
|
elif el.tag == "{http://www.w3.org/2000/svg}circle": |
|
|
|
elif el.tag == '{' + ns['svg'] + '}circle' or el.tag == '{' + ns['svg'] + '}ellipse': |
|
|
|
cx = float(el.get('cx')) |
|
|
|
cy = float(el.get('cy')) |
|
|
|
c['cx'] = round(cx, 3) |
|
|
|
c['cy'] = round(cy, 3) |
|
|
|
else: |
|
|
|
print(f"Element in components layer is not rect, circle, or ellipse: {el}") |
|
|
|
continue |
|
|
|
|
|
|
|
# Get color |
|
|
|
fill = el.get('fill') |
|
|
|
style = el.get('style') |
|
|
|
if fill: |
|
|
|
color_match = re.search(r'#(.{6})', fill) |
|
|
|
color = color_match.group(1).lower() |
|
|
|
elif style: |
|
|
|
color_match = re.search(r'fill:\S*#(.{6});', style) |
|
|
|
color = color_match.group(1).lower() |
|
|
|
else: |
|
|
|
print(f"Cannot get color of component: {el}") |
|
|
|
continue |
|
|
|
|
|
|
|
if color == 'ff0000': |
|
|
|
components['params'].append(c) |
|
|
|