32 Commits

Author SHA1 Message Date
Nyall Dawson
70361063d8 Rename QgsGeometry::geometry as QgsGeometry::get()
Because feature.geometry().geometry() is confusing, and impossible
to search for in python code (e.g. is input.geometry() a QgsGeometry
or a QgsAbstractGeometry?)

But more importantantly: also add a const version
QgsGeometry::constGet(). The non-const
version is slow, since it now forces a detach to avoid corrupting
geometries (since QgsGeometry is shared, it's not safe to directly
access its primitive QgsAbstractGeometry and start messing with
it without first detaching). This is a big risk in the 2.x API
which could potentially corrupt feature geometries with unexpected
outcomes.

Update all uses to constGet where possible.
2017-10-26 07:06:34 +10:00
Nyall Dawson
24a9c522e3 Move qgsAsConst to qgis::as_const
So it's more inline with the std::as_const implementation which
it fills in for, and allows us to 'polyfill' other c++>11
features into the qgis:: namespace.
2017-10-13 19:47:37 +10:00
Nyall Dawson
ac7fede91a Modernize some geometry code 2017-09-26 12:19:46 +10:00
Nyall Dawson
88c8c71422 Daily Q_FOREACH removal 2017-09-12 10:44:10 +10:00
Nyall Dawson
7f447374cd Remove redundant math constant defines
Since we use _USE_MATH_DEFINES for windows builds, these are
not required
2017-08-26 04:06:57 +10:00
Nyall Dawson
2d192791c2 qMin/qMax -> std::min/max 2017-08-25 16:37:54 +10:00
Nyall Dawson
b5ca4b4ea8 (q)sqrt -> std::sqrt 2017-08-25 03:22:15 +10:00
Nyall Dawson
8c64d80a07 (q)floor -> std::floor 2017-08-25 03:12:36 +10:00
Nyall Dawson
2e5d1abbb1 (q)cos -> std::cos 2017-08-25 03:05:22 +10:00
Nyall Dawson
77c3be97e3 Make sure (f)abs are prefixed with std:: 2017-08-25 02:35:28 +10:00
Nyall Dawson
f2b2c6d2fd Use fabs/abs/labs instead of qAbs
Better to stick to standard methods where available instead
of less supported Qt methods
2017-08-25 02:35:27 +10:00
Matthias Kuhn
d2076a1400
Convert more dynamic_casts to qgsgeometry_casts 2017-08-13 12:29:05 +02:00
Matthias Kuhn
dba8cc0f6c
Convert more calls to qgsgeometry_cast 2017-08-13 10:35:44 +02:00
Nyall Dawson
38a13ff5af Make pole of inaccessibility calculation handle multipolygons 2017-07-17 07:24:33 +10:00
Harrissou Sant-anna
0d9945deac Use JavaScript instead of javascript/Javascript
+ update INSTALL doc
2017-07-13 17:40:55 +02:00
Matthias Kuhn
a9d7630a69 Rename QgsPointV2 to QgsPoint and QgsPoint to QgsPointXY
Because 3D coordinates should be the default.

References https://github.com/qgis/qgis3.0_api/issues/36
2017-06-02 19:53:37 +02:00
Nyall Dawson
51035cfb67 Add optimised constructors for QgsLineString
Instead of requiring all linestrings to be constructed by
first creating QgsPointSequence (requiring creation or
conversion of points to QgsPointV2), allow construction
of LineStrings directly from vectors of values (fastest!)
or lists of QgsPoint.

Likely results in speedups for lots of geometry operations,
but using the same layer as earlier tested for densify
improvements the densify operation time dropped further
from 25 seconds to 15 seconds.
2017-03-25 20:44:31 +10:00
Nyall Dawson
a769448e70 Also port processing densify to distance to c++
- Add QgsGeometry method to densify by distance
- Fix bug in processing algorithm which resulted in duplicate
vertices and incorrectly spaced extra vertices
2017-03-25 16:23:29 +10:00
Nyall Dawson
5360b79174 [FEATURE] New API QgsGeometry::densifyByCount
Densifies a geometry by adding a specified number of vertices
to each segment
2017-03-25 15:07:16 +10:00
Denis Rouzaud
40c056cae0 run astyle on src/core 2017-03-03 09:09:37 +01:00
Nyall Dawson
db5dd85408 Fix some more clang-tidy suggestions 2017-02-21 09:37:41 +10:00
Nyall Dawson
aed6c735a6 Swap QScopedPointer to std::unique_ptr
Why?
- no benefits to QScopedPointer over std::unique_ptr
- unlike QScopedPointer, std::unique_ptr has no overhead
over regular pointers
- using standard language features makes it more likely that
compilers can optimise this use and static analysers can
correctly handle code using unique_ptrs
- QScopedPointer has an (IMO) uncertain future (given that
Qt is dropping features which have become part of the c++
standard). Better to port now before wider use of QScopedPointer
in the codebase!
2017-02-07 12:08:57 +10:00
Nyall Dawson
799b833cae Fix some memory leaks identified by Coverity 2017-01-27 10:13:46 +10:00
Nyall Dawson
caa0d500af Fix spelling of orthoganilize 2016-12-12 17:47:12 +10:00
Nyall Dawson
4b6f3a3ee5 [FEATURE][processing] New algorithm to orthagonalize geometries
Adds a new QgsGeometry::orthagonalize method which tries to make
angles in geometries either right angles or straight lines

Also adds a processing algorithm exposing this feature.
2016-12-09 09:41:56 +10:00
Nyall Dawson
b44093914b Fix test failure, report distance from pole 2016-11-14 15:52:41 +10:00
Nyall Dawson
d6f09c012e [FEATURE] Add method to calculate pole of inaccessibility for polygons
Implements a method in QgsGeometry and a processing algorithm to
calculate the pole of inaccessibility for a surface, which is the
most distant internal point from the boundary of the surface. This function
uses the 'polylabel' algorithm (Vladimir Agafonkin, 2016), which is an iterative
approach guaranteed to find the true pole of inaccessibility within a specified
tolerance. More precise tolerances require more iterations and will take longer
to calculate.
2016-11-14 15:52:41 +10:00
Juergen E. Fischer
3f22a7a77f another scripts/replacev2.sh with minor manual fixes 2016-08-10 12:12:28 +02:00
Juergen E. Fischer
0688621046 scripts/replacev2.sh run 2016-08-10 12:08:52 +02:00
Nyall Dawson
c628c0f434 Rework includes to forward declare as much as possible
Should speed up recompilation when headers change
2016-07-18 19:10:19 +10:00
Juergen E. Fischer
00d60dbca3 fix warnings 2016-01-18 00:26:59 +01:00
Matthias Kuhn
542541007c Add extrude function to QgsGeometry 2016-01-14 12:28:31 +01:00