96 Commits

Author SHA1 Message Date
Nyall Dawson
ef2528bfd8 Add render context to QgsAnnotationItemEditContext 2024-08-15 14:27:35 +10:00
Nyall Dawson
3a578d6712 Header update 2024-08-13 20:28:55 +10:00
Nyall Dawson
5b084d39f4 Add documentation 2024-08-06 13:30:16 +10:00
Nyall Dawson
547387037f [annotations] Add support for callouts to point text item
Allows creating of callout lines (or bubble callouts) which
link the text to a map location. To create a callout, users
select the text item and then drag out the central x node
to the desired callout end point.

Callout styles can be modified through the layer styling panel.
2024-08-06 13:30:16 +10:00
Nyall Dawson
00412a41d3 [annotations] Add linked layer option for annotation layers
Adds a new "Linked layer" setting to the render page for annotation
layers, which allows users to optionally set a linked visibility
layer for the annotation layer. If set, then the annotations will
only be drawn when the linked layer is visible in the map.

This is designed to mimic the similar linked layer option for
the older annotation framework, in order to close the feature
gap between old vs new annotations

Refs https://github.com/qgis/QGIS-Enhancement-Proposals/issues/269
2024-08-03 06:40:03 +10:00
Nyall Dawson
bae23c28a3 [FEATURE] Text inside rectangle annotation item
This adds a new annotation item type for rendering paragraphs
of text inside a rectangle

Options are present for:

- Text format
- Horizontal and vertical alignment
- Margins
- Background and frame symbol
2024-07-31 07:58:53 +10:00
Nyall Dawson
6ab373284c Fix merge 2024-07-26 20:38:47 +10:00
Nyall Dawson
0c230a83e7 Add fixed size mode for picture annotations
When selected, the picture annotation will always be rendered
at the same size, regardless of the map scale
2024-07-26 20:38:47 +10:00
Nyall Dawson
75cca8a20c [FEATURE] Add picture annotation item type
Can render SVG or raster images as items in an annotation layer.
Options are present for:

- Locking the picture's aspect ratio
- Drawing with a background symbol
- Drawing with a border symbol
- Linked or embedded pictures
2024-07-26 20:38:47 +10:00
Nyall Dawson
390d59d6e3 Make current item bounds available for annotation edit operations 2024-07-26 08:51:25 +10:00
Nyall Dawson
80e77a68c5 Add context argument to annotation item edit methods
And deprecate existing ones
2024-07-26 08:51:25 +10:00
Nyall Dawson
28943f9c1b Remove a bunch of useless default constructor doxygen 2024-07-23 02:08:28 +10:00
Even Rouault
15ea5c46bc
Header files: remove all mentions of '\since QGIS 3.0' 2024-02-18 20:57:23 +01:00
Denis Rouzaud
2d47d612ce
make QgsAnnotationItem::clone const (#55868) 2024-01-17 14:31:30 +00:00
Denis Rouzaud
681376675b
make item method const (#55858) 2024-01-17 13:24:16 +01:00
Denis Rouzaud
d296f0e513
add enabled state for annotation items (#55798) 2024-01-17 10:07:10 +00:00
Nyall Dawson
a764e2da76 Expose setting for point text annotations to control how
the text annotation should handle map rotation

Previously, text annotations just ignore map rotation, which
matches how regular map labels are handled. But this is not
desirable for some point text annotations, where it can
be considered a bug that the item ignores the map rotation (eg
when a text annotation has been placed to align with a feature
on the map, such as a road)

There's no one "correct" behaviour here, so add a new
combo box widget in the annotation point text settings with
options for
"Ignore Map Rotation"
"Rotate With Map"
so that users can pick the desired behavior for their annotations
2023-06-02 17:26:07 +10:00
Nyall Dawson
fbe7c7fbe5 Add api for offsetting text from line 2023-03-31 13:17:25 +10:00
Nyall Dawson
cd3a1bf237 [api] Add text-along-line annotation item type
This annotation item renders curved text along a linestring
2023-03-31 13:17:25 +10:00
CodeBardian
a03d5363c8 sipify and astyle 2023-01-11 06:50:25 +10:00
Juergen E. Fischer
c6008b7ee1 fix MSVC build: reverts fee62e4, dff05dd and e3a77b9484c effectivly
reverting 3fb0f66 (followup #45348)

Using --no-public-is-protected (default on Windows) also works on Linux
and fixes #45331 too
2021-10-21 23:03:48 +02:00
nirvn
ef84e48a09 Run sipify_all.sh 2021-10-12 16:34:05 +10:00
Denis Rouzaud
ec16736306 run sipify 2021-10-12 16:34:05 +10:00
Nyall Dawson
0ab6113e88 Promote QgsMapSettings and QgsRenderContext enums to enum class, move to Qgis 2021-09-26 11:24:51 +10:00
Nyall Dawson
5e150f9262 Allow paint effects to be applied to an annotation layer 2021-09-10 18:26:39 +10:00
Nyall Dawson
fbce5ad864 Implement html metadata for annotation layers 2021-09-10 18:26:39 +10:00
Nyall Dawson
4cb06c0ae2 Add an annotation item edit operation for adding nodes 2021-09-10 15:01:26 +10:00
Nyall Dawson
a7d299df92 Use an edit operation for annotation item translation, instead of
transform

Will make it easier to add undo/redo support in future
2021-09-10 15:01:26 +10:00
Nyall Dawson
1228f59bff Make annotation item edit API a bit more flexible 2021-09-10 15:01:26 +10:00
Nyall Dawson
4b245f59e0 Add new annotation edit operation for deleting a vertex 2021-09-10 15:01:26 +10:00
Nyall Dawson
1537d393e3 Add framework for retrieving the temporary results of a in-progress
edit operation on an annotation item

This is used for the item to return a representative geometry
of what the item would look like if the operation were to be
applied. It's used to generate a rubber band showing a preview
of the modification during interactive editing operations on
an annotation item.
2021-09-10 15:01:26 +10:00
Nyall Dawson
1fe874315a Add method to apply a annotation item edit operation directly
onto a QgsAnnotationLayer
2021-09-10 15:01:26 +10:00
Nyall Dawson
631343265d Allow QgsAnnotationItemEditOperationMoveNode operations to be
applied to annotation items to move nodes in the item
2021-09-10 15:01:26 +10:00
Nyall Dawson
a87206dbdf Create QgsAbstractAnnotationItemEditOperation as base class for
edit operations on annotation layers, with initial implementation
as QgsAnnotationItemEditOperationMoveNode

This class encapsulates edit operations which apply to annotation
layers/items
2021-09-10 15:01:26 +10:00
Nyall Dawson
5ed05fadca Add an id number to QgsAnnotationItemNode 2021-09-10 15:01:26 +10:00
Nyall Dawson
6d926d4ffe Add method to create rubber band geometry for an annotation item 2021-09-07 15:48:17 +10:00
Nyall Dawson
8d1f2bf7a6 Add a method to transform QgsAnnotationItems using a QTransform
transform
2021-09-07 15:48:17 +10:00
Nyall Dawson
46f1957cee [api] Annotation items can have their symbology reference scale set
This is especially important for annotation items, where users will
want to create text items with text which scales up and down with
the map.
2021-09-07 14:57:57 +10:00
Nyall Dawson
837dd24858 Make it easier for annotation item subclasses to correctly
copy/read/write common base class properties
2021-09-07 14:57:57 +10:00
Nyall Dawson
38b8b82674 Add method to replace an existing item in an annotation layer 2021-09-07 10:35:02 +10:00
Nyall Dawson
40bef07264 Correctly handle rendered item results stored when map canvas redraw
partially uses cached layer results
2021-09-06 12:38:33 +10:00
Nyall Dawson
4ff1e55a21 [api] Add method to retrieve the nodes for an annotation item
For now all nodes just directly represent vertices in the item,
but the intention here is that they can represent any form of handle
which can be used to manipulate an item (e.g. a bezier curve point,
some "smart shape" handle for resizing or rotating an item, etc)
2021-09-03 08:06:48 +10:00
Nyall Dawson
f5bd9ccaee
[annotations] Implement scale dependent bounding box calculation for marker items 2021-09-02 14:45:18 +10:00
Nyall Dawson
660433d9a9 [api] Add framework for collecting rendered item details during map
renderer operations

This follow a similar pattern as how labeling results could be collected
after a map render job, but generalises the API so that it can be
used for storing details of rendered items of any type.

It's currently used for storing details of rendered annotation items,
so that map tools can retrieve details of annotation items visible
in the canvas in an optimised way.
2021-08-31 11:04:29 +10:00
Nyall Dawson
b09994abcc Add a minimal data provider for annotation layers
Required for some nice things, like avoiding rendering slower
annotation layers in canvas preview jobs
2021-08-31 11:04:29 +10:00
Nyall Dawson
47bcf09af6 Rework annotation layer index handling
Because some annotation items have scale dependent bounding boxes,
we can only index items which have a fixed bounding box. Other
item bounds need to be dynamically determined based on a specific
render context. So rework the annotation layer index handling
to only index appropriate items and store other items in a non-indexed
item set.

This isn't ideal, because it means we need to clone ALL non-indexed
items upfront whenever we render an annotation layer (it's too expensive
to calculate their actual bounding box and selectively clone them,
as it's a process which blocks the main thread).

Hopefully we can think of an alternative approach to this down
the line so that we DO have some form of spatial index for scale
dependent items, unlocking better performance for annotation layers
with 10,000s of items. But we'll ignore that situation for now ;)
2021-08-31 11:04:29 +10:00
Nyall Dawson
b4acffbb31 Add flag for scale dependent bounding boes 2021-08-31 11:04:29 +10:00
Nyall Dawson
aeb7d89a24 Use a spatial index to optimise annotation layer item retrieval 2021-08-19 13:26:36 +10:00
Nyall Dawson
e3b10ff5b1 Add method to retrieve a specific item from an annotation layer by id 2021-08-19 13:26:36 +10:00
Nyall Dawson
3b2e640cee Add a new enum for inherent map layer properties, and add property
to annotation layers to reflect that while these are editable
users are not able to toggle edits on them (they are ALWAYS
editable!)

Note that we can't use the existing QgsMapLayer::LayerFlag enum here,
as that has a different meaning (flags which are set by users
at runtime)
2021-08-18 12:32:41 +10:00