Tweaks to transform parsing implementation
parent
17d283abe0
commit
8a4801bcde
|
@ -213,10 +213,10 @@ def _check_num_parsed_values(values, allowed):
|
||||||
|
|
||||||
|
|
||||||
def _parse_transform_substr(transform_substr):
|
def _parse_transform_substr(transform_substr):
|
||||||
value_str = transform_substr.split('(')[1]
|
type_str, value_str = transform_substr.split('(')
|
||||||
values = list(map(float, value_str.split(',')))
|
values = list(map(float, value_str.split(',')))
|
||||||
transform = np.identity(3)
|
transform = np.identity(3)
|
||||||
if 'matrix' in transform_substr:
|
if 'matrix' in type_str:
|
||||||
_check_num_parsed_values(values, 6)
|
_check_num_parsed_values(values, 6)
|
||||||
|
|
||||||
transform[0:2, 0:3] = np.matrix([values[0:3], values[3:6]])
|
transform[0:2, 0:3] = np.matrix([values[0:3], values[3:6]])
|
||||||
|
@ -232,25 +232,20 @@ def _parse_transform_substr(transform_substr):
|
||||||
_check_num_parsed_values(values, [1, 2])
|
_check_num_parsed_values(values, [1, 2])
|
||||||
|
|
||||||
x_scale = values[0]
|
x_scale = values[0]
|
||||||
if len(values) > 1:
|
y_scale = values[1] if (len(values) > 1) else x_scale
|
||||||
y_scale = values[1]
|
|
||||||
else:
|
|
||||||
y_scale = x_scale # y_scale is assumed to equal x_scale if only one value is provided
|
|
||||||
transform[0, 0] = x_scale
|
transform[0, 0] = x_scale
|
||||||
transform[1, 1] = y_scale
|
transform[1, 1] = y_scale
|
||||||
|
|
||||||
elif 'rotate' in transform_substr:
|
elif 'rotate' in transform_substr:
|
||||||
_check_num_parsed_values(values, [1, 3])
|
_check_num_parsed_values(values, [1, 3])
|
||||||
|
|
||||||
angle = values[0]
|
angle = values[0] * np.pi / 180.0
|
||||||
if len(values) == 3:
|
if len(values) == 3:
|
||||||
x_offset = values[1]
|
offset = values[1:3]
|
||||||
y_offset = values[2]
|
|
||||||
else:
|
else:
|
||||||
x_offset = 0
|
offset = (0, 0)
|
||||||
y_offset = 0
|
|
||||||
T_offset = np.identity(3)
|
T_offset = np.identity(3)
|
||||||
T_offset[0:2, 2] = np.matrix([[x_offset], [y_offset]])
|
T_offset[0:2, 2] = np.matrix([[offset[0]], [offset[1]]])
|
||||||
T_rotate = np.identity(3)
|
T_rotate = np.identity(3)
|
||||||
T_rotate[0:2, 0:2] = np.matrix([np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)])
|
T_rotate[0:2, 0:2] = np.matrix([np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)])
|
||||||
|
|
||||||
|
@ -258,17 +253,20 @@ def _parse_transform_substr(transform_substr):
|
||||||
|
|
||||||
elif 'skewX' in transform_substr:
|
elif 'skewX' in transform_substr:
|
||||||
_check_num_parsed_values(values, 1)
|
_check_num_parsed_values(values, 1)
|
||||||
transform[0, 1] = np.tan(values[0])
|
transform[0, 1] = np.tan(values[0] * np.pi / 180.0)
|
||||||
|
|
||||||
elif 'skewY' in transform_substr:
|
elif 'skewY' in transform_substr:
|
||||||
_check_num_parsed_values(values, 1)
|
_check_num_parsed_values(values, 1)
|
||||||
transform[1, 0] = np.tan(values[0])
|
transform[1, 0] = np.tan(values[0] * np.pi / 180.0)
|
||||||
|
else:
|
||||||
|
# Return an identity matrix if the type of transform is unknown, and warn the user
|
||||||
|
warnings.warn('Unknown SVG transform type: {0})'.format(type_str))
|
||||||
|
|
||||||
return transform
|
return transform
|
||||||
|
|
||||||
|
|
||||||
def parse_transform(transform_str):
|
def parse_transform(transform_str):
|
||||||
"""Converts a valid SVG tranformation string into a 3x3 matrix.
|
"""Converts a valid SVG transformation string into a 3x3 matrix.
|
||||||
If the string is empty or null, this returns a 3x3 identity matrix"""
|
If the string is empty or null, this returns a 3x3 identity matrix"""
|
||||||
if not transform_str:
|
if not transform_str:
|
||||||
return np.identity(3)
|
return np.identity(3)
|
||||||
|
|
|
@ -114,6 +114,7 @@ CONVERSIONS = {'circle': ellipse2pathd,
|
||||||
'polygon': polygon2pathd,
|
'polygon': polygon2pathd,
|
||||||
'rect': rect2pathd}
|
'rect': rect2pathd}
|
||||||
|
|
||||||
|
|
||||||
def svg2paths(svg_file_location, return_svg_attributes=False,
|
def svg2paths(svg_file_location, return_svg_attributes=False,
|
||||||
conversions=CONVERSIONS, return_tree=False):
|
conversions=CONVERSIONS, return_tree=False):
|
||||||
"""Converts SVG to list of Path objects and attribute dictionaries.
|
"""Converts SVG to list of Path objects and attribute dictionaries.
|
||||||
|
|
Loading…
Reference in New Issue