37 Commits

Author SHA1 Message Date
Matthias Kuhn
c07f02d6dc QgsAbstractGeometryV2::wkbType always returns a valid type 2016-06-07 10:37:20 +02:00
Matthias Kuhn
fdb28c09aa More string comparison fixes 2016-06-07 10:37:20 +02:00
Marco Hugentobler
c0d12dcdeb [FEATURE]: possibility to set the segmentation tolerance (maximum angle or maximum difference) 2016-05-19 11:02:43 +02:00
Marco Hugentobler
679e8f2e8d Convert added/changed geometries into the right before sending back to provider 2016-04-27 16:26:07 +02:00
Juergen E. Fischer
e503c705a1 change QgsAbstractGeometryV2::coordinateSequence() to return a
implicitly shared copy of an internal cache instead of recreating the
coordinate sequence again and again.

Improves performance of the nodetool on large features a lot (refs #13963)

Also introduce Qgs(Coordinate|Ring|Point)SequenceV2 typedefs.
2016-02-21 21:49:51 +01:00
Nyall Dawson
6116fdcdb4 Add a bunch of missing geometry cache clears 2016-02-21 19:55:15 +11:00
Nyall Dawson
50f01a2ac8 Optimise storage/calculation of geometry bounding boxes
- removes storage of bounding box from QgsPointV2 (gives significant
decrease in size of object)
- more efficient calculation of bounding box for linestrings

Additionally, this commit moves the bounding box invalidation to a
virtual QgsAbstractGeometryV2::clearCache() method, so that other
non-bounding box caches can also be cleared when the geometry
is modified.
2016-02-21 16:26:45 +11:00
Juergen E. Fischer
2ea3d7744d port more WKB parsing to Qgs(Const)WkbPtr including bounds checking 2016-02-09 14:20:07 +01:00
Nyall Dawson
c3a57434d9 Fix clazy 'pass small and trivially-copyable type by value' warnings 2016-02-02 19:47:21 +11:00
Peter Petrik
84e8b10d2d fix when 3D and M 2016-01-28 11:39:11 +01:00
Peter Petrik
86e67713d6 fix #13669 (Circular string generates duplicated nodes) 2016-01-28 11:04:40 +01:00
Marco Hugentobler
375ae60c49 Intendation 2016-01-04 11:31:09 +01:00
Marco Hugentobler
bf3fbec755 Remove the whole ring / linestring if number of vertices to small 2015-12-28 18:24:32 +01:00
Sebastian Dietrich
c28c493b65 fix all occurrences of multiple statements in a single line
This was accomplished by running scripts/astyle-all.sh.
2015-12-21 01:21:06 +01:00
Nyall Dawson
4e18d54555 Tests and fixes for QgsPolygonV2
- Setting exterior ring will force all interior rings to match
dimensionality of exterior ring
- add equality operator
- use correct WKB types for rings when creating polygon from WKB
- segmentize curves when setting exterior ring with curved segments
- fix export to GML2/3 (should use LinearRing, not LineString as
ring element tag)
2015-12-15 22:36:41 +11:00
Nyall Dawson
233f67b419 QgsPolygonV2 tests and fixes
- fixes for handling Polygon25D
- add QgsAbstractGeometryV2::convertTo( QgsWKBTypes::Type type ) for
easy conversion between geometry types
- fix crash when calculating perimeter with no exterior ring
- ensure that added rings respect dimensionality of polygon (avoids
issues such as polygons with z having a ring without z, or a
Polygon25D with LineStringZ rings)
- if a curved ring is added to a polygon then a segmentized version
of the ring is used (can't have a Polygon with a CircularString
ring)
- when calling setInteriorRings, make sure empty rings are skipped
and that all rings are converted to correct type for polygon
- don't crash when requesting or removing interior ring with
index < 0
2015-12-11 18:40:11 +11:00
Nyall Dawson
d2bf8d8923 Add equality operators to QgsLineStringV2 2015-12-11 18:40:11 +11:00
Nyall Dawson
d388a4f1a4 [geometry] Add method to drop z/m values from a geometry 2015-12-01 16:33:44 +11:00
Nyall Dawson
22af16a1fb Mark QgsLineStringV2 as a critical class
Now has as close to 100% unit test coverage as possible
2015-11-27 16:32:57 +11:00
Nyall Dawson
1f33011960 Add more tests to QgsLineStringV2, fix vertexAngle calculation 2015-11-27 16:32:09 +11:00
Nyall Dawson
74ca290bd3 QgsLineStringV2 fixes
- fix incorrect centroid calculation (was always returning 0,0)
- fix closestSegment when numPoints < 2
- fix broken leftOf calculation for closestSegment
- area calculation when numPoints < 2

Plus add more unit tests
2015-11-26 16:56:30 +11:00
Nyall Dawson
f3507747a7 QgsLineStringV2: better handling of LineString25D, more tests 2015-11-25 17:00:55 +11:00
Nyall Dawson
ff36573a74 Fix crash in QgsLineStringV2::append if non z/m line appended
to a LineString with z/m

Add a bunch of unit tests for QgsLineStringV2 and fix some other
minor issues which they identified.
2015-11-24 16:38:40 +11:00
Nyall Dawson
5019fe244c Add methods to directly retrieve/set coordinates for linestring nodes
Also add method to create QgsPointV2 from a QPointF
2015-11-18 21:49:02 +11:00
Nyall Dawson
86c1ffa0aa Add reversed method to QgsCurveV2
Also clean up and add missing docs for QgsLineStringV2
2015-11-18 16:24:27 +11:00
Nyall Dawson
8783fe2763 Don't store QgsLineStringV2 coordinates in QPolygonF
This stores coordinates as qreal, which on some platforms is float,
and not suitable for accurate geometry storage.
2015-11-18 16:24:17 +11:00
Nyall Dawson
b7e1cae4f0 Switch double quoted single character to single quotes for some
QString methods

Using single quotes is a significant performance boost. Rough
benchmarks indicate the QString single quote methods take
about 15% of the time the double quote variants take.
2015-11-02 17:55:08 +11:00
Nyall Dawson
a333fc8248 Add method to geometries for adding z/m dimension, initialized
to a specified value
2015-10-14 08:39:05 +11:00
Sandro Mani
e9e638f6f4 Geometry Checker and Geometry Snapper plugins 2015-09-21 10:03:24 +02:00
Marco Hugentobler
56316ddcad Consider curved geometries in marker line symbol layer 2015-09-04 14:53:06 +02:00
Marco Hugentobler
8b8258442a Fix rubberband issues 2015-08-28 13:59:48 +02:00
Marco Hugentobler
c39ffe9fc2 [FEATURE]: Tool to add circular strings with start point, curve point and end point 2015-08-17 17:14:05 +02:00
Marco Hugentobler
d6d5be9448 Set wkb typ if adding the first line in QgsLineStringV2::append 2015-07-29 14:08:33 +02:00
Nyall Dawson
cc1a34fcea Guard against some crashes in geometry 2015-07-16 16:00:46 +10:00
Denis Rouzaud
9e3183c63f Revert "sort includes"
This reverts commit 2b7d3d3c73b50ba6dc74abec6dd652ff1b87c0ec.
2015-06-10 14:54:47 +02:00
Denis Rouzaud
2b7d3d3c73 sort includes 2015-06-10 13:59:08 +02:00
Marco Hugentobler
68fe5f5791 [FEATURE:] New geometry classes 2015-05-25 08:53:49 +02:00