Exemplo n.º 1
0
 def test_add_transform(self):
     """Test add_TRANSFORM syntax for quickly composing known transforms"""
     tr1 = Transform()
     tr1.add_scale(5.0, 1.0)
     self.assertEqual(str(tr1), 'scale(5, 1)')
     tr1.add_translate(10, 10)
     self.assertEqual(str(tr1), 'matrix(5 0 0 1 50 10)')
Exemplo n.º 2
0
 def test_update_consistant(self):
     """Update doesn't keep callbacks around"""
     elem = self.svg.getElementById('D')
     tr_a = Transform(translate=(10, 10))
     tr_b = Transform(translate=(-20, 15))
     elem.transform = tr_a
     elem.transform = tr_b
     self.assertEqual(str(elem.transform), 'translate(-20, 15)')
     tr_a.add_translate(10, 10)
     self.assertEqual(str(elem.transform), 'translate(-20, 15)')
     elem.set('transform', None)
     self.assertEqual(elem.get('transform'), None)
Exemplo n.º 3
0
    def test_transformation(self):
        t = Transform(matrix=((1, 2, 3), (4, 5, 6)))

        first = Vector2d()
        prev = Vector2d(31, 97)
        prev_prev = Vector2d(5, 7)

        for Cmd in (Line, Move, Curve, Smooth, Quadratic, TepidQuadratic, Arc):
            random_seg = self.get_random_cmd(Cmd)
            self.assertTrue(random_seg.transform(t)
                            is not random_seg)  # transform returns copy
            self.assertEqual(
                random_seg.transform(t).name,
                Cmd.name)  # transform does not change Command type

            T = Transform()
            T.add_translate(10, 20)
            A = [
                T.apply_to_point(p)
                for p in random_seg.control_points(first, prev, prev_prev)
            ]
            first2, prev2, prev_prev2 = (T.apply_to_point(p)
                                         for p in (first, prev, prev_prev))
            B = list(
                random_seg.translate(Vector2d(10, 20)).control_points(
                    first2, prev2, prev_prev2))
            self.assertAlmostTuple(A, B)

            T = Transform()
            T.add_scale(10, 20)
            A = [
                T.apply_to_point(p)
                for p in random_seg.control_points(first, prev, prev_prev)
            ]
            first2, prev2, prev_prev2 = (T.apply_to_point(p)
                                         for p in (first, prev, prev_prev))
            B = list(
                random_seg.scale(
                    (10, 20)).control_points(first2, prev2, prev_prev2))
            self.assertAlmostTuple(A, B)

            T = Transform()
            T.add_rotate(35, 15, 28)
            A = [
                T.apply_to_point(p)
                for p in random_seg.control_points(first, prev, prev_prev)
            ]
            first2, prev2, prev_prev2 = (T.apply_to_point(p)
                                         for p in (first, prev, prev_prev))
            B = list(
                random_seg.rotate(35, Vector2d(15, 28)).control_points(
                    first2, prev2, prev_prev2))
            self.assertAlmostTuple(A, B)
    def effect(self):

        opt = self.options

        if not opt.placeholderid:
            raise inkex.AbortExtension('Please enter the placeholder ID')
        elif not opt.qrcodeid:
            raise inkex.AbortExtension('Please enter the QRCode ID')

        placeholder = self.svg.getElementById(opt.placeholderid)
        qrcode = self.svg.getElementById(opt.qrcodeid)

        if placeholder is None or qrcode is None:
            # Delete the generated qrcode
            qrcode.getparent().remove(qrcode)
            return

        # Reset scale before processing
        qrcode.set('transform', 'scale(1,1)')

        # Get scaling factors
        scalex = placeholder.bounding_box().width  / qrcode.bounding_box().width
        scaley = placeholder.bounding_box().height / qrcode.bounding_box().height

        # Apply scaling and translating
        tr = Transform()
        tr.add_translate(placeholder.bounding_box().left, placeholder.bounding_box().top)
        qrcode.set('transform', tr)
        tr.add_scale(scalex, scaley)
        qrcode.set('transform', tr)

        # Move qrcode inplace of the placeholder
        placeholder.getparent().append(qrcode)

        # Delete the placeholder
        placeholder.getparent().remove(placeholder)