def testSnapPointsToGrid(self): p = QgsProject() l = QgsLayout(p) # need a page to snap to grid page = QgsLayoutItemPage(l) page.setPageSize('A4') l.pageCollection().addPage(page) s = QgsLayoutSnapper(l) l.gridSettings().setResolution(QgsLayoutMeasurement(5, QgsUnitTypes.LayoutMillimeters)) s.setSnapToGrid(True) s.setSnapTolerance(1) delta, snappedX, snappedY = s.snapPointsToGrid([QPointF(1, 0.5)], 1) self.assertTrue(snappedX) self.assertTrue(snappedY) self.assertEqual(delta, QPointF(-1, -0.5)) point, snappedX, snappedY = s.snapPointsToGrid([QPointF(9, 2), QPointF(12, 6)], 1) self.assertTrue(snappedX) self.assertTrue(snappedY) self.assertEqual(point, QPointF(1, -1)) point, snappedX, snappedY = s.snapPointsToGrid([QPointF(9, 2), QPointF(12, 7)], 1) self.assertTrue(snappedX) self.assertFalse(snappedY) self.assertEqual(point, QPointF(1, 0)) point, snappedX, snappedY = s.snapPointsToGrid([QPointF(8, 2), QPointF(12, 6)], 1) self.assertFalse(snappedX) self.assertTrue(snappedY) self.assertEqual(point, QPointF(0, -1)) # grid disabled s.setSnapToGrid(False) point, snappedX, snappedY = s.snapPointsToGrid([QPointF(1, 1)], 1) self.assertFalse(snappedX) self.assertFalse(snappedY) self.assertEqual(point, QPointF(0, 0)) s.setSnapToGrid(True) # with different pixel scale point, snappedX, snappedY = s.snapPointsToGrid([QPointF(0.5, 0.5)], 1) self.assertTrue(snappedX) self.assertTrue(snappedY) self.assertEqual(point, QPointF(-.5, -.5)) point, snappedX, snappedY = s.snapPointsToGrid([QPointF(0.5, 0.5)], 3) self.assertFalse(snappedX) self.assertFalse(snappedY) self.assertEqual(point, QPointF(0, 0)) # with offset grid l.gridSettings().setOffset(QgsLayoutPoint(2, 0)) point, snappedX, snappedY = s.snapPointsToGrid([QPointF(13, 23)], 1) self.assertTrue(snappedX) self.assertFalse(snappedY) self.assertEqual(point, QPointF(-1, 0))