28#ifndef FEATUREGEOMETRY_H
29#define FEATUREGEOMETRY_H
38class OGRSpatialReference;
96 [[nodiscard]]
bool isEmpty()
const {
return pts.isEmpty(); }
97 [[nodiscard]]
int size()
const {
return pts.size(); }
102 [[nodiscard]]
bool hasZ()
const
103 {
return !
pts.isEmpty() &&
z.size() ==
pts.size(); }
106 [[nodiscard]]
double zAt(
int i)
const;
118 [[nodiscard]] QPolygonF
toPolygon()
const;
126 [[nodiscard]]
double length2D()
const;
182 [[nodiscard]]
double netArea()
const;
213 [[nodiscard]]
bool isEmpty()
const;
216 [[nodiscard]]
const QVector<Part> &
parts()
const {
return m_parts; }
217 [[nodiscard]] QVector<Part> &
parts() {
return m_parts; }
218 [[nodiscard]]
int partCount()
const {
return m_parts.size(); }
227 [[nodiscard]]
bool hasZ()
const;
234 [[nodiscard]]
bool zRange(
double &minZ,
double &maxZ)
const;
239 [[nodiscard]]
double area()
const;
242 [[nodiscard]]
double length()
const;
282 [[nodiscard]] OGRGeometry *
toOGR(OGRSpatialReference *srs =
nullptr)
const;
293 QVector<Part> m_parts;
A complete feature geometry: a type plus zero or more parts.
Definition featuregeometry.h:205
void addPart(const Part &p)
Definition featuregeometry.h:220
OGRGeometry * toOGR(OGRSpatialReference *srs=nullptr) const
Build a new OGR geometry. The CALLER OWNS the result and must release it with OGRGeometryFactory::des...
Definition featuregeometry.cpp:669
FeatureGeometry()=default
bool operator==(const FeatureGeometry &o) const
Definition featuregeometry.cpp:748
bool validate(GeometryType expected, QString *reason=nullptr) const
Structural check against expected.
Definition featuregeometry.cpp:427
bool operator!=(const FeatureGeometry &o) const
Definition featuregeometry.h:289
void setHasZ(bool on)
Definition featuregeometry.cpp:404
static FeatureGeometry fromOGR(const OGRGeometry *g)
Build a FeatureGeometry from g.
Definition featuregeometry.cpp:591
void normalizeOrientation()
Definition featuregeometry.cpp:422
int vertexCount() const
Definition featuregeometry.cpp:314
int densify(double spacing)
Definition featuregeometry.cpp:412
bool isValid() const
Definition featuregeometry.h:214
static int ogrTypeFor(GeometryType t, bool withZ)
Definition featuregeometry.cpp:733
int unsampledZCount() const
Definition featuregeometry.cpp:341
void setType(GeometryType t)
Definition featuregeometry.h:211
bool isEmpty() const
Definition featuregeometry.cpp:306
double length() const
Definition featuregeometry.cpp:397
QRectF boundingRect() const
Definition featuregeometry.cpp:379
QVector< Part > & parts()
Definition featuregeometry.h:217
FeatureGeometry(GeometryType type)
Definition featuregeometry.h:208
bool zRange(double &minZ, double &maxZ) const
Definition featuregeometry.cpp:355
const QVector< Part > & parts() const
Definition featuregeometry.h:216
GeometryType type() const
Definition featuregeometry.h:210
double area() const
Definition featuregeometry.cpp:390
bool hasZ() const
Definition featuregeometry.cpp:324
int partCount() const
Definition featuregeometry.h:218
void clear()
Definition featuregeometry.h:221
size_t i
Definition contourjob.cpp:27
const char * token
Definition diagramspec.cpp:20
DiagramType t
Definition diagramspec.cpp:20
ArrowPlacement p
Definition linesymbollayer.cpp:27
int index
Position in m_quadRegions / m_quadReports.
Definition meshgenerator.cpp:153
Definition featuregeometry.h:40
bool isMultiType(GeometryType t)
True when t is one of the Multi* kinds.
Definition featuregeometry.cpp:98
QString geometryTypeLabel(GeometryType t)
Human label for t, for combo boxes and metadata rows.
Definition featuregeometry.cpp:56
QString geometryTypeToken(GeometryType t)
Stable token for t, for .oswp persistence. Round-trips through geometryTypeFromToken.
Definition featuregeometry.cpp:70
GeometryType geometryTypeFromToken(const QString &token)
Inverse of geometryTypeToken; GeometryType::None when unknown.
Definition featuregeometry.cpp:84
GeometryType toMultiType(GeometryType t)
The Multi* kind corresponding to t (identity for Multi* inputs).
Definition featuregeometry.cpp:105
GeometryType
Geometry kinds an editable feature layer can hold.
Definition featuregeometry.h:52
One part of a geometry: a polygon (exterior + holes), a line run, or a single point.
Definition featuregeometry.h:173
bool operator==(const Part &o) const
Definition featuregeometry.cpp:297
bool operator!=(const Part &o) const
Definition featuregeometry.h:193
bool containsPoint(const QPointF &p) const
Definition featuregeometry.cpp:279
Ring exterior
Definition featuregeometry.h:174
QRectF boundingRect() const
Definition featuregeometry.cpp:266
double netArea() const
Definition featuregeometry.cpp:271
QVector< Ring > holes
Interior rings; polygon parts only.
Definition featuregeometry.h:175
bool isEmpty() const
Definition featuregeometry.h:177
void normalizeOrientation()
Definition featuregeometry.cpp:287
One ordered run of vertices, with optional per-vertex Z.
Definition featuregeometry.h:90
int densify(double spacing)
Insert intermediate vertices so no segment is longer than spacing map units.
Definition featuregeometry.cpp:208
void insertVertex(int index, const QPointF &p, double zVal)
Definition featuregeometry.cpp:188
void moveVertex(int index, const QPointF &p)
Definition featuregeometry.cpp:202
void syncZLength()
Definition featuregeometry.cpp:125
bool operator==(const Ring &o) const
Definition featuregeometry.cpp:249
double signedArea() const
Definition featuregeometry.cpp:151
bool containsPoint(const QPointF &p) const
Definition featuregeometry.cpp:182
bool operator!=(const Ring &o) const
Definition featuregeometry.h:161
QPolygonF toPolygon() const
Definition featuregeometry.cpp:138
QVector< QPointF > pts
Definition featuregeometry.h:91
void normalizeCCW()
Definition featuregeometry.cpp:171
void ensureZ()
Definition featuregeometry.cpp:132
QVector< double > z
Definition featuregeometry.h:94
int size() const
Definition featuregeometry.h:97
void clearZ()
Definition featuregeometry.h:113
bool isSimpleRing() const
Definition featuregeometry.cpp:165
double length2D() const
Definition featuregeometry.cpp:157
bool isEmpty() const
Definition featuregeometry.h:96
double zAt(int i) const
Definition featuregeometry.cpp:119
QRectF boundingRect() const
Definition featuregeometry.cpp:146
void removeVertex(int index)
Definition featuregeometry.cpp:195
bool hasZ() const
Definition featuregeometry.h:102