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)')
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)