diff options
author | Michael Soluyanov <@crantisz)> | 2019-09-11 13:38:09 +0300 |
---|---|---|
committer | Antonio Vazquez <blendergit@gmail.com> | 2019-09-11 13:39:37 +0300 |
commit | 8db12f14561cf8bb123f7933738d5e62d1c50850 (patch) | |
tree | fa6a2a7cb085a877f4265a437564d9761a34e9a6 /io_curve_svg | |
parent | 539e24046e61bb3468ac70c660cebe5315d154a3 (diff) |
SVG Import: Match SVG-document units with Blender units:
Differential Revision: https://developer.blender.org/D4319
Diffstat (limited to 'io_curve_svg')
-rw-r--r-- | io_curve_svg/import_svg.py | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/io_curve_svg/import_svg.py b/io_curve_svg/import_svg.py index 9bc48a21..57d0c70f 100644 --- a/io_curve_svg/import_svg.py +++ b/io_curve_svg/import_svg.py @@ -1816,6 +1816,35 @@ class SVGGeometrySVG(SVGGeometryContainer): matrix = self.getNodeMatrix() + # Better SVG compatibility: match svg-document units + # with blender units + + viewbox = [] + unit = '' + + if self._node.getAttribute('height'): + raw_height = self._node.getAttribute('height') + token, last_char = SVGParseFloat(raw_height) + document_height = float(token) + unit = raw_height[last_char:].strip() + + if self._node.getAttribute('viewBox'): + viewbox = parse_array_of_floats(self._node.getAttribute('viewBox')) + + if len(viewbox) == 4 and unit in ('cm', 'mm', 'in', 'pt', 'pc'): + + #one unit equals whis svg units: + unitscale = document_height / (viewbox[3] - viewbox[1]) + + #convert units to BU: + unitscale = unitscale * SVGUnits[unit] / 90 * 1000 / 39.3701 + + #apply blender unit scale: + unitscale = unitscale / bpy.context.scene.unit_settings.scale_length + + matrix = matrix @ Matrix.Scale(unitscale, 4, Vector((1.0, 0.0, 0.0))) + matrix = matrix @ Matrix.Scale(unitscale, 4, Vector((0.0, 1.0, 0.0))) + # match document origin with 3D space origin. if self._node.getAttribute('viewBox'): viewbox = parse_array_of_floats(self._node.getAttribute('viewBox')) |