| @@ -267,18 +267,14 @@ def panel_to_components(tree): | |||||
| # Get components layer | # Get components layer | ||||
| root = tree.getroot() | 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. | # 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") | 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 = {} | ||||
| components['params'] = [] | components['params'] = [] | ||||
| components['inputs'] = [] | components['inputs'] = [] | ||||
| @@ -286,29 +282,20 @@ def panel_to_components(tree): | |||||
| components['lights'] = [] | components['lights'] = [] | ||||
| components['widgets'] = [] | components['widgets'] = [] | ||||
| for el in circles + rects: | |||||
| for el in group: | |||||
| c = {} | c = {} | ||||
| # Get name | # 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') | name = el.get('id') | ||||
| if not name: | |||||
| name = "" | |||||
| name = str_to_identifier(name).upper() | name = str_to_identifier(name).upper() | ||||
| c['name'] = name | 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 | # Get position | ||||
| if el.tag == "{http://www.w3.org/2000/svg}rect": | |||||
| if el.tag == '{' + ns['svg'] + '}rect': | |||||
| x = float(el.get('x')) | x = float(el.get('x')) | ||||
| y = float(el.get('y')) | y = float(el.get('y')) | ||||
| width = float(el.get('width')) | width = float(el.get('width')) | ||||
| @@ -319,11 +306,27 @@ def panel_to_components(tree): | |||||
| c['height'] = round(height, 3) | c['height'] = round(height, 3) | ||||
| c['cx'] = round(x + width / 2, 3) | c['cx'] = round(x + width / 2, 3) | ||||
| c['cy'] = round(y + height / 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')) | cx = float(el.get('cx')) | ||||
| cy = float(el.get('cy')) | cy = float(el.get('cy')) | ||||
| c['cx'] = round(cx, 3) | c['cx'] = round(cx, 3) | ||||
| c['cy'] = round(cy, 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': | if color == 'ff0000': | ||||
| components['params'].append(c) | components['params'].append(c) | ||||