Ejemplo n.º 1
0
    def test_inline_transformations(self):
        path = Path()
        self.assertTrue(path is not path.translate(10, 20))
        self.assertTrue(path is not path.transform(Transform(scale=10)))
        self.assertTrue(path is not path.rotate(10))
        self.assertTrue(path is not path.scale(10, 20))

        self.assertTrue(path is path.translate(10, 20, inplace=True))
        self.assertTrue(
            path is path.transform(Transform(scale=10), inplace=True))
        self.assertTrue(path is path.rotate(10, inplace=True))
        self.assertTrue(path is path.scale(10, 20, inplace=True))
Ejemplo n.º 2
0
 def test_transform(self):
     """Transform by a whole matrix"""
     ret = Path("M 100 100 L 110 120 L 140 140 L 300 300")
     ret = ret.transform(Transform(translate=(10, 10)))
     self.assertEqual(str(ret), 'M 110 110 L 120 130 L 150 150 L 310 310')
     ret = ret.transform(Transform(translate=(-10, -10)))
     self.assertEqual(str(ret), 'M 100 100 L 110 120 L 140 140 L 300 300')
     ret = Path('M 5 5 H 10 V 15')
     ret = ret.transform(Transform(rotate=-10))
     self.assertEqual(
         'M 5.79228 4.0558 '
         'L 10.7163 3.18756 '
         'L 12.4528 13.0356', str(ret))
     ret = Path("M 10 10 A 50,50 0 0 1 85.355333,85.355341 L 100 0")
     ret = ret.transform(Transform(scale=10))
     self.assertEqual(str(ret),
                      'M 100 100 A 500 500 0 0 1 853.553 853.553 L 1000 0')
     self.assertRaises(ValueError, Horz([10]).transform, Transform())
Ejemplo n.º 3
0
    def test_transformation_preserve_type(self):
        import re
        paths = [
            "M 10 10 A 100 100 0 1 0 100 100 C 10 15 20 20 5 5 Z",
            "m 10 10 a 100 100 0 1 0 100 100 c 10 15 20 20 5 5 z",
            "m 10 10 l 100 200 L 20 30 C 10 20 30 40 11 12",
            "M 10 10 Q 12 13 14 15 T 11 32 T 32 11",
            "m 10 10 q 12 13 14 15 t 11 32 t 32 11",
        ]
        t = Transform(matrix=((1, 2, 3), (4, 5, 6)))
        for path_str in paths:
            path = Path(path_str)
            new_path = path.transform(t)
            cmds = "".join([cmd.letter for cmd in new_path])
            expected = re.sub(r"\d|\s|,", "", path_str)

            self.assertEqual(expected, cmds)
            self.assertAlmostTuple(
                [t.apply_to_point(p) for p in path.control_points],
                list(new_path.control_points))
Ejemplo n.º 4
0
    def effect(self):
        for node in self.svg.selection.filter(inkex.PathElement):
            result = Path()
            prev = Vector2d()
            start = None
            for seg in node.path.to_absolute():
                if start is None:
                    start = seg.end_point(start, prev)
                if isinstance(seg, Curve):
                    result += [
                        Move(seg.x2, seg.y2),
                        Line(prev.x, prev.y),
                        Move(seg.x3, seg.y3),
                        Line(seg.x4, seg.y4),
                    ]
                elif isinstance(seg, Quadratic):
                    result += [
                        Move(seg.x2, seg.y2),
                        Line(prev.x, prev.y),
                        Move(seg.x2, seg.y2),
                        Line(seg.x3, seg.y3)
                    ]
                prev = seg.end_point(start, prev)

            if not result:
                continue

            elem = node.getparent().add(inkex.PathElement())
            elem.path = result.transform(node.transform)
            elem.style = {
                'stroke-linejoin': 'miter',
                'stroke-width': '1.0px',
                'stroke-opacity': '1.0',
                'fill-opacity': '1.0',
                'stroke': '#000000',
                'stroke-linecap': 'butt',
                'fill': 'none'
            }