Пример #1
0
    def testConvertToPainterUnitsNoMapToPixel(self):
        """
        Test converting map unit based sizes to painter units when render context has NO map to pixel set
        """
        r = QgsRenderContext()
        r.setScaleFactor(300 / 25.4)  # 300 dpi, to match above test

        # start with no min/max scale
        c = QgsMapUnitScale()

        # since we have no map scale to work with, this makes the gross assumption that map units == points. It's magic, but
        # what else can we do?
        size = r.convertToPainterUnits(10, QgsUnitTypes.RenderMapUnits, c)
        self.assertAlmostEqual(size, 41.66666, places=3)
        size = r.convertToPainterUnits(10, QgsUnitTypes.RenderMetersInMapUnits,
                                       c)
        self.assertAlmostEqual(size, 41.66666, places=3)

        # sizes should be clamped to reasonable range -- we don't want to treat 2000m map unit sizes as 10 million pixels!
        size = r.convertToPainterUnits(2000, QgsUnitTypes.RenderMapUnits, c)
        self.assertEqual(size, 100.0)
        size = r.convertToPainterUnits(2000,
                                       QgsUnitTypes.RenderMetersInMapUnits, c)
        self.assertEqual(size, 100.0)
        size = r.convertToPainterUnits(0.0002, QgsUnitTypes.RenderMapUnits, c)
        self.assertEqual(size, 10.0)
        size = r.convertToPainterUnits(0.0002,
                                       QgsUnitTypes.RenderMetersInMapUnits, c)
        self.assertEqual(size, 10.0)

        # normal units, should not be affected
        size = r.convertToPainterUnits(2, QgsUnitTypes.RenderMillimeters, c)
        self.assertAlmostEqual(size, 23.622047, places=5)
        size = r.convertToPainterUnits(2, QgsUnitTypes.RenderPoints, c)
        self.assertAlmostEqual(size, 8.33333333125, places=5)
        size = r.convertToPainterUnits(2, QgsUnitTypes.RenderInches, c)
        self.assertAlmostEqual(size, 600.0, places=5)
        size = r.convertToPainterUnits(2, QgsUnitTypes.RenderPixels, c)
        self.assertAlmostEqual(size, 2.0, places=5)

        # minimum size greater than the calculated size, so size should be limited to minSizeMM
        c.minSizeMM = 5
        c.minSizeMMEnabled = True
        size = r.convertToPainterUnits(2, QgsUnitTypes.RenderMapUnits, c)
        self.assertAlmostEqual(size, 59.0551181, places=5)

        # maximum size less than the calculated size, so size should be limited to maxSizeMM
        c.maxSizeMM = 6
        c.maxSizeMMEnabled = True
        size = r.convertToPainterUnits(26, QgsUnitTypes.RenderMapUnits, c)
        self.assertAlmostEqual(size, 70.866, places=2)