150 Commits

Author SHA1 Message Date
Nyall Dawson
e4dab7c5c7 Fix intermittently failing QgsGeometry asGML tests 2017-08-17 17:53:36 +10:00
Nyall Dawson
d81a1a3b5f Return std::unique_ptrs where possible
When a class isn't exposed to Python, we should return a
std::unique_ptr whenever a returned pointer value is owned
by the caller.
2017-08-17 16:28:18 +10:00
Juergen E. Fischer
4f9a9e0360 s/( )/()/; s/== /== /; s/!= /!= /; 2017-07-19 09:19:37 +02:00
Nyall Dawson
38a13ff5af Make pole of inaccessibility calculation handle multipolygons 2017-07-17 07:24:33 +10:00
rldhont
aa24896ce1 Fix GML2 after GML3 improvements 2017-07-07 13:01:31 +02:00
rldhont
fe8522f811 [Geometry] Polygon::asGml: fix outer and add tests 2017-07-04 14:07:59 +02:00
Matthias Kuhn
e7f50524b8 Make QgsLineString Z and M values NaN if unspecified 2017-06-26 08:21:11 +02:00
Nyall Dawson
b620b6e00e Add method to QgsGeometryFactory to create a multigeometry
from any wkb type

Eg calling QgsGeometryFactory::createCollectionOfType( QgsWkbTypes::PolygonM )
will return a new QgsMultiPolygonV2 with M values.
2017-06-14 21:15:48 +10:00
Matthias Kuhn
21dae496a9 Fix geometry tests for NaN 2017-06-14 07:37:31 +02:00
Martin Dobias
2964c33d63 Reshape tool: use default Z value for 3D geometries 2017-06-08 21:56:21 +02:00
Matthias Kuhn
2bbadbacb7 Rename qgspoint.h and qgspointv2.h
To qgspointxy.h
And qgspoint.h
2017-06-02 19:53:37 +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
Martin Dobias
e001d5c70a Add QgsGeometry::isSimple() - useful for self-intersection checks 2017-05-18 09:02:41 +08:00
lbartoletti
bc0c3a22b0 Add inclination method for QgsPointV2 (#4536) 2017-05-13 17:29:50 +10:00
lbartoletti
13c1318a5f New geometry class: QgsRegularPolygon (#4502) 2017-05-10 22:23:28 +10:00
Nyall Dawson
e861f33b54 Fix memory leak 2017-04-30 09:23:01 +10:00
Juergen E. Fischer
b29a10eeb7 hub.qgis.org moved to issues.qgis.org 2017-04-29 23:34:27 +02:00
lbartoletti
84471f2e6d New classes for circle and ellipse. 2017-04-27 10:25:29 +10: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
lbartoletti
fb3d07f3f5 [FEATURE] New class for triangle
Adds a new geometry class for Triangle geometries

Methods include orthocenter, bisectors, medians, medial, circumscribed (center,
radius), inscribed (center, radius)

Also adds make_triangle expression function for creating triangles
2017-03-21 18:50:47 +10:00
Nyall Dawson
51c1d67091 Fix Coverity null pointer dereference warning 2017-03-21 15:32:56 +10:00
Juergen E. Fischer
b9162dccdf scripts/astyle-all.sh run 2017-03-03 15:37:12 +01:00
Marco Hugentobler
08c2e66b88 Add unit test if circular arc segmentation produces the same vertices in both directions 2017-02-22 11:59:40 +01:00
Denis Rouzaud
7812d4fb17 remove the-prefix from source code
this might result in variables having the same name as some methods
2017-02-21 18:14:58 +01:00
Nyall Dawson
d19e70700f Ensure all pointer variables are initialized to nullptr 2017-02-18 20:23:18 +10:00
mhugent
43277909cc Merge pull request #4130 from mhugent/wfs_gml_from_geometry
Take wfs gml directly from geometry
2017-02-17 10:51:10 +01:00
Marco Hugentobler
04475f8e32 Adapt gml3 unit tests to use <posList> instead of <coordinates> 2017-02-16 14:38:22 +01:00
Nyall Dawson
65e2dda468 Update indentation 2017-02-15 08:48:16 +10:00
lbartoletti
3703bf7396 Move midpoint to QgsGeometryUtils 2017-02-15 08:48:12 +10:00
lbartoletti
e851b68c53 Add some utils functions for QgsPointV2 (distance3D, midpoint) 2017-02-15 08:48:08 +10:00
Nyall Dawson
42ec4e65e1 Fix some leaks in geometry test suite 2017-02-08 07:30:17 +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
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
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
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
Denis Rouzaud
0a63d1f2c2 [spellcheck] properly look into various cases and add more fixes" 2017-01-16 16:39:20 +01:00
Marco Hugentobler
d3da17910d Adapt numbers in test for QgsLineStringV2::sumUpArea
(forward port from df0f97)
2017-01-10 09:08:33 +10:00
Marco Hugentobler
7107c16ec0 Add unit test that makes sure that the area of a closed compound curve ring is the same as a closed linestring with the same number of vertices
(forward port from be71066)
2017-01-10 09:05:12 +10:00
Matthias Kuhn
dfd9833467 Let all tests work with a proper QgsApplication instance 2016-12-20 01:20:08 +01:00
Nyall Dawson
379e7a42e6 Add some more QgsVector operators, allow use of QgsVector with QgsPointV2 2016-12-09 08:13:48 +10:00
Nyall Dawson
57f482e2d9 Add method to QgsGeometry to remove interior rings from a polygon
With an optional area threshold
2016-11-28 12:08:21 +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
Nyall Dawson
d5c307eb05 Add method to find distance from a point to a poylgon's boundary 2016-11-14 15:52:41 +10:00
Martin Dobias
d729951dcd Remove caching of WKB from QgsGeometry (was kept just for compatibility)
Also improves the API to export/import WKB as QByteArray
2016-11-14 13:36:12 +08:00
Nyall Dawson
983fe24806 Port some API from QgsPoint to QgsPointV2 2016-11-07 12:20:59 +10:00
Martin Dobias
24fbe1a080 Fix crash in node tool after deleting the whole geometry (fixes #15659)
Made sure that both closestVertex() and closestSegment() return negative
distance on error (e.g. with null or emtpy geometry).

Also fixes snapping when dealing with layers with null/invalid geometries

(cherry picked from commit c093d5188fad685c4a596ff23c27aad7d151dac2)
2016-10-31 12:51:21 +08:00
Nyall Dawson
ef34e393dc Add method to QgsGeometry to extend the start/end of a linestring 2016-10-31 07:56:24 +10:00