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:
authorSergey Sharybin <sergey.vfx@gmail.com>2011-03-20 18:32:19 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2011-03-20 18:32:19 +0300
commita39e8e5fc1641ab003d4374a0a2649a0bfbe5b9f (patch)
tree4fe5cf24ea193d65b044edb783039b39b68e3cb3 /io_curve_svg
parent59bd26a246eca2eaa1016a0d2ce16badfc262117 (diff)
Fix #26555: SVG Import (stars wrong scale)
Transformation for non-container objects was applied twice when they were USEd. Get rid of confusing checks for special cases in USE.createGeom and use special flag (instancing) which tells geometry is it "normal" geometry creation or geometry creation initiated by USE node (SYMBOL would be handled differently int this two cases) Quick tests showed none regressions.
Diffstat (limited to 'io_curve_svg')
-rw-r--r--io_curve_svg/import_svg.py77
1 files changed, 32 insertions, 45 deletions
diff --git a/io_curve_svg/import_svg.py b/io_curve_svg/import_svg.py
index 565db959..c39f8efa 100644
--- a/io_curve_svg/import_svg.py
+++ b/io_curve_svg/import_svg.py
@@ -1022,7 +1022,7 @@ class SVGGeometry:
pass
- def _doCreateGeom(self):
+ def _doCreateGeom(self, instancing):
"""
Internal handler to create real geometries
"""
@@ -1041,7 +1041,7 @@ class SVGGeometry:
return None
- def createGeom(self):
+ def createGeom(self, instancing):
"""
Create real geometries
"""
@@ -1055,7 +1055,7 @@ class SVGGeometry:
if matrix is not None:
self._pushMatrix(matrix)
- self._doCreateGeom()
+ self._doCreateGeom(instancing)
if matrix is not None:
self._popMatrix()
@@ -1092,13 +1092,13 @@ class SVGGeometryContainer(SVGGeometry):
if ob is not None:
self._geometries.append(ob)
- def _doCreateGeom(self):
+ def _doCreateGeom(self, instancing):
"""
Create real geometries
"""
for geom in self._geometries:
- geom.createGeom()
+ geom.createGeom(instancing)
def getGeometries(self):
"""
@@ -1139,7 +1139,7 @@ class SVGGeometryPATH(SVGGeometry):
self._splines = pathParser.getSplines()
self._styles = SVGParseStyles(self._node, self._context)
- def _doCreateGeom(self):
+ def _doCreateGeom(self, instancing):
"""
Create real geometries
"""
@@ -1190,7 +1190,7 @@ class SVGGeometryDEFS(SVGGeometryContainer):
Container for referenced elements
"""
- def _doCreateGeom(self):
+ def createGeom(self, instancing):
"""
Create real geometries
"""
@@ -1203,12 +1203,26 @@ class SVGGeometrySYMBOL(SVGGeometryContainer):
Referenced element
"""
- def _doCreateGeom(self):
+ def _doCreateGeom(self, instancing):
"""
Create real geometries
"""
- pass
+ self._pushMatrix(self.getNodeMatrix())
+
+ super()._doCreateGeom(False)
+
+ self._popMatrix()
+
+ def createGeom(self, instancing):
+ """
+ Create real geometries
+ """
+
+ if not instancing:
+ return
+
+ super().createGeom(instancing)
class SVGGeometryG(SVGGeometryContainer):
@@ -1224,7 +1238,7 @@ class SVGGeometryUSE(SVGGeometry):
User of referenced elements
"""
- def _doCreateGeom(self):
+ def _doCreateGeom(self, instancing):
"""
Create real geometries
"""
@@ -1239,34 +1253,7 @@ class SVGGeometryUSE(SVGGeometry):
self._pushMatrix(self.getNodeMatrix())
- geomMatrix = None
- nodeMatrix = None
-
- if not isinstance(geom, SVGGeometryUSE):
- geomMatrix = geom.getTransformMatrix()
-
- if isinstance(geom, SVGGeometrySYMBOL):
- nodeMatrix = geom.getNodeMatrix()
-
- if nodeMatrix:
- self._pushMatrix(nodeMatrix)
-
- if geomMatrix:
- self._pushMatrix(geomMatrix)
-
- if isinstance(geom, SVGGeometryContainer):
- geometries = geom.getGeometries()
- else:
- geometries = [geom]
-
- for g in geometries:
- g.createGeom()
-
- if geomMatrix:
- self._popMatrix()
-
- if nodeMatrix:
- self._popMatrix()
+ geom.createGeom(True)
self._popMatrix()
@@ -1345,7 +1332,7 @@ class SVGGeometryRECT(SVGGeometry):
bezt.handle_left_type = 'VECTOR'
bezt.handle_right_type = 'VECTOR'
- def _doCreateGeom(self):
+ def _doCreateGeom(self, instancing):
"""
Create real geometries
"""
@@ -1467,7 +1454,7 @@ class SVGGeometryELLIPSE(SVGGeometry):
self._rx = self._node.getAttribute('rx') or '0'
self._ry = self._node.getAttribute('ry') or '0'
- def _doCreateGeom(self):
+ def _doCreateGeom(self, instancing):
"""
Create real geometries
"""
@@ -1585,7 +1572,7 @@ class SVGGeometryLINE(SVGGeometry):
self._x2 = self._node.getAttribute('x2') or '0'
self._y2 = self._node.getAttribute('y2') or '0'
- def _doCreateGeom(self):
+ def _doCreateGeom(self, instancing):
"""
Create real geometries
"""
@@ -1666,7 +1653,7 @@ class SVGGeometryPOLY(SVGGeometry):
self._points.append((float(prev), float(p)))
prev = None
- def _doCreateGeom(self):
+ def _doCreateGeom(self, instancing):
"""
Create real geometries
"""
@@ -1728,7 +1715,7 @@ class SVGGeometrySVG(SVGGeometryContainer):
Main geometry holder
"""
- def _doCreateGeom(self):
+ def _doCreateGeom(self, instancing):
"""
Create real geometries
"""
@@ -1738,7 +1725,7 @@ class SVGGeometrySVG(SVGGeometryContainer):
self._pushMatrix(self.getNodeMatrix())
self._pushRect(rect)
- super()._doCreateGeom()
+ super()._doCreateGeom(False)
self._popRect()
self._popMatrix()
@@ -1824,7 +1811,7 @@ def load_svg(filepath):
loader = SVGLoader(filepath)
loader.parse()
- loader.createGeom()
+ loader.createGeom(False)
def load(operator, context, filepath=""):