def testSettingFeature(self): """ test that feature is set when item moves """ a = QgsTextAnnotation() a.setFrameSizeMm(QSizeF(300 / 3.7795275, 200 / 3.7795275)) a.setFrameOffsetFromReferencePointMm(QPointF(40 / 3.7795275, 50 / 3.7795275)) a.setHasFixedMapPosition(True) a.setMapPosition(QgsPointXY(12, 34)) a.setMapPositionCrs(QgsCoordinateReferenceSystem(4326)) canvas = QgsMapCanvas() canvas.setDestinationCrs(QgsCoordinateReferenceSystem(4326)) canvas.setFrameStyle(0) canvas.resize(600, 400) canvas.setExtent(QgsRectangle(10, 30, 20, 35)) i = QgsMapCanvasAnnotationItem(a, canvas) # NOQA layer = QgsVectorLayer("Point?crs=EPSG:4326&field=station:string&field=suburb:string", 'test', "memory") canvas.setLayers([layer]) f = QgsFeature(layer.fields()) f.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(14, 31))) f.setValid(True) f.setAttributes(['hurstbridge', 'somewhere']) self.assertTrue(layer.dataProvider().addFeatures([f])) a.setMapLayer(layer) self.assertFalse(a.associatedFeature().isValid()) a.setMapPosition(QgsPointXY(14, 31)) self.assertTrue(a.associatedFeature().isValid()) self.assertEqual(a.associatedFeature().attributes()[0], 'hurstbridge') a.setMapPosition(QgsPointXY(17, 31)) self.assertFalse(a.associatedFeature().isValid())
def testFillSymbol(self): """ test rendering an annotation with fill symbol""" a = QgsTextAnnotation() a.setFrameSizeMm(QSizeF(400 / 3.7795275, 250 / 3.7795275)) a.setHasFixedMapPosition(False) a.setFillSymbol(QgsFillSymbol.createSimple({'color': 'blue', 'width_border': '5', 'outline_color': 'black'})) im = self.renderAnnotation(a, QPointF(20, 30)) self.assertTrue(self.imageCheck('annotation_fillstyle', 'annotation_fillstyle', im))
def testTextAnnotationInLayout(self): """ test rendering a text annotation""" a = QgsTextAnnotation() a.fillSymbol().symbolLayer(0).setStrokeColor(QColor(0, 0, 0)) a.markerSymbol().symbolLayer(0).setStrokeColor(QColor(0, 0, 0)) a.setFrameSizeMm(QSizeF(300 / 3.7795275, 200 / 3.7795275)) a.setFrameOffsetFromReferencePointMm(QPointF(40 / 3.7795275, 50 / 3.7795275)) doc = QTextDocument() doc.setHtml('<p style="font-family: arial; font-weight: bold; font-size: 40px;">test annotation</p>') a.setDocument(doc) self.assertTrue(self.renderAnnotationInLayout('text_annotation_in_layout', a))
def _linetool_annotate_point(self, point, idx): annotation = QgsTextAnnotation() c = QTextDocument() html = "<strong>" + str(idx) + "</strong>" c.setHtml(html) annotation.setDocument(c) annotation.setFrameSizeMm(QSizeF(7, 5)) annotation.setFrameOffsetFromReferencePointMm(QPointF(1.3, 1.3)) annotation.setMapPosition(point) annotation.setMapPositionCrs(self.map_crs) return QgsMapCanvasAnnotationItem( annotation, self._iface.mapCanvas()).annotation()
def testTextAnnotation(self): """ test rendering a text annotation""" a = QgsTextAnnotation() a.fillSymbol().symbolLayer(0).setStrokeColor(QColor(0, 0, 0)) a.markerSymbol().symbolLayer(0).setStrokeColor(QColor(0, 0, 0)) a.setFrameSizeMm(QSizeF(300 / 3.7795275, 200 / 3.7795275)) a.setFrameOffsetFromReferencePointMm(QPointF(40 / 3.7795275, 50 / 3.7795275)) doc = QTextDocument() doc.setHtml('<p style="font-family: arial; font-weight: bold; font-size: 40px;">test annotation</p>') a.setDocument(doc) im = self.renderAnnotation(a, QPointF(20, 30)) self.assertTrue(self.imageCheck('text_annotation', 'text_annotation', im)) # check clone clone = a.clone() im = self.renderAnnotation(clone, QPointF(20, 30)) self.assertTrue(self.imageCheck('text_annotation', 'text_annotation', im))
def testSize(self): """ test that map canvas annotation item size is correct """ a = QgsTextAnnotation() a.setFrameSizeMm(QSizeF(300 / 3.7795275, 200 / 3.7795275)) a.setHasFixedMapPosition(False) a.setFillSymbol( QgsFillSymbol.createSimple({ 'color': 'blue', 'width_border': '0' })) canvas = QgsMapCanvas() canvas.setDestinationCrs(QgsCoordinateReferenceSystem(4326)) canvas.setFrameStyle(0) canvas.resize(600, 400) canvas.show() canvas.setExtent(QgsRectangle(10, 30, 20, 35)) i = QgsMapCanvasAnnotationItem(a, canvas) # ugly, but Travis has different default DPI: if 299 < i.boundingRect().width() < 301: self.assertAlmostEqual(i.boundingRect().width(), 300, 1) self.assertAlmostEqual(i.boundingRect().height(), 200, 1) a.setHasFixedMapPosition(True) a.setFrameOffsetFromReferencePoint(QPointF(0, 0)) self.assertAlmostEqual(i.boundingRect().width(), 300, -1) self.assertAlmostEqual(i.boundingRect().height(), 200, -1) a.setFrameOffsetFromReferencePoint(QPointF(10, 20)) self.assertAlmostEqual(i.boundingRect().width(), 310, -1) self.assertAlmostEqual(i.boundingRect().height(), 220, -1) else: self.assertAlmostEqual(i.boundingRect().width(), 312.5, 1) self.assertAlmostEqual(i.boundingRect().height(), 208.33, 1) a.setHasFixedMapPosition(True) a.setFrameOffsetFromReferencePoint(QPointF(0, 0)) self.assertAlmostEqual(i.boundingRect().width(), 312.5, -1) self.assertAlmostEqual(i.boundingRect().height(), 208.33, -1) a.setFrameOffsetFromReferencePoint(QPointF(10, 20)) self.assertAlmostEqual(i.boundingRect().width(), 322.91, -1) self.assertAlmostEqual(i.boundingRect().height(), 229.166, -1)
def testPosition(self): """ test that map canvas annotation item syncs position correctly """ a = QgsTextAnnotation() a.setFrameSizeMm(QSizeF(300 / 3.7795275, 200 / 3.7795275)) a.setFrameOffsetFromReferencePointMm( QPointF(40 / 3.7795275, 50 / 3.7795275)) a.setMapPosition(QgsPointXY(12, 34)) a.setMapPositionCrs(QgsCoordinateReferenceSystem(4326)) canvas = QgsMapCanvas() canvas.setDestinationCrs(QgsCoordinateReferenceSystem(4326)) canvas.setFrameStyle(0) canvas.resize(600, 400) canvas.show() canvas.setExtent(QgsRectangle(10, 30, 20, 35)) i = QgsMapCanvasAnnotationItem(a, canvas) self.assertEqual(canvas.width(), 600) self.assertEqual(canvas.height(), 400) # test that correct initial position is set self.assertAlmostEqual(i.pos().x(), 120, 1) self.assertAlmostEqual(i.pos().y(), 110, 1) # shift annotation map position, check that item is moved a.setMapPosition(QgsPointXY(14, 32)) self.assertAlmostEqual(i.pos().x(), 240, 1) self.assertAlmostEqual(i.pos().y(), 230, 1) # check relative position a.setHasFixedMapPosition(False) a.setRelativePosition(QPointF(0.8, 0.4)) self.assertAlmostEqual(i.pos().x(), 480, 1) self.assertAlmostEqual(i.pos().y(), 160, 1) # flicking between relative and fixed position a.setHasFixedMapPosition(True) self.assertAlmostEqual(i.pos().x(), 240, 1) self.assertAlmostEqual(i.pos().y(), 230, 1) a.setHasFixedMapPosition(False) self.assertAlmostEqual(i.pos().x(), 480, 1) self.assertAlmostEqual(i.pos().y(), 160, 1)
def testPosition(self): """ test that map canvas annotation item syncs position correctly """ a = QgsTextAnnotation() a.setFrameSizeMm(QSizeF(300 / 3.7795275, 200 / 3.7795275)) a.setFrameOffsetFromReferencePointMm(QPointF(40 / 3.7795275, 50 / 3.7795275)) a.setMapPosition(QgsPointXY(12, 34)) a.setMapPositionCrs(QgsCoordinateReferenceSystem(4326)) canvas = QgsMapCanvas() canvas.setDestinationCrs(QgsCoordinateReferenceSystem(4326)) canvas.setFrameStyle(0) canvas.resize(600, 400) canvas.show() canvas.setExtent(QgsRectangle(10, 30, 20, 35)) i = QgsMapCanvasAnnotationItem(a, canvas) self.assertEqual(canvas.width(), 600) self.assertEqual(canvas.height(), 400) # test that correct initial position is set self.assertAlmostEqual(i.pos().x(), 120, 1) self.assertAlmostEqual(i.pos().y(), 110, 1) # shift annotation map position, check that item is moved a.setMapPosition(QgsPointXY(14, 32)) self.assertAlmostEqual(i.pos().x(), 240, 1) self.assertAlmostEqual(i.pos().y(), 230, 1) # check relative position a.setHasFixedMapPosition(False) a.setRelativePosition(QPointF(0.8, 0.4)) self.assertAlmostEqual(i.pos().x(), 480, 1) self.assertAlmostEqual(i.pos().y(), 160, 1) # flicking between relative and fixed position a.setHasFixedMapPosition(True) self.assertAlmostEqual(i.pos().x(), 240, 1) self.assertAlmostEqual(i.pos().y(), 230, 1) a.setHasFixedMapPosition(False) self.assertAlmostEqual(i.pos().x(), 480, 1) self.assertAlmostEqual(i.pos().y(), 160, 1)
def testSize(self): """ test that map canvas annotation item size is correct """ a = QgsTextAnnotation() a.setFrameSizeMm(QSizeF(300 / 3.7795275, 200 / 3.7795275)) a.setHasFixedMapPosition(False) a.setFillSymbol(QgsFillSymbol.createSimple({'color': 'blue', 'width_border': '0'})) canvas = QgsMapCanvas() canvas.setDestinationCrs(QgsCoordinateReferenceSystem(4326)) canvas.setFrameStyle(0) canvas.resize(600, 400) canvas.show() canvas.setExtent(QgsRectangle(10, 30, 20, 35)) i = QgsMapCanvasAnnotationItem(a, canvas) # ugly, but Travis has different default DPI: if 299 < i.boundingRect().width() < 301: self.assertAlmostEqual(i.boundingRect().width(), 300, 1) self.assertAlmostEqual(i.boundingRect().height(), 200, 1) a.setHasFixedMapPosition(True) a.setFrameOffsetFromReferencePoint(QPointF(0, 0)) self.assertAlmostEqual(i.boundingRect().width(), 300, -1) self.assertAlmostEqual(i.boundingRect().height(), 200, -1) a.setFrameOffsetFromReferencePoint(QPointF(10, 20)) self.assertAlmostEqual(i.boundingRect().width(), 310, -1) self.assertAlmostEqual(i.boundingRect().height(), 220, -1) else: self.assertAlmostEqual(i.boundingRect().width(), 312.5, 1) self.assertAlmostEqual(i.boundingRect().height(), 208.33, 1) a.setHasFixedMapPosition(True) a.setFrameOffsetFromReferencePoint(QPointF(0, 0)) self.assertAlmostEqual(i.boundingRect().width(), 312.5, -1) self.assertAlmostEqual(i.boundingRect().height(), 208.33, -1) a.setFrameOffsetFromReferencePoint(QPointF(10, 20)) self.assertAlmostEqual(i.boundingRect().width(), 322.91, -1) self.assertAlmostEqual(i.boundingRect().height(), 229.166, -1)