From e58444dc792cac70b8244e43b38b266aad7dd743 Mon Sep 17 00:00:00 2001 From: Jonathan Neuhauser Date: Sun, 20 Feb 2022 23:52:52 +0100 Subject: [PATCH] Lindenmayer: correct coordinate system --- inkex/turtle.py | 22 ++++++---- tests/data/refs/lindenmayer.out | 2 +- ...order__3__--langle__120__--rangle__120.out | 41 +++++++++++++++++++ ...--order__1__--langle__60__--rangle__60.out | 41 +++++++++++++++++++ tests/test_lindenmayer.py | 17 +++++++- 5 files changed, 112 insertions(+), 11 deletions(-) create mode 100644 tests/data/refs/lindenmayer__--rules__F__F-E__F__E-F__E__EE__--axiom__F-E-E__--order__3__--langle__120__--rangle__120.out create mode 100644 tests/data/refs/lindenmayer__--rules__F__F__F--F__F__--axiom__F__--order__1__--langle__60__--rangle__60.out diff --git a/inkex/turtle.py b/inkex/turtle.py index 10946759..8913b17f 100644 --- a/inkex/turtle.py +++ b/inkex/turtle.py @@ -57,13 +57,19 @@ class PathTurtle: ) def right(self, deg): - """Rotate turtle right by deg degrees.""" - self.__heading -= deg + """Rotate turtle right by deg degrees. - def left(self, deg): - """Rotate turtle left by deg degrees.""" + Changed in inkex 1.2: The turtle now rotates right (previously left) when calling this + method.""" self.__heading += deg + def left(self, deg): + """Rotate turtle left by deg degrees. + + Changed in inkex 1.2: The turtle now rotates left (previously right) when calling this + method.""" + self.__heading -= deg + def penup(self): """Enable non-drawing / moving mode""" self.__draw = False @@ -130,13 +136,13 @@ class PathTurtle: return self.fd(size) turn = random.uniform(20, 40) - self.lt(turn) - self.rtree(size * random.uniform(0.5, 0.9), minimum, pt) - self.rt(turn) - turn = random.uniform(20, 40) self.rt(turn) self.rtree(size * random.uniform(0.5, 0.9), minimum, pt) self.lt(turn) + turn = random.uniform(20, 40) + self.lt(turn) + self.rtree(size * random.uniform(0.5, 0.9), minimum, pt) + self.rt(turn) if pt: self.pu() self.bk(size) diff --git a/tests/data/refs/lindenmayer.out b/tests/data/refs/lindenmayer.out index 8c2ec7d0..ca0de7e2 100644 --- a/tests/data/refs/lindenmayer.out +++ b/tests/data/refs/lindenmayer.out @@ -14,7 +14,7 @@ dpi: 96 layout-disposition: bg-el-norepeat layout-position-anchor: tl - + diff --git a/tests/data/refs/lindenmayer__--rules__F__F-E__F__E-F__E__EE__--axiom__F-E-E__--order__3__--langle__120__--rangle__120.out b/tests/data/refs/lindenmayer__--rules__F__F-E__F__E-F__E__EE__--axiom__F-E-E__--order__3__--langle__120__--rangle__120.out new file mode 100644 index 00000000..8c2852ab --- /dev/null +++ b/tests/data/refs/lindenmayer__--rules__F__F-E__F__E-F__E__EE__--axiom__F-E-E__--order__3__--langle__120__--rangle__120.out @@ -0,0 +1,41 @@ + + + + + + + + + + + + format: png +dpi: 96 +layout-disposition: bg-el-norepeat +layout-position-anchor: tl + + + + + + + + + + + + + Hello World + flow text which wraps UPPER + Multi linetextFOO + + Grouped + text + + + + + + + \ No newline at end of file diff --git a/tests/data/refs/lindenmayer__--rules__F__F__F--F__F__--axiom__F__--order__1__--langle__60__--rangle__60.out b/tests/data/refs/lindenmayer__--rules__F__F__F--F__F__--axiom__F__--order__1__--langle__60__--rangle__60.out new file mode 100644 index 00000000..d0526d38 --- /dev/null +++ b/tests/data/refs/lindenmayer__--rules__F__F__F--F__F__--axiom__F__--order__1__--langle__60__--rangle__60.out @@ -0,0 +1,41 @@ + + + + + + + + + + + + format: png +dpi: 96 +layout-disposition: bg-el-norepeat +layout-position-anchor: tl + + + + + + + + + + + + + Hello World + flow text which wraps UPPER + Multi linetextFOO + + Grouped + text + + + + + + + \ No newline at end of file diff --git a/tests/test_lindenmayer.py b/tests/test_lindenmayer.py index 7ae54a37..2c71b3b8 100644 --- a/tests/test_lindenmayer.py +++ b/tests/test_lindenmayer.py @@ -1,9 +1,22 @@ # coding=utf-8 from lindenmayer import Lindenmayer from inkex.tester import ComparisonMixin, TestCase -from inkex.tester.filters import CompareOrderIndependentStyle +from inkex.tester.filters import CompareOrderIndependentStyle, CompareWithPathSpace class LSystemBasicTest(ComparisonMixin, TestCase): effect_class = Lindenmayer - compare_filters = [CompareOrderIndependentStyle()] + compare_filters = [CompareOrderIndependentStyle(), CompareWithPathSpace()] + comparisons = [ + (), + # left-looking Koch snowflake (one iteration) + ("--rules=F=F+F--F+F", "--axiom=F", "--order=1", "--langle=60", "--rangle=60"), + # test multiple rules: right pointing Sierpinski triangle + ( + "--rules=F=F-E+F+E-F;E=EE", + "--axiom=F-E-E", + "--order=3", + "--langle=120", + "--rangle=120", + ), + ] -- GitLab