Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Soluyanov <@crantisz)>2019-09-11 13:38:09 +0300
committerAntonio Vazquez <blendergit@gmail.com>2019-09-11 13:39:37 +0300
commit8db12f14561cf8bb123f7933738d5e62d1c50850 (patch)
treefa6a2a7cb085a877f4265a437564d9761a34e9a6 /io_curve_svg
parent539e24046e61bb3468ac70c660cebe5315d154a3 (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.py29
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'))