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
meshgenerationdialog.h
Go to the documentation of this file.
1
22#ifndef MESHGENERATIONDIALOG_H
23#define MESHGENERATIONDIALOG_H
24
25#include "mesh/meshgenerator.h"
27#include "mesh/meshquadregion.h"
28#include "mesh/meshresult.h"
29#include "mesh/inpmeshwriter.h"
30#include "mesh/dtmthinner.h"
31#include "mesh/pslgminsize.h"
32
33#include <QDialog>
34#include <QFutureWatcher>
35#include <QString>
36#include <QStringList>
37#include <QVector>
38
40class GISVectorLayer;
42
43class QCheckBox;
44class QComboBox;
45class QDoubleSpinBox;
46class QGroupBox;
47class QLabel;
48class QLineEdit;
49class QListWidget;
50class QProgressBar;
51class QPushButton;
52class QRadioButton;
53class QSpinBox;
54class QTableWidget;
55
56class MeshGenerationDialog : public QDialog
57{
58 Q_OBJECT
59
60public:
61
62 // -----------------------------------------------------------------------
63 // Data types exchanged between the main thread and the worker thread.
64 // -----------------------------------------------------------------------
65
69 enum class NNVariant { Sibson, Laplace };
70
75 {
76 // Files
77 QString inpPath;
78 QString dtmPath;
79
80 // Domain (outer boundaries — setDomains feeds these to Triangle)
81 QVector<QPolygonF> domains;
82
83 // Holes: interior rings of domain polygons. Each entry is one
84 // closed ring of vertices; a centroid seed point is derived from it
85 // inside runMeshPipeline and passed to MeshGenerator::addHole().
86 QVector<QVector<QPointF>> holeRings;
87
88 // ── Boundary source identity ─────────────────────────────────────
89 // collectInputs records only WHICH boundary to use; the worker
90 // re-opens vector sources by path (fresh GDAL handle — handles must
91 // not cross threads) and runs the UnaryUnion dissolve + ring prep
92 // itself, so the GUI thread never blocks on 65k-hole boundaries.
93 // domains/holeRings above are left empty by collectInputs and are
94 // filled by the worker in its own copy of this struct.
97 QString boundaryPath;
100 QVector<QVector<QPointF>> subcatchPolys;
102
103 // ── Unfiltered feature candidates ────────────────────────────────
104 // Collected without the in-domain test (domains are unknown on the
105 // GUI thread now). The worker filters them against the finished
106 // domains and assigns PSLG markers in the original collectInputs
107 // order — junctions → conduits → aux points → aux lines → region
108 // markers — so marker numbering is unchanged.
109 struct CandidateNode { QString name; QPointF xy; double rimZ = 0.0; bool hasRim = false; };
110 QVector<CandidateNode> candidateNodes;
111 QVector<QPair<QString, QVector<QPointF>>> candidateLinks;
112 struct AuxPoint { QPointF xy; double z = 0.0; bool hasZ = false; };
113 QVector<AuxPoint> auxPoints;
114 struct AuxLine { QVector<QPointF> path; QVector<double> z; bool hasZ = false; };
115 QVector<AuxLine> auxLines;
116 QVector<QPair<QString, QPointF>> subcatchSeeds;
117 bool includeJunctions = false;
118 bool includeConduits = false;
119 bool includeSubcatch = false;
120
121 // PSLG: pre-extracted from the SWMM model and aux layers
122 QVector<mesh::SteinerPoint> steinerPoints;
123 QVector<mesh::ConstraintSegment> constraintSegs;
124 QVector<mesh::RegionMarker> regionMarkers;
125
126 // Coupling-map lookup tables
127 QHash<int, QString> nodeMarkerToTag;
128 QHash<int, QString> edgeMarkerToTag;
129
130 // Plan Part B — decoupled 1D↔2D mapping: every model node with
131 // coordinates (id, xy), fed to mesh::mapNodesToMesh after Triangle
132 // runs. Independent of the junctions-as-Steiner checkbox.
133 QVector<QPair<QString, QPointF>> couplingNodes;
134 bool mapNodesAfterGen = true;
135
136 // WKT of the mesh (model) CRS — passed to the worker so it can build
137 // a mesh→DTM coordinate transform when the raster CRS differs.
138 QString meshCRSWkt;
139
140 // Ramer-Douglas-Peucker epsilon (map units) applied to all
141 // polygon rings and polyline paths before they enter Triangle.
142 // 0 = disabled.
143 double pslgSimplifyEps = 0.0;
144
145 // Grid cell size for Steiner point deduplication before Triangle.
146 // Near-coincident points (within this distance) from different
147 // sources are merged to one. 0 = disabled.
148 double pslgSnapEps = 0.0;
149
150 // 2026-07-19 — boundary-aware terrain filter (worker Step 2). DTM
151 // terrain Steiner candidates outside the domain, inside a hole
152 // ring, or closer than this to any constrained segment (boundary /
153 // hole / constraint paths) or mandatory Steiner vertex are dropped
154 // so they cannot force slivers along the boundary. <= 0 = auto
155 // (0.5 × effective terrain point spacing).
157
158 // 2026-07-19 — optional boundary densification: split domain/hole
159 // ring edges longer than this into equal parts after RDP
160 // simplification (pure vertex insertion). <= 0 = off.
161 double maxBoundaryEdgeLen = 0.0;
162
163 // Mesh-quality knobs
165
166 // ── Mixed tri-quad output (TRI_QUAD_MESHING_PLAN §3, G2/G3) ──────
167 // Structured patches, already generated and validated on the main
168 // thread (mesh::makeTransfinitePatch / makeSweptPatch), handed to
169 // MeshGenerator::addPatch. genOpts.mergeTrianglePairs / quadMerge
170 // carry the G2 merge request; the worker runs the merge itself AFTER
171 // elevation fill and attribute seeding (so the bed-planarity test
172 // sees real z) rather than inside generate().
173 QVector<mesh::PatchMesh> patches;
174
175 // ── PSLG quad regions (QUAD_MESHING_REDESIGN_PLAN_2026-09-06 §3.1) ──
176 // Regions the GUI thread could resolve itself (named subcatchments —
177 // rings come from SWMMModelLayer's cache, mesh CRS). The worker
178 // appends these AFTER the layer regions below and hands every region
179 // to MeshGenerator::addQuadRegion; the generator validates, resolves
180 // Auto mode, drops terrain Steiners inside Free rings and fills
181 // quadRegionReports().
182 QVector<mesh::QuadRegion> quadRegions;
183 // Polygon layers the WORKER reads with OGR (a GDAL handle must not
184 // cross threads — same rule as boundaryPath). One mesh::QuadRegion
185 // per feature exterior ring, reprojected to the mesh CRS when crsWkt
186 // differs from meshCRSWkt. Usually 0 or 1 entries.
188 QVector<QuadRegionLayerSpec> quadRegionLayers;
193 bool quadEverywhere = false;
197 // Mode / spacing / aspect / alignment / tag applied to every region
198 // from a layer or subcatchment unless a per-feature attribute
199 // (quad_mode, quad_spacing, quad_aspect, quad_angle, tag) overrides it.
200 // ring, alignGuide and corners are unused here.
202 // Acceptance bounds → genOpts.quadRegionBounds, and (for one set of
203 // numbers in the UI) genOpts.quadMerge.{minAngleDeg, maxAngleDeg,
204 // minScaledJacobian, maxAspect}. genOpts.quadCleanup stays default.
206
207 // 2026-08-17 — minimum cell size enforcement
208 // (MIN_CELL_SIZE_ENFORCEMENT_PLAN_2026-08-17.md). minSizePolicy
209 // carries h plus the derived radii; minSizeCleanup enables the
210 // post-Triangle sliver collapse. Both inert when
211 // minSizePolicy.minCellSize <= 0, which is the default, so an
212 // untouched project reproduces its current mesh exactly.
214 bool minSizeCleanup = true;
215
216 // 2026-09-01 — V2 enforcement mode
217 // (MESH_MINSIZE_ENFORCEMENT_V2_AND_GRADING_PLAN_2026-09-01.md Track A).
218 // When on (requires minSizePolicy.enabled()): coupling identities may
219 // merge within the weld radius (the merged node couples via its
220 // containing cell, the nodeMinSeparation demotion idiom), the
221 // effective node separation is raised to at least h, and the
222 // post-mesh cleanup may absorb slivers into identity vertices.
223 // Default off = V1 "advisory" behaviour, bit-identical meshes.
224 bool minSizeEnforce = false;
225
226 // 2026-09-01 — graded sizing (V2 plan Track B). > 0 replaces the
227 // uniform maxArea cap with a size field that keeps maxArea AT the
228 // constrained features and lets the permitted area grow with distance
229 // at this Lipschitz slope — strictly fewer cells, smooth transitions.
230 // Requires genOpts.maxArea > 0 (there is no uniform cap to relax
231 // otherwise). 0 = off (uniform cap, existing behaviour).
232 double sizeGradation = 0.0;
233
234 // Terrain-adaptive thinning
235 bool doThinning = false;
237
238 // Vertical unit conversion: multiply all DTM-sampled Z values by this
239 // factor before writing to the mesh. Accounts for DTM being in a
240 // different vertical unit than the SWMM model.
241 // e.g., DTM in metres + SWMM in feet → factor = 3.28084
242 double zConversionFactor = 1.0;
243
244 // Short, human-readable mesh-CRS identifier ("EPSG:32634", "Local").
245 // Emitted in the ;; SOURCE_CRS: header line. Separate from
246 // meshCRSWkt (full WKT) to keep the header compact.
247 QString meshCRSTag;
248
249 // Human-readable linear-unit name from the mesh CRS ("metre",
250 // "US survey foot", …). Emitted in the ;; UNITS: header so the
251 // file is self-describing. Writer does NOT use it to convert
252 // values — XY are written in project-CRS units, matching today's
253 // engine expectations.
255
256 // 3D aux-line vertices: exact (x,y)->z in mesh CRS, seeded into
257 // elevCache by coordinate so PSLG simplification can't desync a
258 // per-vertex z carried on the (simplified) constraint segment.
259 QVector<QPointF> featureZSeedXY;
260 QVector<double> featureZSeedZ;
261
262 // Node rim-flatten: when nodes use rim elevation and a flatten radius
263 // is set, every terrain / refinement vertex within radius of a node is
264 // forced to that node's rim elevation (invert + maxDepth). Removes the
265 // sliver triangles that terrain/rim misalignment creates around nodes.
266 QVector<QPointF> nodeRimXY;
267 QVector<double> nodeRimZ;
268 double nodeFlattenRadius = 0.0; // mesh units; 0 = off
269 bool nodesUseRim = false;
270
271 // Minimum node separation (mesh units; <= 0 = off): a node candidate
272 // within this distance of an already-kept node is not pinned as a
273 // Steiner vertex — it stays in couplingNodes and the post-generation
274 // mapper couples it to its containing cell instead.
275 double nodeMinSeparation = 0.0;
276
277 // Elevation interpolation for the no-DTM fallback. IDW (configurable
278 // Shepard power) or natural neighbour (Sibson / Laplace); NN falls back
279 // to IDW outside the seed convex hull. Ignored when a DTM is set.
282 double idwPower = 2.0;
283
284 // Output
287 // Uniform per-cell hydraulic seeds, written onto every generated
288 // triangle. Spatially varying values are assigned afterwards from the
289 // Mesh 2D ribbon (cell editor / Cell Data assignment).
290 double manningsN = 0.035;
291 double initDepth = 0.0; // mesh length units
292
293 // ── Region defaults (GG0d, GUI plan §3.3) ────────────────────────
294 // Read out of MeshRegionDefaultsWidget by collectInputs() and copied
295 // here BY VALUE — the worker must never touch the widget.
296 //
297 // infilDefaults goes straight to MeshResult::infilDefaults: the '*'
298 // row and the per-tag rows, unflattened. The pipeline deliberately
299 // writes NO per-cell infiltration rows, because materialising tag rows
300 // per triangle would destroy the inheritance engine decision D-I3 is
301 // built on. Empty unless a row names a method, so an untouched dialog
302 // emits no [2D_INFILTRATION*] section at all.
303 QVector<mesh::InfilDefaultRow> infilDefaults;
304
305 // Manning's n / initial depth are per-TRIANGLE data (MeshTriangle
306 // carries the fields), so region values for them are stamped onto the
307 // cells exactly as manningsN/initDepth above are — only infiltration
308 // uses the inheritance model. Keyed by MeshTriangle::tag, and empty
309 // until a region row is given a value of its own — while it is empty
310 // every triangle takes manningsN/initDepth exactly as it does today.
311 struct RegionHydraulics { double manningsN = 0.0; double initDepth = 0.0; };
312 QHash<QString, RegionHydraulics> regionHydraulics;
313 };
314
326
328 QWidget *parent = nullptr);
329 ~MeshGenerationDialog() override;
330
331private slots:
332 void onBrowseMeshPath();
333 void onAccept();
334 void onMeshFinished();
337 void onCancelOrReject();
338
339private:
340 void buildUi();
341 void seedDefaults();
342 void populateLayerCombos();
343 void updateUnitDisplay();
344 void updateZFactor(); // recomputes m_zFactorSpin from DTM + mesh vertical unit combos
347 void updateMinCellDerivedLabel();
348
352 [[nodiscard]] QStringList regionTags() const;
354 void refreshRegionRows();
355
359 bool collectInputs(PipelineInputs *out, QString *errOut) const;
360
361 SWMMVisProjectWindow *m_pw = nullptr;
362
363 // ── Sources ─────────────────────────────────────────────────────
364 QComboBox *m_dtmCombo = nullptr;
365 QLabel *m_domainLabel = nullptr;
366 QLabel *m_dtmVertUnitLabel = nullptr; // shows auto-detected DTM vertical unit
367 QComboBox *m_meshVertCRSCombo = nullptr; // output mesh vertical unit
368 QDoubleSpinBox *m_zFactorSpin = nullptr; // user-editable Z conversion factor
369
370 // ── Auxiliary feature-layer constraints (all optional) ──────────
371 QComboBox *m_boundaryLayerCombo = nullptr;
372 QListWidget *m_pointLayersList = nullptr;
373 QListWidget *m_lineLayersList = nullptr;
374
375 // One row per vector layer in the point / line lists. Each row carries
376 // an "include" checkbox and a "use feature Z" checkbox; the latter is
377 // enabled only when the layer's geometry is 3D.
378 struct AuxLayerRow
379 {
380 GISVectorLayer *layer = nullptr;
381 QCheckBox *include = nullptr;
382 QCheckBox *useZ = nullptr;
383 bool is3D = false;
384 };
385 QVector<AuxLayerRow> m_pointLayerRows;
386 QVector<AuxLayerRow> m_lineLayerRows;
387
388 // ── Constraints (SWMM-aware tagging) ────────────────────────────
389 QCheckBox *m_includeJunctions = nullptr;
390 QCheckBox *m_includeConduits = nullptr;
391 QCheckBox *m_includeSubcatch = nullptr;
392 QCheckBox *m_mapNodesAfterGen = nullptr; // Plan Part B: post-gen mapper
393 QCheckBox *m_nodesUseRim = nullptr; // rim elevation instead of terrain
394 QDoubleSpinBox *m_nodeFlattenSpin = nullptr; // flatten terrain within radius of nodes
395 QCheckBox *m_nodeMinSepBox = nullptr; // enforce minimum node separation
396 QDoubleSpinBox *m_nodeMinSepSpin = nullptr; // separation distance (map units)
397
398 // ── Elevation interpolation (no-DTM fallback) ───────────────────
399 QGroupBox *m_elevInterpGroup = nullptr; // whole group (disabled when DTM set)
400 QComboBox *m_elevMethodCombo = nullptr; // IDW | Natural neighbour
401 QComboBox *m_nnVariantCombo = nullptr; // Sibson | Laplace
402 QDoubleSpinBox *m_idwPowerSpin = nullptr; // Shepard exponent
403
404 // ── Quality ─────────────────────────────────────────────────────
405 QDoubleSpinBox *m_maxAreaSpin = nullptr;
406 QDoubleSpinBox *m_minAngleSpin = nullptr;
407 QDoubleSpinBox *m_gradationSpin = nullptr;
408 QSpinBox *m_maxSteinerSpin = nullptr;
409 // PSLG optimizations
410 QDoubleSpinBox *m_simplifyEpsSpin = nullptr;
411 QDoubleSpinBox *m_snapEpsSpin = nullptr;
412 QCheckBox *m_allowSteiner = nullptr;
413 // 2026-07-19 — optional boundary densification (edge split after RDP).
414 QCheckBox *m_maxBoundaryEdgeBox = nullptr;
415 QDoubleSpinBox *m_maxBoundaryEdgeSpin = nullptr;
416
417 // ── Minimum cell size (MIN_CELL_SIZE_ENFORCEMENT_PLAN_2026-08-17) ──
418 QDoubleSpinBox *m_minCellSizeSpin = nullptr;
419 QCheckBox *m_minSizeEnforceBox = nullptr;
420 QPushButton *m_minCellSuggestBtn = nullptr;
421 QDoubleSpinBox *m_trimAngleSpin = nullptr;
422 QCheckBox *m_trimAtNodesBox = nullptr;
423 QCheckBox *m_dropSubScaleHolesBox = nullptr;
424 QCheckBox *m_cleanupBox = nullptr;
425 QLabel *m_minCellDerivedLabel = nullptr;
426
427 // ── Quad quality (TRI_QUAD_MESHING_PLAN §3 G2 merge + G3 patches;
428 // QUAD_MESHING_REDESIGN_PLAN §5 bounds shared with quad regions) ──
429 QCheckBox *m_quadMergeBox = nullptr;
430 QDoubleSpinBox *m_quadMinAngleSpin = nullptr;
431 QDoubleSpinBox *m_quadMaxAngleSpin = nullptr;
432 QDoubleSpinBox *m_quadMinSjSpin = nullptr;
433 QDoubleSpinBox *m_quadMaxAspectSpin = nullptr;
434 QDoubleSpinBox *m_quadPlanaritySpin = nullptr;
435
436 // ── Quad regions (PSLG) (QUAD_MESHING_REDESIGN_PLAN §3.1 sources, §6.3) ──
437 QCheckBox *m_quadEverywhereCheck = nullptr;
438 QDoubleSpinBox *m_quadEverywhereSpacingSpin = nullptr;
439 QComboBox *m_quadRegionLayerCombo = nullptr;
440 QLineEdit *m_quadRegionSubcatchEdit = nullptr;
441 QComboBox *m_quadRegionModeCombo = nullptr;
442 QDoubleSpinBox *m_quadRegionSpacingSpin = nullptr;
443 QDoubleSpinBox *m_quadRegionAspectSpin = nullptr;
444 QDoubleSpinBox *m_quadRegionAngleSpin = nullptr;
448 QTableWidget *m_patchTable = nullptr;
449
450 // ── Thinning (terrain-adaptive Steiner points from DTM) ─────────
451 QCheckBox *m_thinningBox = nullptr;
452 QDoubleSpinBox *m_thinningToleranceSpin = nullptr;
453 QSpinBox *m_thinningIterationsSpin = nullptr;
454 QSpinBox *m_thinningMaxPointsSpin = nullptr;
455 QCheckBox *m_minSpacingBox = nullptr;
456 QDoubleSpinBox *m_minSpacingSpin = nullptr;
457 // 2026-07-19 — boundary-aware terrain filter buffer ((auto) at 0).
458 QDoubleSpinBox *m_boundaryBufferSpin = nullptr;
459
460 // ── Uniform per-cell hydraulic seeds ────────────────────────────
461 // These two stay the editors for the '*' row; the region-defaults table
462 // below mirrors them read-only (GG0d, GUI plan §3.3).
463 QDoubleSpinBox *m_manningsValueSpin = nullptr;
464 QDoubleSpinBox *m_initDepthSpin = nullptr;
465
466 // ── Region defaults table (GG0d) ────────────────────────────────
467 MeshRegionDefaultsWidget *m_regionDefaults = nullptr;
468
469 // ── Output ──────────────────────────────────────────────────────
470 QRadioButton *m_outputExternal = nullptr;
471 QRadioButton *m_outputInline = nullptr;
472 QLineEdit *m_meshPathEdit = nullptr;
473 QPushButton *m_browseMeshBtn = nullptr;
474
475 // ── Thread / embedded progress ─────────────────────────────────
476 QFutureWatcher<PipelineResult> *m_watcher = nullptr;
477 QProgressBar *m_progressBar = nullptr;
478 QLabel *m_progressLabel = nullptr;
479 QPushButton *m_generateBtn = nullptr;
480 QPushButton *m_cancelBtn = nullptr;
481};
482
483#endif // MESHGENERATIONDIALOG_H
A map layer backed by a GDAL/OGR vector dataset.
Definition gisvectorlayer.h:103
An axis-aligned bounding box in the coordinate space of a given CRS.
Definition mapextent.h:26
Definition meshgenerationdialog.h:57
~MeshGenerationDialog() override
Definition meshgenerationdialog.cpp:2837
NNVariant
Natural-neighbour weighting variant.
Definition meshgenerationdialog.h:69
ElevInterpMethod
Elevation interpolation method for the no-DTM fallback.
Definition meshgenerationdialog.h:67
Definition meshregiondefaultswidget.h:52
Definition maptoolselectprofile.h:37
MDI sub-window owning a MapCanvas, SWMMModelLayer, and map tools.
Definition swmmvisprojectwindow.h:58
MeshOutputMode
Output strategy for the four 2D mesh sections.
Definition inpmeshwriter.h:51
@ External
Write .2dm next to the .inp; reference via [2D_MESH_FILE].
QVector< int > parent
union-find
Definition pslgminsize.cpp:176
Definition meshgenerationdialog.h:114
bool hasZ
Definition meshgenerationdialog.h:114
QVector< QPointF > path
Definition meshgenerationdialog.h:114
QVector< double > z
Definition meshgenerationdialog.h:114
Definition meshgenerationdialog.h:112
double z
Definition meshgenerationdialog.h:112
bool hasZ
Definition meshgenerationdialog.h:112
QPointF xy
Definition meshgenerationdialog.h:112
Definition meshgenerationdialog.h:109
double rimZ
Definition meshgenerationdialog.h:109
QString name
Definition meshgenerationdialog.h:109
bool hasRim
Definition meshgenerationdialog.h:109
QPointF xy
Definition meshgenerationdialog.h:109
QString layerName
Definition meshgenerationdialog.h:187
QString path
Definition meshgenerationdialog.h:187
QString crsWkt
Definition meshgenerationdialog.h:187
Definition meshgenerationdialog.h:311
double manningsN
Definition meshgenerationdialog.h:311
double initDepth
Definition meshgenerationdialog.h:311
All inputs needed by the pipeline worker. Collected on the main thread by collectInputs() so the work...
Definition meshgenerationdialog.h:75
double nodeMinSeparation
Definition meshgenerationdialog.h:275
bool mapNodesAfterGen
Definition meshgenerationdialog.h:134
double pslgSimplifyEps
Definition meshgenerationdialog.h:143
QVector< QuadRegionLayerSpec > quadRegionLayers
Definition meshgenerationdialog.h:188
double quadEverywhereSpacing
Definition meshgenerationdialog.h:196
QVector< QVector< QPointF > > holeRings
Definition meshgenerationdialog.h:86
double pslgSnapEps
Definition meshgenerationdialog.h:148
bool quadEverywhere
Definition meshgenerationdialog.h:193
mesh::QuadRegion quadRegionDefaults
Definition meshgenerationdialog.h:201
QVector< mesh::QuadRegion > quadRegions
Definition meshgenerationdialog.h:182
QString inpPath
Definition meshgenerationdialog.h:77
QString meshLinearUnitName
Definition meshgenerationdialog.h:254
double zConversionFactor
Definition meshgenerationdialog.h:242
QVector< QPointF > featureZSeedXY
Definition meshgenerationdialog.h:259
QVector< mesh::ConstraintSegment > constraintSegs
Definition meshgenerationdialog.h:123
ElevInterpMethod elevInterpMethod
Definition meshgenerationdialog.h:280
QVector< AuxLine > auxLines
Definition meshgenerationdialog.h:115
mesh::MeshOutputMode outputMode
Definition meshgenerationdialog.h:285
mesh::DTMThinnerOptions thinnerOpts
Definition meshgenerationdialog.h:236
QVector< mesh::PatchMesh > patches
Definition meshgenerationdialog.h:173
BoundaryKind
Definition meshgenerationdialog.h:95
bool includeSubcatch
Definition meshgenerationdialog.h:119
mesh::GenerationOptions genOpts
Definition meshgenerationdialog.h:164
QString dtmPath
Definition meshgenerationdialog.h:78
double maxBoundaryEdgeLen
Definition meshgenerationdialog.h:161
QVector< QPolygonF > domains
Definition meshgenerationdialog.h:81
QString meshOutputPath
Definition meshgenerationdialog.h:286
double idwPower
Definition meshgenerationdialog.h:282
double sizeGradation
Definition meshgenerationdialog.h:232
QHash< QString, RegionHydraulics > regionHydraulics
Definition meshgenerationdialog.h:312
bool includeConduits
Definition meshgenerationdialog.h:118
QVector< mesh::SteinerPoint > steinerPoints
Definition meshgenerationdialog.h:122
QString boundaryPath
VectorFile: datasource path.
Definition meshgenerationdialog.h:97
QString meshCRSTag
Definition meshgenerationdialog.h:247
bool doThinning
Definition meshgenerationdialog.h:235
BoundaryKind boundaryKind
Definition meshgenerationdialog.h:96
QVector< QPointF > nodeRimXY
Definition meshgenerationdialog.h:266
QVector< QPair< QString, QVector< QPointF > > > candidateLinks
Definition meshgenerationdialog.h:111
bool minSizeCleanup
Definition meshgenerationdialog.h:214
QVector< QPair< QString, QPointF > > subcatchSeeds
Definition meshgenerationdialog.h:116
double initDepth
Definition meshgenerationdialog.h:291
bool includeJunctions
Definition meshgenerationdialog.h:117
QVector< AuxPoint > auxPoints
Definition meshgenerationdialog.h:113
QVector< QVector< QPointF > > subcatchPolys
Subcatchments: raw rings (mesh CRS)
Definition meshgenerationdialog.h:100
QVector< mesh::InfilDefaultRow > infilDefaults
Definition meshgenerationdialog.h:303
QVector< double > nodeRimZ
Definition meshgenerationdialog.h:267
MapExtent modelExtent
AutoBBox fallback frame.
Definition meshgenerationdialog.h:101
double manningsN
Definition meshgenerationdialog.h:290
QString boundaryCRSWkt
VectorFile: source SRS WKT ("" = mesh CRS)
Definition meshgenerationdialog.h:99
QHash< int, QString > edgeMarkerToTag
Definition meshgenerationdialog.h:128
QHash< int, QString > nodeMarkerToTag
Definition meshgenerationdialog.h:127
NNVariant nnVariant
Definition meshgenerationdialog.h:281
QVector< CandidateNode > candidateNodes
Definition meshgenerationdialog.h:110
QVector< mesh::RegionMarker > regionMarkers
Definition meshgenerationdialog.h:124
QString meshCRSWkt
Definition meshgenerationdialog.h:138
bool nodesUseRim
Definition meshgenerationdialog.h:269
double nodeFlattenRadius
Definition meshgenerationdialog.h:268
double terrainBoundaryBuffer
Definition meshgenerationdialog.h:156
bool minSizeEnforce
Definition meshgenerationdialog.h:224
QString boundaryLayerName
VectorFile: OGR layer name ("" = first)
Definition meshgenerationdialog.h:98
QVector< double > featureZSeedZ
Definition meshgenerationdialog.h:260
mesh::QuadQualityBounds quadBounds
Definition meshgenerationdialog.h:205
mesh::pslg::MinSizePolicy minSizePolicy
Definition meshgenerationdialog.h:213
QVector< QPair< QString, QPointF > > couplingNodes
Definition meshgenerationdialog.h:133
Result produced by the pipeline worker and consumed on the main thread inside onMeshFinished().
Definition meshgenerationdialog.h:318
mesh::MeshResult meshResult
Definition meshgenerationdialog.h:321
QString errorMsg
Definition meshgenerationdialog.h:320
mesh::CouplingMap coupling
Definition meshgenerationdialog.h:322
mesh::MeshOutputMode outputMode
Definition meshgenerationdialog.h:324
QString meshPath
Definition meshgenerationdialog.h:323
bool ok
Definition meshgenerationdialog.h:319
1D↔2D coupling map produced by the meshing dialog.
Definition inpmeshwriter.h:34
Parameters for the normal-deviation terrain thinning.
Definition dtmthinner.h:93
Quality knobs surfaced to the user dialog.
Definition meshgenerator.h:68
Result of MeshGenerator::generate.
Definition meshresult.h:116
Acceptance bounds shared by pairing, cleanup, smoothing and the legacy tri-pair merge....
Definition meshquadquality.h:33
Definition meshquadregion.h:39
Policy for minimum-feature-size conditioning.
Definition pslgminsize.h:84