diff --git a/measure.py b/measure.py index 56bb89baebee46a7ba60364d565f4fdcc5615a4d..5dd8d26ce382d797422b5d1a08aa1179f4bd9567 100755 --- a/measure.py +++ b/measure.py @@ -72,8 +72,12 @@ class MeasureLength(inkex.EffectExtension): factor *= scale / self.svg.unittouu('1' + self.options.unit) # loop over all selected paths - for node in self.svg.selection.filter(inkex.PathElement): + filtered = self.svg.selection.filter(inkex.PathElement) + if not filtered: + raise inkex.AbortExtension("Please select at least one path object.") + for node in filtered: csp = node.path.transform(node.composed_transform()).to_superpath() + inverse_parent_transform = - node.getparent().composed_transform() if self.options.mtype == "length": slengths, stotal = csplength(csp) self.group = node.getparent().add(TextElement()) @@ -88,9 +92,11 @@ class MeasureLength(inkex.EffectExtension): self.group = node.getparent().add(inkex.PathElement()) self.group.set('id', 'MassCenter_' + node.get('id')) self.add_cross(self.group, xc, yc, scale) + self.group.transform = inverse_parent_transform continue # Format the length as string val = round(stotal * factor * self.options.scale, prec) + # Transform the result back self.options.method(node, str(val)) def method_textonpath(self, node, lenstr): @@ -109,7 +115,7 @@ class MeasureLength(inkex.EffectExtension): tx, ty = cspcofm(csp) anchor = 'middle' elif self.options.position == "center": - bbox = node.bounding_box() + bbox = node.bounding_box(True) tx, ty = bbox.center anchor = 'middle' else: # default @@ -190,6 +196,7 @@ class MeasureLength(inkex.EffectExtension): node.set('x', str(x)) node.set('y', str(y)) node.set('transform', 'rotate(%s, %s, %s)' % (angle, x, y)) + node.transform = - node.getparent().composed_transform() * node.transform if __name__ == '__main__': MeasureLength().run() diff --git a/path_number_nodes.py b/path_number_nodes.py index 06e9b95671f1270cb2b70e8b13ff404e11dbb14f..76e69cf5e2caed05adced7438c743627c8a140c8 100755 --- a/path_number_nodes.py +++ b/path_number_nodes.py @@ -32,9 +32,10 @@ class NumberNodes(inkex.EffectExtension): pars.add_argument("--tab", help="The selected UI-tab when OK was pressed") def effect(self): - if not self.svg.selected: - raise inkex.AbortExtension("Please select an object.") - for node in self.svg.selection.filter(inkex.PathElement): + filtered = self.svg.selection.filter(inkex.PathElement) + if not filtered: + raise inkex.AbortExtension("Please select at least one path object.") + for node in filtered: self.add_dot(node) def add_dot(self, node): @@ -42,11 +43,12 @@ class NumberNodes(inkex.EffectExtension): group = node.getparent().add(inkex.Group()) dot_group = group.add(inkex.Group()) num_group = group.add(inkex.Group()) - group.transform = node.transform + path_trans_applied = node.path.transform(node.composed_transform()) + group.transform = - node.getparent().composed_transform() style = inkex.Style({'stroke': 'none', 'fill': '#000'}) - for step, (x, y) in enumerate(node.path.end_points): + for step, (x, y) in enumerate(path_trans_applied.end_points): circle = dot_group.add(Circle(cx=str(x), cy=str(y),\ r=str(self.svg.unittouu(self.options.dotsize) / 2))) circle.style = style diff --git a/tests/data/refs/measure__--method__presets__--presetFormat__FT_start__--id__D.out b/tests/data/refs/measure__--method__presets__--presetFormat__FT_start__--id__D.out new file mode 100644 index 0000000000000000000000000000000000000000..09774b9365134dab99ce1146d2b5510b9e9d1162 --- /dev/null +++ b/tests/data/refs/measure__--method__presets__--presetFormat__FT_start__--id__D.out @@ -0,0 +1,34 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + 54.15 mm + + + + + + + + \ No newline at end of file diff --git a/tests/data/refs/measure__--method__presets__--presetFormat__TaP_start__--id__D.out b/tests/data/refs/measure__--method__presets__--presetFormat__TaP_start__--id__D.out new file mode 100644 index 0000000000000000000000000000000000000000..a21eb634f9e9645ddbd389dc005aa4eb04662423 --- /dev/null +++ b/tests/data/refs/measure__--method__presets__--presetFormat__TaP_start__--id__D.out @@ -0,0 +1,34 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + 54.15 mm + + + + + + + + \ No newline at end of file diff --git a/tests/data/refs/measure__--type__cofm__--id__D.out b/tests/data/refs/measure__--type__cofm__--id__D.out new file mode 100644 index 0000000000000000000000000000000000000000..6779ab0053dd7ab107d0a3436828778fe2cf2394 --- /dev/null +++ b/tests/data/refs/measure__--type__cofm__--id__D.out @@ -0,0 +1,34 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/data/refs/path_number_nodes__--id__D.out b/tests/data/refs/path_number_nodes__--id__D.out new file mode 100644 index 0000000000000000000000000000000000000000..ab2102a27629b8d47dc8da43df27dd9df97f4094 --- /dev/null +++ b/tests/data/refs/path_number_nodes__--id__D.out @@ -0,0 +1,33 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + 1234567 + + + + + + + + \ No newline at end of file diff --git a/tests/test_measure.py b/tests/test_measure.py index 4e0f7dda05a36296d5ea8b88a2166dd9c242cb88..7d4671ae49eb50e04800c4912c4d50af2a12e954 100644 --- a/tests/test_measure.py +++ b/tests/test_measure.py @@ -1,4 +1,5 @@ # coding=utf-8 +from inkex.utils import filename_arg from measure import MeasureLength from inkex.tester import ComparisonMixin, TestCase from inkex.tester.filters import CompareNumericFuzzy @@ -16,3 +17,13 @@ class LengthBasicTest(ComparisonMixin, TestCase): ('--type=area', '--id=p1'), ('--type=cofm', '--id=c3'), ] + +class LengthComplexTransformTest(ComparisonMixin, TestCase): + effect_class = MeasureLength + compare_filters = [CompareNumericFuzzy()] + compare_file = "svg/complextransform.test.svg" + comparisons = [ + ('--method=presets', '--presetFormat=TaP_start', '--id=D'), + ('--method=presets', '--presetFormat=FT_start', '--id=D'), + ('--type=cofm', '--id=D'), + ] diff --git a/tests/test_path_number_nodes.py b/tests/test_path_number_nodes.py index e1a4fd1930f7e3ce70ef84d0e015d6c0382dd6c3..6af6a2571525a60321019d6047dc74febde7b57a 100644 --- a/tests/test_path_number_nodes.py +++ b/tests/test_path_number_nodes.py @@ -5,3 +5,11 @@ from inkex.tester import ComparisonMixin, TestCase class NumberNodesTest(ComparisonMixin, TestCase): effect_class = NumberNodes comparisons = [('--id=p1', '--id=r3')] + +class LengthComplexTransformTest(ComparisonMixin, TestCase): + effect_class = NumberNodes + compare_file = "svg/complextransform.test.svg" + comparisons = [ + ['--id=D'] + ] +