3147 Commits

Author SHA1 Message Date
Nyall Dawson
af0d68b882 Implement QgsGeometry::isEmpty()
Faster than QgsGeometry::isGeosEmpty() because it avoids the
conversion to GEOS geometries and just uses the QgsAbstractGeometry
subclasses directly.

Also implements faster isEmpty() overrides for specific
QgsAbstractGeometry subclasses.
2017-01-31 07:15:51 +10:00
Nyall Dawson
49aae6e908 Rename QgsGeometry::isEmpty to isNull
Differentiates missing geometries from empty geometries (eg
empty geometry collections)
2017-01-30 21:58:23 +10:00
Nyall Dawson
61d3147261 Merge pull request #4073 from nyalldawson/annotations
Refactor annotations, add new annotation features + some other exciting stuff
2017-01-30 21:21:01 +10:00
Nyall Dawson
1f7758a9f9 Fix failing tests 2017-01-30 20:01:09 +10:00
Nyall Dawson
10c40dcaab Fix rendering offset lines as part of fill symbol (outside of
vector layers) results in broken offset outline
2017-01-30 19:58:08 +10:00
Nyall Dawson
6bffa17cc2 Fix failing tests 2017-01-30 19:13:07 +10:00
Blottiere Paul
5c8360dba2 [server] WIP clean project parsing by using QgsProject 2017-01-30 08:21:05 +01:00
Nyall Dawson
fac7887a9c [FEATURE] Annotations can be styled using fill symbol styles (fix #10552)
This changes the rendering of annotation frames to use QGIS' symbology
engine, which means that all the existing fill styles can now be
used to style annotation frames.

Also paint effects & data defined symbol parameters. Whee!
2017-01-30 12:17:44 +10:00
Nyall Dawson
a94ca701ac [FEATURE] Control over annotation contents margins (refs #10555)
Allows setting left/top/right/bottom margins for the contents
within an annotation.
2017-01-30 11:31:52 +10:00
Nyall Dawson
a7be9968b8 New class QgsMargins for storing margins (left/right/top/bottom)
Basically a direct port of QMarginF, but forced to always use
double values, and with added toString()/fromString() methods.
2017-01-30 10:50:48 +10:00
Nyall Dawson
c22f5de690 Port annotation feature handling to QgsAnnotation
Not an ideal implementation (too much logic resides in the
gui QgsMapCanvasAnnotationItem class), but any approach
using current api will be dependant on some hacks.

Ideally we need a QgsVectorDataProvider method for finding
the closest feature(s) to a point(/line/polygon) within a
certain tolerance, with provider specific implementations
which offload this to the data store's spatial indices.
Then this handling could be bumped up to reside in
QgsAnnotation.
2017-01-30 08:39:47 +10:00
Nyall Dawson
aa14926ca8 Move map layer association for annotations to QgsAnnotation
Previously only some annotations had (incomplete) support for
attaching to a particular vector layer and synchronising their
visibility with the layer's visibility.

This handling has all been moved up to QgsAnnotation, so that
all annotation types can be attached to layers.

This will allow selective annotation visibility based on the
visible layers of a particular canvas, eg in multi-canvas
environments.

Additionally:
- show the attached layer in the annotation properties
dialog, and allow it to be cleared to always show the
annotation
- allow attaching annotations to non-vector layers
- add unit tests for visibility
2017-01-30 08:36:20 +10:00
Nyall Dawson
c853f4fe89 Refactor annotations
Splits the rendering component of annotations out from map
canvas item component.

A new core abstract base class QgsAnnotation handles the
management of the common properties associated with an
annotation, and handles rendering the annotation onto a
QgsRenderContext destination.

Existing annotation classes have been ported to this, and
with the exception of the form annotation moved into core.
Form annotations are dependant on editor widgets and must
remain in GUI.

A new QgsMapCanvasAnnotationItem item class implements
a QgsMapCanvasItem which draws an annotation inside the
canvas, and handles synchronising the position and size
of the canvas item with the QgsAnnotation position/size.

This allows annotations to be safely used in a multi-canvas
environment, with a single QgsAnnotation being displayed
in multiple canvases (even if the canvases have different
extent/crs/etc).

Additionally it allows annotations to be directly rendered
to a map (eg in composer) without going through the
gui based Qt graphics scene framework.

Also removes lots of duplicate code, and adds some basic
unit tests for annotations.
2017-01-30 08:36:19 +10:00
Martin Dobias
8ba609e516 Tidy up layer definitions code + removal of QgsProject::instance()
Moved code related to layer definitions away from QgsMapLayer
2017-01-29 23:22:37 +08:00
Nyall Dawson
c96a32aadf Update indentation 2017-01-29 17:01:51 +10:00
lbartoletti
548461ac3c [FEATURE] QgsPointV2 add project with 3D support
Allows projection of a point with inclination to return a 3d point.

Expression "project" function has been extended to support a new inclination parameter.
2017-01-29 08:29:25 +10:00
Alexander Bruy
9378d20fe0 fix generation of unique field names 2017-01-27 15:19:56 +02:00
Alexander Bruy
bf526ad023 remove obsolete test 2017-01-27 15:19:48 +02:00
Alexander Bruy
8e3042286d extend zonal statistics tests 2017-01-27 15:19:47 +02:00
Martin Dobias
0341478864 Remove code for reading of legacy (QGIS < 1.0) renderers
Also removes a bunch of unused old QMLs and upgrades one still in use
2017-01-27 16:02:48 +08:00
Nyall Dawson
bfdd9dc0b0 Fix some coverity null pointer dereference issues 2017-01-27 16:54:03 +10:00
Martin Dobias
b245ccc105 [FEATURE] API call to make geometries valid (port of ST_MakeValid)
This introduces QgsGeometry::makeValid() which will try to make a valid
geometry out of invalid one. This is more complicated method than just
doing a buffer with zero width, but it should not loose any vertices.

Finally we should have a reliable way in QGIS to fix bad geometries!

Ported the C code from lwgeom library to QGIS.
2017-01-27 09:43:29 +08:00
Martin Dobias
137eb3a0f9 Make layer tree implementation independent from QgsProject::instance()
Another bit in the project refactoring work to get rid of dependencies
on QgsProject singleton.

Reading of layer trees from XML is now split into two phases:
1. read XML and keep layer IDs
2. resolve layer IDs to QgsMapLayer instances (using QgsProject)

There are convenience methods to do both phases in one go.
2017-01-27 09:29:04 +08:00
Nyall Dawson
7b14373a8e Fix some coverity uninitialized variable warnings 2017-01-27 09:55:12 +10:00
Denis Rouzaud
958dff9d82 spelling fixes 2017-01-25 17:38:01 +01:00
Denis Rouzaud
0de00150d1 correctly exit spell check test to make Travis fail 2017-01-25 11:25:27 +01:00
Mathieu Pellerin
ecf1f5a576 [FEATURE] expression engine's is_layer_visible() (#4045) 2017-01-25 11:47:26 +07:00
Nyall Dawson
a188d14f48 Remove map settings parameter from QgsComposition
Breaks the hard link between canvas and compositions!

Fix #11077
2017-01-24 14:32:08 +10:00
Juergen E. Fischer
6a56cb0dd0 updates and fixes for windows qt5/py3 build 2017-01-24 01:25:59 +01:00
Nyall Dawson
e06192ec3f Use consistent names for data defined property collections 2017-01-23 12:45:22 +10:00
Nyall Dawson
2966a16530 Cleanups, fix tests 2017-01-23 12:45:22 +10:00
Nyall Dawson
f0f01709bc Fix failing test 2017-01-23 12:45:22 +10:00
Nyall Dawson
2c241755f8 Fix layer expression scope sometimes not appended to render
context expression scopes
2017-01-23 12:45:22 +10:00
Nyall Dawson
17d4d3a8a4 Fix some failing tests 2017-01-23 12:45:22 +10:00
Nyall Dawson
f1b2940623 Fix tests 2017-01-23 12:45:22 +10:00
Nyall Dawson
f3ac8bc2eb Rename method which causes spell check issues 2017-01-23 12:45:22 +10:00
Nyall Dawson
ffaa40edc4 Refactor properties
Remove QgsAbstractProperty and subclasses, and instead use a single
QgsProperty class which covers the use of QgsAbstractProperty
and its subclasses. This simplifies the API and avoids pointer
handling. QgsProperty is implicitly shared for memory efficiency
and inexpensive copies.
2017-01-23 12:45:21 +10:00
Nyall Dawson
90e80c1353 Stronger definitions of properties in collections
Instead of defining the suitable field types and values for
properties when registering them to a data defined button,
now properties are fully defined when the valid
property keys are defined.
2017-01-23 12:45:21 +10:00
Nyall Dawson
6c53ba25e3 [FEATURE][composer] Data defined scalebar colors and line width 2017-01-23 12:45:21 +10:00
Nyall Dawson
ec9ba9c2a2 [FEATURE][composer] Data defined legend titles and column count
(fix #11913)
2017-01-23 12:45:21 +10:00
Nyall Dawson
d6c7569dda [FEATURE][composer] Data definable item frame and background colors 2017-01-23 12:45:21 +10:00
Nyall Dawson
ad2324021d Port symbology and composer to properties framework 2017-01-23 12:45:21 +10:00
Nyall Dawson
43bbf68943 Port labeling to properties framework 2017-01-23 12:45:21 +10:00
Nyall Dawson
93db66ed1f Allow properties/collections to be prepared in advance 2017-01-23 12:45:21 +10:00
Nyall Dawson
53ba1a1f10 Add a common interface for QgsPropertyCollection/QgsPropertyCollectionStack 2017-01-23 12:45:21 +10:00
Nyall Dawson
336b603b3a Add support for more data definable properties to diagrams:
- Distance
- Priority
- ZIndex
- IsObstacle
- Show
- AlwaysShow
- Diagram Start Angle
2017-01-23 12:45:21 +10:00
Nyall Dawson
07315bfedd Add tests for data defined diagram properties 2017-01-23 12:45:21 +10:00
Nyall Dawson
c23de083ce Setting a property to null in collections removes property 2017-01-23 12:45:21 +10:00
Nyall Dawson
f1c1589550 Initial implementation of property system 2017-01-23 12:45:21 +10:00
Nyall Dawson
9124100fb6 Python formatting updates 2017-01-23 12:25:19 +10:00