def testScaleSafe(self): """ test scaleSafe method """ view = QgsLayoutView() view.fitInView(QRectF(0, 0, 10, 10)) scale = view.transform().m11() view.scaleSafe(2) self.assertAlmostEqual(view.transform().m11(), 2) view.scaleSafe(4) self.assertAlmostEqual(view.transform().m11(), 8) # try to zoom in heaps view.scaleSafe(99999999) # assume we have hit the limit scale = view.transform().m11() view.scaleSafe(2) self.assertAlmostEqual(view.transform().m11(), scale) view.setTransform(QTransform.fromScale(1, 1)) self.assertAlmostEqual(view.transform().m11(), 1) # test zooming out view.scaleSafe(0.5) self.assertAlmostEqual(view.transform().m11(), 0.5) view.scaleSafe(0.1) self.assertAlmostEqual(view.transform().m11(), 0.05) # try zooming out heaps view.scaleSafe(0.000000001) # assume we have hit the limit scale = view.transform().m11() view.scaleSafe(0.5) self.assertAlmostEqual(view.transform().m11(), scale)
def scale(self, obj, srcpos, dstpos): cent = QgsGeometry().fromPointXY(QgsPointXY(0, 0)) srclen = cent.distance(srcpos) dstlen = cent.distance(dstpos) ratio = (dstlen / srclen) * 1.5 # 「1.5」は適当 obj.transform(QTransform(ratio, 0, 0, ratio, 0, 0)) return obj
def rotate(self, obj, srcpos, dstpos): centroid = self.nearobj.centroid().asPoint() theta = self.radian(centroid, dstpos) sin = math.sin(theta) cos = math.cos(theta) obj.transform(QTransform(cos, sin, -sin, cos, 0, 0)) return obj
def trans(self, obj, srcpos, dstpos): x = dstpos.x() - srcpos.x() y = dstpos.y() - srcpos.y() obj.transform(QTransform(1, 0, 0, 1, x, y)) return obj