4589 Commits

Author SHA1 Message Date
Loïc Bartoletti
0bacf0ff16 - Add some methods in QgsVector3D
- Move QgsVector3D from 3d to core
- Use QgsVector3D instead of QVector3D
2018-04-21 08:16:14 +10:00
Loïc Bartoletti
9d649e738a Add skewLines intersection algorithm 2018-04-21 08:16:14 +10:00
Nyall Dawson
6a2625664e [processing] Add dedicated "distance" parameter
This is a subclass of QgsProcessingParameterNumber, but specifically
for numeric parameters which represent distances. It is linked
to a parent parameter, from which the distance unit will
be determined, and is shown using a dedicated distance widget
within the processing parameters panel. This widget shows
the distance unit.

This avoids the confusion when running algorithms which
use distances where the unit depends on a layer or CRS parameter -
e.g. the distance parameter in the buffer algorithm gives
the distance in layer units... so now we can show those units
directly within the dialog. Hopefully this leads to less
user confusion and accidental "1000 degree buffers"!

Additionally - if the unit is in degrees, a small warning
icon is shown next to the parameter. The tooltip for this
icon advises users to reproject data into a suitable
projected local coordinate system.

Initially implemented for the native buffer and single
sided buffer algorithm only - but more will be added.

Fixes #16290
2018-04-20 18:27:00 +10:00
Matthias Kuhn
eb7f755429
Merge pull request #6813 from m-kuhn/constrenderers
Const correctness for feature renderers
2018-04-20 08:31:15 +02:00
Martin Dobias
49b02bf562 [FEATURE] Legend: optional text on top of symbols for vector layers
In some cases it is useful to add extra information to the symbols in the legend.
This work allows definition of additional labels in vector layer properties > Legend tab.
2018-04-18 21:52:56 +02:00
Martin Dobias
721c536185
Merge branch 'master' into overlay-alg-fixes-1 2018-04-18 14:16:50 +02:00
Matthias Kuhn
85719e8fab API documentation 2018-04-18 13:51:08 +02:00
Matthias Kuhn
7e9aeda739 Some const-correctness for rules 2018-04-18 13:34:55 +02:00
Matthias Kuhn
7123803d07 More const-corretness for QgsFeatureRenderer 2018-04-18 13:17:41 +02:00
Martin Dobias
45b264db08 Fixes after review 2018-04-18 13:04:05 +02:00
Matthias Kuhn
3775cdbb60 Const correctness for renderers 2018-04-18 12:51:58 +02:00
Martin Dobias
322bc78755
Merge pull request #6782 from wonder-sk/required-layers
Mark layers as required in the project
2018-04-13 11:31:43 +02:00
Nathan Woodrow
76843be62d
[BUGFIX][needs-docs] Allow expression parser to report better error location
We return the line and column to allow builder to highlight
that location for the user.
2018-04-13 07:45:48 +10:00
Martin Dobias
42517f8b58 [FEATURE] Mark layers as required in the project
Required layers are not allowed to be removed from the project.
This adds extra safety to protect project users from removing layers
they may think are not needed (e.g. used in joins, relations, expressions).

Users can set/unset layers that are required in project properties dialog.
2018-04-11 15:48:49 +02:00
Martin Dobias
3400199eb8 [FEATURE] Map themes: store also expanded/collapsed state of nodes
Each map theme will also record which layers, groups and legend items are expanded,
so when a map theme is selected, the expanded/collapsed states get applied in the layer tree.
2018-04-11 09:04:23 +02:00
Matthias Kuhn
29b080fce3
Merge pull request #6754 from m-kuhn/processing_filter_algorithm
[FEATURE] Feature filter algorithm for processing models
2018-04-11 08:29:12 +02:00
Nyall Dawson
37295ec48e Expose extra arguments to QgsGeometry::transform
Previously these were only available via the raw QgsAbstractGeometry
API.

Also add more unit tests for QgsGeometry::transform
2018-04-10 17:49:18 +10:00
Matthias Kuhn
eb39d2379c Move processing algorithm configuration code to gui lib 2018-04-09 13:10:47 +02:00
Matthias Kuhn
3be4324d60 Move processing algorithm configuration widget to gui library
This way we can also use all the fancy widgets like a QgsExpressionLineEdit.
2018-04-09 13:10:47 +02:00
Matthias Kuhn
147f6e71c4 [FEATURE] Add feature filter algorithm
Adds a new "feature filter" algorithm. This algorithm takes a list of expressions and
creates an output for each of them. Matching features from the input layer are sent
to the outputs.

This allows for an algorithm to only handle a subset of incoming features or to send
different features to different outputs.

The algorithm is only available in the modeler.
2018-04-09 13:10:47 +02:00
Matthias Kuhn
e6ef7639cb [processing] Allow algorithms to provide additional configuration widgets 2018-04-09 13:10:46 +02:00
Matthias Kuhn
9e8c995ac8 [processing] Pass algorithm configuration on run
Because if it's not passed here, it's basically like writing it to /dev/null right from the beginning.
2018-04-09 12:34:35 +02:00
Martin Dobias
f378a23ed8
[FEATURE] Projects in PostgreSQL
Merge of pull request #6752
2018-04-09 09:53:16 +02:00
Matthias Kuhn
e2bf9b9db1
Merge pull request #6716 from signedav/fix_embeddedrelation
Use always id as identification on drag&drop form creator for relations
2018-04-09 08:52:01 +02:00
Nyall Dawson
45c400c25c QgsSvgCache fetches remote SVG files in a background task
Previously QgsSvgCache would often try to fetch remote images
using a network request on the main thread, by calling
processEvents repeatedly until the request was complete.

This caused lots of bugs, since the main thread processEvents
would proceed with all kinds of stuff assuming that the
svg fetch operation was complete, leading to frequent crashes
and deadlocks and making remote svg use impossible (it's
likely that the SVG cache remote fetching code was written
in the pre-multi-threaded rendering era).

There's no way to fix this with async svg fetching - we
HAVE to remove the processEvents call, and a QEventLoop
won't help either (since the method may be called on the
main thread). Accordingly the only solution is to
fetch the requested svg in the background, and return
a temporary "downloading" svg for use in the meantime.
We use a QgsNetworkContentFetcherTask to do this, so it's
nicely integrated with task manager.

A request task is fired up when a remote svg is requested
for the first time, with the temporary downloading svg
returned for use by the caller asynchronously. QgsSvgCache
then emits the remoteSvgFetched signal when a previously
requested remote SVG has been successfully fetched,
triggering a map canvas redraw with the correct SVG
graphic.

Fixes #18504
2018-04-09 12:43:05 +10:00
Martin Dobias
42969a4794 Add project_basename to project expr context, project_path for custom impls 2018-04-07 16:56:03 +02:00
Martin Dobias
663a9ac26a Test fixes 2018-04-07 12:58:02 +02:00
Martin Dobias
2aabad96e7 Fixes after Nyall's review + doxygen fixes 2018-04-07 12:58:02 +02:00
Martin Dobias
3ccb6c3336 Fix spelling and doxygen doc 2018-04-07 12:58:02 +02:00
Martin Dobias
2bbdc34334 Deprecate QgsProject::fileInfo() 2018-04-07 12:58:02 +02:00
Martin Dobias
15f7ec7854 Add abstraction of project's absolute file path, base name, last modified 2018-04-07 12:58:02 +02:00
Martin Dobias
47d5b7fc11 Handle ssl mode, service, authcfg in postgresql project URIs 2018-04-07 12:58:02 +02:00
Martin Dobias
2e847e2e96 Support for project items in browser for PostgreSQL
Switched from using URLs in mime data to URI list for drag-n-drop of projects
so that they are handled in the same way as the other browser items.
2018-04-07 12:58:02 +02:00
Martin Dobias
ab83455d83 Store last modified time in project storage + retrieve it 2018-04-07 12:58:02 +02:00
Martin Dobias
0f5ea535cb Implement project storage for PostgreSQL + tests of the storage 2018-04-07 12:58:02 +02:00
Martin Dobias
5963028caf Extend project storage interface: remove/rename projects, GUI support 2018-04-07 12:58:01 +02:00
Martin Dobias
a30646f1cb Introduced QgsProjectStorage and QgsProjectStorageRegistry
This is going to be used as an abstraction of how/where project
files are stored.
2018-04-07 12:58:01 +02:00
Blottiere Paul
c47a6457b8 Do not save .qgd file alongside .qgs when it's not used 2018-04-06 11:00:08 +01:00
Nyall Dawson
ebab649438 Fix some locator filters show results when no string is entered
and filter prefix is not used
2018-04-06 12:44:56 +10:00
Nyall Dawson
2e7455c180 Add some geometry utils for interpolating points on lines 2018-04-06 12:43:52 +10:00
Nyall Dawson
63c5e74946 Fix clazy pass small and trivially copyable object by value warnings 2018-04-05 06:35:13 +10:00
Nyall Dawson
1ea20a4b35 Add method to swap x/y coordinates in geometries
This can be used to repair geometries which have
accidentally had their latitude and longitude coordinates
reversed.
2018-04-05 06:35:13 +10:00
Nyall Dawson
d5617b8025 [processing] Allow QgsVectorLayerSelectedFeatureSource to
create expression context scopes

Allows algorithms which require the underlying layer scope
to operate correctly when running in selected features only
mode.

Fixes #17170
2018-04-04 05:27:32 +10:00
Nyall Dawson
8326510e0e [processing] If an exception occurs while processing a feature
in a feature-based algorithm, don't try to continue processing
remaining features

Avoids multiple error dialogs appearing for every feature
in a layer...
2018-04-04 05:27:32 +10:00
Nyall Dawson
f4445a0493 [processing] Always log python exceptions to logger
Because Python code cannot catch and rethrow c++ exceptions
without losing context, we end up getting unknown exceptions
caught by c++ from python code (phew!).

So if we catch a python exception from processing, throw it
into the log so at least there's the full debugging detail
available on the console.

(Not ideal. Would love to see a PR allowing the full error
message to be passed correctly between c++/python/back again)
2018-04-04 05:27:32 +10:00
Nyall Dawson
08d30c3b9f [processing] Add method for algorithms to preprocess parameter values
Allows algorithms to pre-processes a set of parameters, allowing the
algorithm to clean their values.

This method is automatically called after users enter parameters, e.g.
via the algorithm dialog. This method should NOT be called manually
by algorithms.
2018-04-03 18:36:39 +10:00
Nyall Dawson
e1db9d4898 Fix doxygen warnings 2018-04-03 10:26:46 +10:00
Nyall Dawson
3eeb1b54e7 Spelling 2018-04-03 10:11:27 +10:00
Nyall Dawson
1bf1058210 Followup fcacb0d, fix doxygen tests
Also:
- move doxygen comments to header files so that they get included
in Python docstrings
- remove duplicate doxygen implemented in both header and footer
- remove some redundant doxygen for overridden methods
- add some missing docs
2018-04-03 09:49:00 +10:00
Juergen E. Fischer
fcacb0db7c doxygen fixes 2018-04-02 22:48:40 +02:00