![]() |
SWMMVis
6.0.0-alpha.4
Qt6/C++ GIS-based graphical user interface for the SWMMVis engine (6.0.0-alpha.4)
|
#include "mesh/pslgminsize.h"#include "mesh/pslgprep.h"#include <QHash>#include <QSet>#include <QtGlobal>#include <QtMath>#include <algorithm>#include <cmath>#include <cstring>#include <limits>Namespaces | |
| namespace | mesh |
| namespace | mesh::pslg |
Functions | |
| QString | mesh::pslg::violationCauseName (ViolationCause c) |
| QVector< Violation > | mesh::pslg::analyseLocalFeatureSize (const QVector< QPolygonF > &domains, const QVector< QVector< QPointF > > &holeRings, const QVector< ConstraintSegment > &segs, const QVector< SteinerPoint > &pts, double h, int maxReported=200) |
| Analyse the PSLG's local feature size. Read-only. | |
| bool | mesh::pslg::conditionMinSize (QVector< QPolygonF > *domains, QVector< QVector< QPointF > > *holeRings, QVector< ConstraintSegment > *segs, QVector< SteinerPoint > *pts, const MinSizePolicy &policy, ConditionReport *report, const std::function< bool()> &isCancelled={}) |
| Condition the PSLG so it can support cells of size policy.minCellSize. | |
See pslgminsize.h for why this file exists and what it guarantees.
Everything here works on one unified Pool of vertices plus a list of Paths that index into it. That indirection is the whole trick: welding a vertex is a union-find link, and every path referencing it — a domain ring, a hole ring, three conduits — follows automatically. Conditioning each geometry kind separately cannot work, because the violations that matter are BETWEEN kinds (a conduit endpoint a hair from the domain edge).
The segment index is chunked with a global chunk budget, copied from the worker's existing near-constraint filter (meshgenerationdialog.cpp:1429) so a pathological bufferDist degrades the same way in both places.
| QPointF a |
| QPointF b |
| QHash<QPair<quint64, quint64>, int> byCoord |
| bool closed = false |
| bool closedDup = false |
input repeated its first vertex at the end
| int crossings = 0 |
proper X crossings
| int degenerateRings = 0 |
closed paths that enclose no area
| bool dropped = false |
| int duplicates = 0 |
the same undirected vertex pair emitted twice
| int e = -1 |
| PathKind kind = PathKind::Constraint |
| int marker = 0 |
| QVector<QPointF> origPos |
for the displacement bound
| bool overflow = false |
| int overlaps = 0 |
collinear and sharing more than a point
| QVector<int> parent |
union-find
| int path = -1 |
| QVector<Path> paths |
| Pool pool |
| QVector<QPointF> pos |
| QVector<int> prio |
| bool readOnly = false |
| EdgeRef ref |
| int src = -1 |
index into the caller's vector; -1 = new
| QString tag |
| QVector<int> v |
pool vertex indices
| bool verified = false |
false when the broad phase gave up
| int zeroLength = 0 |