def testSaveRestore(self): p = QgsProject() l = QgsPrintLayout(p) p.layoutManager().addLayout(l) map = QgsLayoutItemMap(l) shape = QgsLayoutItemShape(l) l.addLayoutItem(map) l.addLayoutItem(shape) settings = map.itemClippingSettings() settings.setEnabled(True) settings.setFeatureClippingType( QgsMapClippingRegion.FeatureClippingType.NoClipping) settings.setForceLabelsInsideClipPath(True) settings.setSourceItem(shape) # save map to xml doc = QDomDocument("testdoc") elem = doc.createElement("test") self.assertTrue(map.writeXml(elem, doc, QgsReadWriteContext())) elem_shape = doc.createElement("shape") self.assertTrue(shape.writeXml(elem_shape, doc, QgsReadWriteContext())) layout2 = QgsPrintLayout(p) layout2.setName('test2') p.layoutManager().addLayout(layout2) map2 = QgsLayoutItemMap(layout2) layout2.addLayoutItem(map2) shape2 = QgsLayoutItemShape(layout2) layout2.addLayoutItem(shape2) self.assertFalse(map2.itemClippingSettings().enabled()) # restore from xml self.assertTrue( map2.readXml(elem.firstChildElement(), doc, QgsReadWriteContext())) self.assertTrue( shape2.readXml(elem_shape.firstChildElement(), doc, QgsReadWriteContext())) self.assertTrue(map2.itemClippingSettings().enabled()) self.assertEqual(map2.itemClippingSettings().featureClippingType(), QgsMapClippingRegion.FeatureClippingType.NoClipping) self.assertTrue( map2.itemClippingSettings().forceLabelsInsideClipPath()) self.assertIsNone(map2.itemClippingSettings().sourceItem()) map2.finalizeRestoreFromXml() self.assertEqual(map2.itemClippingSettings().sourceItem(), shape2)
def testBoundingRectForStrokeSizeOnRestore(self): """ Test that item bounding rect correctly accounts for stroke size on item restore """ pr = QgsProject() l = QgsLayout(pr) shape = QgsLayoutItemShape(l) shape.setShapeType(QgsLayoutItemShape.Rectangle) shape.attemptSetSceneRect(QRectF(30, 10, 100, 200)) self.assertEqual(shape.boundingRect(), QRectF(-0.15, -0.15, 100.3, 200.3)) # set a symbol with very wide stroke s = QgsFillSymbol.createSimple({ 'outline_color': '#ff0000', 'outline_width': '40', 'color': '#ff5588' }) shape.setSymbol(s) # bounding rect for item should include stroke self.assertEqual(shape.boundingRect(), QRectF(-20.0, -20.0, 140.0, 240.0)) # save the shape and restore doc = QDomDocument("testdoc") parent_elem = doc.createElement("test") doc.appendChild(parent_elem) self.assertTrue(shape.writeXml(parent_elem, doc, QgsReadWriteContext())) item_elem = parent_elem.firstChildElement("LayoutItem") self.assertFalse(item_elem.isNull()) # restore shape2 = QgsLayoutItemShape(l) self.assertTrue(shape2.readXml(item_elem, doc, QgsReadWriteContext())) # bounding rect for item should include stroke self.assertEqual(shape2.boundingRect(), QRectF(-20.0, -20.0, 140.0, 240.0))