17#include "moc_qgscreateannotationitemmaptool_impl.cpp" 
   42#include <QImageReader> 
   53  mToolName = tr( 
"Annotation tool" );
 
  100  setUseSnappingIndicator( 
true );
 
  107  if ( event->button() != Qt::LeftButton )
 
  112  auto createdItem = std::make_unique<QgsAnnotationPointTextItem>( tr( 
"Text" ), layerPoint );
 
  113  createdItem->setAlignment( Qt::AlignLeft );
 
  117  createdItem->setFormat( format );
 
  119  createdItem->setUseSymbologyReferenceScale( 
true );
 
  120  createdItem->setSymbologyReferenceScale( 
canvas()->scale() );
 
  147  if ( event->button() != Qt::LeftButton )
 
  151  auto createdItem = std::make_unique<QgsAnnotationMarkerItem>( 
QgsPoint( layerPoint ) );
 
  156  createdItem->setSymbol( markerSymbol.release() );
 
  159  createdItem->setSymbologyReferenceScale( 
canvas()->
scale() );
 
  178void QgsCreateLineItemMapTool::lineCaptured( 
const QgsCurve *line )
 
  185  if ( qgsgeometry_cast<QgsCurve *>( geometry.get() ) )
 
  187    auto createdItem = std::make_unique<QgsAnnotationLineItem>( qgsgeometry_cast<QgsCurve *>( geometry.release() ) );
 
  192    createdItem->setSymbol( lineSymbol.release() );
 
  195    createdItem->setSymbologyReferenceScale( 
canvas()->
scale() );
 
  211void QgsCreatePolygonItemMapTool::polygonCaptured( 
const QgsCurvePolygon *polygon )
 
  217  if ( qgsgeometry_cast<QgsCurve *>( geometry.get() ) )
 
  219    auto newPolygon = std::make_unique<QgsCurvePolygon>();
 
  220    newPolygon->setExteriorRing( qgsgeometry_cast<QgsCurve *>( geometry.release() ) );
 
  221    auto createdItem = std::make_unique<QgsAnnotationPolygonItem>( newPolygon.release() );
 
  226    createdItem->setSymbol( fillSymbol.release() );
 
  229    createdItem->setSymbologyReferenceScale( 
canvas()->
scale() );
 
  246  setUseSnappingIndicator( 
true );
 
  251  if ( event->button() == Qt::RightButton && mRubberBand )
 
  258  if ( event->button() != Qt::LeftButton )
 
  263    mFirstPoint = 
event->snapPoint();
 
  264    mRect.setRect( mFirstPoint.
x(), mFirstPoint.
y(), mFirstPoint.
x(), mFirstPoint.
y() );
 
  271    color.setAlphaF( color.alphaF() * alphaScale );
 
  282    QStringList formatsFilter;
 
  283    formatsFilter.append( QStringLiteral( 
"*.svg" ) );
 
  284    const QByteArrayList supportedFormats = QImageReader::supportedImageFormats();
 
  285    for ( 
const auto &format : supportedFormats )
 
  287      formatsFilter.append( QString( QStringLiteral( 
"*.%1" ) ).arg( QString( format ) ) );
 
  289    const QString dialogFilter = QStringLiteral( 
"%1 (%2);;%3 (*.*)" ).arg( tr( 
"Images" ), formatsFilter.join( QLatin1Char( 
' ' ) ), tr( 
"All files" ) );
 
  291    const QString imagePath = QFileDialog::getOpenFileName( 
nullptr, tr( 
"Add Picture Annotation" ), initialDir.isEmpty() ? QDir::homePath() : initialDir, dialogFilter );
 
  293    if ( imagePath.isEmpty() )
 
  305    const double initialWidthPixels = std::abs( devicePoint1.
x() - devicePoint2.
x() );
 
  306    const double initialHeightPixels = std::abs( devicePoint1.
y() - devicePoint2.
y() );
 
  308    const QFileInfo pathInfo( imagePath );
 
  312    if ( pathInfo.suffix().compare( QLatin1String( 
"svg" ), Qt::CaseInsensitive ) == 0 )
 
  325    auto createdItem = std::make_unique<QgsAnnotationPictureItem>( format, imagePath, 
QgsRectangle( point1, point2 ) );
 
  326    if ( size.isValid() )
 
  328      const double pixelsToMm = 
mCanvas->mapSettings().outputDpi() / 25.4;
 
  329      if ( size.width() / size.height() > initialWidthPixels / initialHeightPixels )
 
  331        createdItem->setFixedSize( QSizeF( initialWidthPixels / pixelsToMm, size.height() / size.width() * initialWidthPixels / pixelsToMm ) );
 
  335        createdItem->setFixedSize( QSizeF( size.width() / size.height() * initialHeightPixels / pixelsToMm, initialHeightPixels / pixelsToMm ) );
 
  349  const QgsPointXY mapPoint = 
event->snapPoint();
 
  350  mRect.setBottomRight( mapPoint.
toQPointF() );
 
  353  mRubberBand->
addPoint( mRect.bottomLeft(), 
false );
 
  354  mRubberBand->
addPoint( mRect.bottomRight(), 
false );
 
  355  mRubberBand->
addPoint( mRect.topRight(), 
false );
 
  356  mRubberBand->
addPoint( mRect.topLeft(), 
true );
 
  361  if ( event->key() == Qt::Key_Escape )
 
  391  setUseSnappingIndicator( 
true );
 
  396  if ( event->button() == Qt::RightButton && mRubberBand )
 
  403  if ( event->button() != Qt::LeftButton )
 
  408    mFirstPoint = 
event->snapPoint();
 
  409    mRect.setRect( mFirstPoint.
x(), mFirstPoint.
y(), mFirstPoint.
x(), mFirstPoint.
y() );
 
  416    color.setAlphaF( color.alphaF() * alphaScale );
 
  432    auto createdItem = std::make_unique<QgsAnnotationRectangleTextItem>( tr( 
"Text" ), 
QgsRectangle( point1, point2 ) );
 
  437    createdItem->setFormat( format );
 
  440    createdItem->setUseSymbologyReferenceScale( 
true );
 
  441    createdItem->setSymbologyReferenceScale( 
canvas()->scale() );
 
  451  const QgsPointXY mapPoint = 
event->snapPoint();
 
  452  mRect.setBottomRight( mapPoint.
toQPointF() );
 
  455  mRubberBand->
addPoint( mRect.bottomLeft(), 
false );
 
  456  mRubberBand->
addPoint( mRect.bottomRight(), 
false );
 
  457  mRubberBand->
addPoint( mRect.topRight(), 
false );
 
  458  mRubberBand->
addPoint( mRect.topLeft(), 
true );
 
  463  if ( event->key() == Qt::Key_Escape )
 
  495void QgsCreateLineTextItemMapTool::lineCaptured( 
const QgsCurve *line )
 
  502  if ( qgsgeometry_cast<QgsCurve *>( geometry.get() ) )
 
  504    auto createdItem = std::make_unique<QgsAnnotationLineTextItem>( tr( 
"Text" ), qgsgeometry_cast<QgsCurve *>( geometry.release() ) );
 
  513    createdItem->setFormat( format );
 
  516    createdItem->setUseSymbologyReferenceScale( 
true );
 
  517    createdItem->setSymbologyReferenceScale( 
canvas()->scale() );
 
void reset(T *p=nullptr)
Will reset the managed pointer to p.
 
CaptureTechnique
Capture technique.
 
@ StraightSegments
Default capture mode - capture occurs with straight line segments.
 
@ CircularString
Capture in circular strings.
 
@ Streaming
Streaming points digitizing mode (points are automatically added as the mouse cursor moves).
 
PictureFormat
Picture formats.
 
@ Unknown
Invalid or unknown image type.
 
@ Millimeters
Millimeters.
 
virtual const QgsAbstractGeometry * simplifiedTypeRef() const
Returns a reference to the simplest lossless representation of this geometry, e.g.
 
virtual bool isEmpty() const
Returns true if the geometry is empty.
 
virtual QgsAbstractGeometry * clone() const =0
Clones the geometry by performing a deep copy.
 
static QgsRecentStyleHandler * recentStyleHandler()
Returns the handler for recently used style items.
 
static QgsImageCache * imageCache()
Returns the application's image cache, used for caching resampled versions of raster images.
 
static QgsSvgCache * svgCache()
Returns the application's SVG cache, used for caching SVG images and handling parameter replacement w...
 
QgsCreateLineTextItemMapTool(QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDockWidget)
Constructor.
 
~QgsCreatePointTextItemMapTool() override
 
QgsMapTool * mapTool() override
Returns a reference to the associated map tool.
 
void cadCanvasPressEvent(QgsMapMouseEvent *event) override
Override this method when subclassing this class.
 
QgsCreatePointTextItemMapTool(QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDockWidget)
Constructor.
 
QgsCreateAnnotationItemMapToolHandler * handler() const override
Returns the handler object for the map tool.
 
QgsCreateRectangleTextItemMapTool(QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDockWidget)
Constructor.
 
QgsMapTool * mapTool() override
Returns a reference to the associated map tool.
 
void cadCanvasMoveEvent(QgsMapMouseEvent *event) override
Override this method when subclassing this class.
 
void cadCanvasPressEvent(QgsMapMouseEvent *event) override
Override this method when subclassing this class.
 
void keyPressEvent(QKeyEvent *event) override
Key event for overriding. Default implementation does nothing.
 
QgsCreateAnnotationItemMapToolHandler * handler() const override
Returns the handler object for the map tool.
 
Curve polygon geometry type.
 
const QgsCurve * exteriorRing() const
Returns the curve polygon's exterior ring.
 
bool isEmpty() const override
Returns true if the geometry is empty.
 
Abstract base class for curved geometry type.
 
A fill symbol type, for rendering Polygon and MultiPolygon geometries.
 
QSize originalSize(const QString &path, bool blocking=false) const
Returns the original size (in pixels) of the image at the specified path.
 
A line symbol type, for rendering LineString and MultiLineString geometries.
 
Map canvas is a class for displaying all GIS data types on a canvas.
 
double scale() const
Returns the last reported scale of the canvas.
 
Base class for all map layer types.
 
A mouse event which is the result of a user interaction with a QgsMapCanvas.
 
QgsPointXY mapPoint() const
mapPoint returns the point in coordinates
 
QgsPointXY snapPoint()
snapPoint will snap the points using the map canvas snapping utils configuration
 
A marker symbol type, for rendering Point and MultiPoint geometries.
 
QPointF toQPointF() const
Converts a point to a QPointF.
 
Point geometry type, with support for z-dimension and m-values.
 
static QgsProject * instance()
Returns the QgsProject singleton instance.
 
QgsSymbol * recentSymbol(const QString &identifier) const
Returns a copy of the recently used symbol with the specified identifier, or nullptr if no symbol wit...
 
A rectangle specified with double values.
 
Responsible for drawing transient features (e.g.
 
void setWidth(double width)
Sets the width of the line.
 
void reset(Qgis::GeometryType geometryType=Qgis::GeometryType::Line)
Clears all the geometries in this rubberband.
 
void setStrokeColor(const QColor &color)
Sets the stroke color for the rubberband.
 
void setLineStyle(Qt::PenStyle penStyle)
Sets the style of the line.
 
void setFillColor(const QColor &color)
Sets the fill color for the rubberband.
 
void addPoint(const QgsPointXY &p, bool doUpdate=true, int geometryIndex=0, int ringIndex=0)
Adds a vertex to the rubberband and update canvas.
 
T value(const QString &dynamicKeyPart=QString()) const
Returns settings value.
 
bool setValue(const T &value, const QString &dynamicKeyPart=QString()) const
Set settings value.
 
static const QgsSettingsEntryDouble * settingsDigitizingLineColorAlphaScale
Settings entry digitizing line color alpha scale.
 
static QgsTextFormat defaultTextFormatForProject(QgsProject *project, QgsStyle::TextFormatContext context=QgsStyle::TextFormatContext::Labeling)
Returns the default text format to use for new text based objects for the specified project,...
 
@ Labeling
Text format used in labeling.
 
QSizeF svgViewboxSize(const QString &path, double size, const QColor &fill, const QColor &stroke, double strokeWidth, double widthScaleFactor, double fixedAspectRatio=0, bool blocking=false, const QMap< QString, QString > ¶meters=QMap< QString, QString >())
Calculates the viewbox size of a (possibly cached) SVG file.
 
static QgsSymbol * defaultSymbol(Qgis::GeometryType geomType)
Returns a new default symbol for the specified geometry type.
 
Container for all settings relating to text rendering.
 
void setAllowHtmlFormatting(bool allow)
Sets whether text should be treated as a HTML document and HTML tags should be used for formatting th...
 
#define BUILTIN_UNREACHABLE