SWMMVis  6.0.0-alpha.4
Qt6/C++ GIS-based graphical user interface for the SWMMVis engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
featurelayer.h
Go to the documentation of this file.
1
37#ifndef FEATURELAYER_H
38#define FEATURELAYER_H
39
44
45#include <QJsonObject>
46#include <QString>
47#include <QVector>
48
49#include <memory>
50
51class GISRasterLayer;
52class SWMM2DMeshLayer;
53class MapCanvas;
54
76
77[[nodiscard]] QString featureLayerRoleLabel(FeatureLayerRole r);
78[[nodiscard]] QString featureLayerRoleToken(FeatureLayerRole r);
79[[nodiscard]] FeatureLayerRole featureLayerRoleFromToken(const QString &token);
86
96struct ZPolicy
97{
98 enum class Source { None = 0, Constant, Raster, Mesh };
99
102 int rasterBand = 1;
103 double constant = 0.0;
108 double densifySpacing = 0.0;
111 double zScale = 1.0;
113 bool resampleOnEdit = true;
114
115 [[nodiscard]] bool isThreeD() const { return source != Source::None; }
116 [[nodiscard]] QJsonObject toJson() const;
117 [[nodiscard]] static ZPolicy fromJson(const QJsonObject &o);
118 [[nodiscard]] bool operator==(const ZPolicy &o) const;
119 [[nodiscard]] bool operator!=(const ZPolicy &o) const { return !(*this == o); }
120};
121
127{
128 Q_OBJECT
129
130public:
137
139 explicit FeatureLayer(OpenSWMMVisWorkspace *parent = nullptr);
140 ~FeatureLayer() override;
141
150 [[nodiscard]] static FeatureLayer *create(const QString &gpkgPath,
151 const QString &desiredName,
153 const ZPolicy &zPolicy,
154 const Schema &schema,
155 const QString &srsWkt,
157 QString *error = nullptr,
158 OpenSWMMVisWorkspace *parent = nullptr);
159
161 [[nodiscard]] bool openTable(const QString &gpkgPath, const QString &table,
162 QString *error = nullptr);
163
164 [[nodiscard]] QString gpkgPath() const { return m_gpkgPath; }
165 [[nodiscard]] QString tableName() const { return m_table; }
169 [[nodiscard]] bool isEditable() const;
170
171 // ----- Edit session ---------------------------------------------------
172
187 [[nodiscard]] bool isEditing() const { return m_editing; }
190 void setEditing(bool on);
191
192 // ----- Schema ---------------------------------------------------------
193
194 [[nodiscard]] Schema schema() const;
195 [[nodiscard]] bool addField(const FieldDef &f, QString *error = nullptr);
196 [[nodiscard]] bool removeField(const QString &name, QString *error = nullptr);
197
198 // ----- Features -------------------------------------------------------
199
200 [[nodiscard]] GeometryType geometryType() const;
201 [[nodiscard]] bool isThreeD() const;
202 [[nodiscard]] int count() const;
203 [[nodiscard]] QVector<FeatureId> featureIds() const;
204 [[nodiscard]] bool feature(FeatureId id, Feature &out) const;
205 [[nodiscard]] QVector<Feature> allFeatures() const;
206
209 [[nodiscard]] FeatureId addFeature(const Feature &f, QString *error = nullptr);
210 [[nodiscard]] bool setGeometry(FeatureId id, const FeatureGeometry &g,
211 QString *error = nullptr);
212 [[nodiscard]] bool setAttributes(FeatureId id, const QVariantMap &attrs,
213 QString *error = nullptr);
214 [[nodiscard]] bool setFeature(FeatureId id, const Feature &f,
215 QString *error = nullptr);
216 [[nodiscard]] bool removeFeature(FeatureId id, QString *error = nullptr);
217
218 // ----- Role and Z -----------------------------------------------------
219
220 [[nodiscard]] FeatureLayerRole role() const { return m_role; }
222
223 [[nodiscard]] ZPolicy zPolicy() const { return m_zPolicy; }
224 void setZPolicy(const ZPolicy &p);
225
238 int sampleZ(FeatureGeometry &g, const MapCanvas *canvas,
239 bool densify = true) const;
240
244 int resampleAllZ(const MapCanvas *canvas, QString *error = nullptr);
245
247 [[nodiscard]] int unsampledZCount() const;
248
249 // ----- Layer overrides ------------------------------------------------
250
251 [[nodiscard]] QString sourceDescription() const override;
252 [[nodiscard]] QVector<QPair<QString, QString>> extendedMetadata() const override;
253
254 // ----- Persistence ----------------------------------------------------
255
258 [[nodiscard]] QJsonObject toJson() const;
259 void applyJson(const QJsonObject &o);
260
261signals:
264 void featuresChanged(const QVector<qint64> &ids);
266 void roleChanged(int role);
269 void editingChanged(bool editing);
270
271private:
274 void bindStore();
277 void afterWrite(const QVector<qint64> &ids);
278
280 [[nodiscard]] GISRasterLayer *rasterSource(const MapCanvas *canvas) const;
281 // Elaborated type specifier: the inherited enumerator
282 // OpenSWMMVisLayer::SWMM2DMeshLayer hides the class name in this scope.
283 [[nodiscard]] class SWMM2DMeshLayer *meshSource(const MapCanvas *canvas) const;
284
285 std::unique_ptr<openswmmvis::feature::FeatureStore> m_store;
286 QString m_gpkgPath;
287 QString m_table;
289 ZPolicy m_zPolicy;
292 bool m_editing = false;
293};
294
295Q_DECLARE_METATYPE(FeatureLayer *)
296
297#endif // FEATURELAYER_H
An editable, GeoPackage-backed vector layer.
Definition featurelayer.h:127
int count() const
Definition featurelayer.cpp:374
openswmmvis::feature::Schema Schema
Definition featurelayer.h:135
bool isEditable() const
True when the store is open for writing — a CAPABILITY, not a mode. A layer can be writable and still...
Definition featurelayer.cpp:293
bool isThreeD() const
Definition featurelayer.cpp:369
QString sourceDescription() const override
Human-readable source of this layer: a file path, a service URL, or a description for in-memory / der...
Definition featurelayer.cpp:611
void zPolicyChanged()
void schemaChanged()
bool removeField(const QString &name, QString *error=nullptr)
Definition featurelayer.cpp:348
QVector< FeatureId > featureIds() const
Definition featurelayer.cpp:379
Schema schema() const
Definition featurelayer.cpp:331
QVector< QPair< QString, QString > > extendedMetadata() const override
Ordered key→value pairs of TYPE-SPECIFIC metadata, rendered by the Metadata tab below the common bloc...
Definition featurelayer.cpp:618
bool setGeometry(FeatureId id, const FeatureGeometry &g, QString *error=nullptr)
Definition featurelayer.cpp:412
bool feature(FeatureId id, Feature &out) const
Definition featurelayer.cpp:384
void setEditing(bool on)
Definition featurelayer.cpp:298
openswmmvis::feature::Feature Feature
Definition featurelayer.h:132
QJsonObject toJson() const
The .oswp payload, minus the keys ProjectSerializer owns (path / name / visible / opacity).
Definition featurelayer.cpp:644
void featuresChanged(const QVector< qint64 > &ids)
Emitted after any successful write. ids lists the features affected; empty means "everything changed"...
FeatureLayerRole role() const
Definition featurelayer.h:220
bool addField(const FieldDef &f, QString *error=nullptr)
Definition featurelayer.cpp:336
openswmmvis::feature::FeatureGeometry FeatureGeometry
Definition featurelayer.h:133
void setRole(FeatureLayerRole r)
Definition featurelayer.cpp:462
QVector< Feature > allFeatures() const
Definition featurelayer.cpp:389
bool setAttributes(FeatureId id, const QVariantMap &attrs, QString *error=nullptr)
Definition featurelayer.cpp:423
void editingChanged(bool editing)
The edit session opened (true) or closed (false).
bool isEditing() const
Whether this layer is currently being edited.
Definition featurelayer.h:187
GeometryType geometryType() const
Definition featurelayer.cpp:364
static FeatureLayer * create(const QString &gpkgPath, const QString &desiredName, GeometryType type, const ZPolicy &zPolicy, const Schema &schema, const QString &srsWkt, FeatureLayerRole role, QString *error=nullptr, OpenSWMMVisWorkspace *parent=nullptr)
Create a new table in gpkgPath and return an open layer on it.
Definition featurelayer.cpp:241
~FeatureLayer() override
Definition featurelayer.cpp:235
openswmmvis::feature::GeometryType GeometryType
Definition featurelayer.h:134
int sampleZ(FeatureGeometry &g, const MapCanvas *canvas, bool densify=true) const
Sample Z for g according to zPolicy, in place.
Definition featurelayer.cpp:507
bool openTable(const QString &gpkgPath, const QString &table, QString *error=nullptr)
Open an existing table for editing.
Definition featurelayer.cpp:267
void applyJson(const QJsonObject &o)
Definition featurelayer.cpp:654
int resampleAllZ(const MapCanvas *canvas, QString *error=nullptr)
sampleZ every feature, writing the results back. Returns the number of features changed....
Definition featurelayer.cpp:573
openswmmvis::feature::FeatureId FeatureId
Definition featurelayer.h:131
FeatureId addFeature(const Feature &f, QString *error=nullptr)
Insert f, reusing its id when free (stable ids across undo/redo — see FeatureStore::addFeature).
Definition featurelayer.cpp:394
bool removeFeature(FeatureId id, QString *error=nullptr)
Definition featurelayer.cpp:447
openswmmvis::feature::FieldDef FieldDef
Definition featurelayer.h:136
QString tableName() const
Definition featurelayer.h:165
int unsampledZCount() const
Total NaN-Z vertices across every feature.
Definition featurelayer.cpp:599
bool setFeature(FeatureId id, const Feature &f, QString *error=nullptr)
Definition featurelayer.cpp:434
void roleChanged(int role)
void setZPolicy(const ZPolicy &p)
Definition featurelayer.cpp:469
QString gpkgPath() const
Definition featurelayer.h:164
ZPolicy zPolicy() const
Definition featurelayer.h:223
A map layer backed by a GDAL raster dataset.
Definition gisrasterlayer.h:61
A map layer backed by a GDAL/OGR vector dataset.
Definition gisvectorlayer.h:103
The central map display widget — QGIS-style hybrid rendering.
Definition mapcanvas.h:63
QString name() const
Returns the user-visible name of this layer.
Definition openswmmvislayer.cpp:62
Top-level project container managing sessions, the SWMM model layer, and persistence paths for one SW...
Definition openswmmvisworkspace.h:42
Definition swmm2dmeshlayer.h:64
A complete feature geometry: a type plus zero or more parts.
Definition featuregeometry.h:205
An ordered list of FieldDef, with name lookup.
Definition featuretypes.h:104
const char * token
Definition diagramspec.cpp:20
enum OpenSWMM::Render::@788::Value::Type type
openswmmvis::feature::Schema featureLayerRoleTemplate(FeatureLayerRole r)
The fields a newly created layer of role r starts with.
Definition featurelayer.cpp:102
openswmmvis::feature::GeometryType featureLayerRoleGeometry(FeatureLayerRole r)
The geometry type a role implies, for the New-layer dialog's default. GeometryType::None when the rol...
Definition featurelayer.cpp:88
FeatureLayerRole
What a feature layer is FOR.
Definition featurelayer.h:67
@ General
No template.
@ ParameterZone
Roughness, land use, infiltration.
@ Breakline
3D constraint lines / hard points.
@ DomainBoundary
Mesh domain polygon(s); interior rings become holes.
@ SwmmDelineation
Source for Import Feature Layer → SWMM objects.
@ BoundaryCondition
Lines mapped onto 2D mesh boundary edges.
@ Region
Refinement, quad and min-cell-size regions.
QString featureLayerRoleLabel(FeatureLayerRole r)
Definition featurelayer.cpp:48
FeatureLayerRole featureLayerRoleFromToken(const QString &token)
Definition featurelayer.cpp:76
QString featureLayerRoleToken(FeatureLayerRole r)
Definition featurelayer.cpp:62
Map layer backed by an OGR vector dataset (Shapefile, GeoJSON, GeoPackage, …), rendering features as ...
ArrowPlacement p
Definition linesymbollayer.cpp:27
qint64 FeatureId
Definition featuretypes.h:33
GeometryType
Geometry kinds an editable feature layer can hold.
Definition featuregeometry.h:52
QVector< int > parent
union-find
Definition pslgminsize.cpp:176
How a layer's vertex Z values are obtained (PLAN §4.1).
Definition featurelayer.h:97
bool operator!=(const ZPolicy &o) const
Definition featurelayer.h:119
bool resampleOnEdit
Definition featurelayer.h:113
int rasterBand
Definition featurelayer.h:102
bool operator==(const ZPolicy &o) const
Definition featurelayer.cpp:210
Source
Definition featurelayer.h:98
double zScale
Definition featurelayer.h:111
double densifySpacing
Definition featurelayer.h:108
bool isThreeD() const
Definition featurelayer.h:115
QString sourceLayerId
OpenSWMMVisLayer::layerId() of the raster or mesh.
Definition featurelayer.h:101
double constant
Definition featurelayer.h:103
static ZPolicy fromJson(const QJsonObject &o)
Definition featurelayer.cpp:192
QJsonObject toJson() const
Definition featurelayer.cpp:173
Source source
Definition featurelayer.h:100
One editable feature: identity, geometry, attributes.
Definition featuretypes.h:150
One user-defined attribute column.
Definition featuretypes.h:67