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
meshquadregion.h
Go to the documentation of this file.
1
19#ifndef OPENSWMMVIS_MESH_MESHQUADREGION_H
20#define OPENSWMMVIS_MESH_MESHQUADREGION_H
21
22#include <QPointF>
23#include <QPolygonF>
24#include <QString>
25#include <QVector>
26
27namespace mesh {
28
30{
31 Auto,
32 Mapped,
33 Submapped,
34 Free,
36};
37
39{
40 QPolygonF ring;
45 QVector<QPolygonF> holes;
52 bool isBackground = false;
54 double spacing = 0.0;
55 double aspectMax = 2.0;
56 bool hasAlignAngle = false;
57 double alignAngleDeg = 0.0;
58 QVector<QPointF> alignGuide;
59 QVector<int> corners;
60 QString tag;
61};
62
64QPolygonF normalizeRingCCW(const QPolygonF &ring);
65
67double ringSignedArea(const QPolygonF &ring);
68
70bool pointInRing(const QPolygonF &ring, const QPointF &p);
71
74bool pointInRegion(const QPolygonF &ring, const QVector<QPolygonF> &holes, const QPointF &p);
75
77bool ringIsSimple(const QPolygonF &ring);
78
82QString validateQuadRegion(const QuadRegion &r,
83 const QVector<QPolygonF> &domains,
84 const QVector<QPolygonF> &holes);
85
89QString validateQuadRegionsDisjoint(const QVector<QuadRegion> &regions);
90
100QuadRegionMode classifyQuadRegion(const QPolygonF &ring, QVector<int> *corners,
101 double cornerTolDeg = 25.0,
102 double rectilinearTolDeg = 2.0);
103
108QPolygonF resampleRing(const QPolygonF &ring, double h, double keepTurnDeg = 0.0);
109
111double ringTurnDeg(const QPolygonF &ring, int i);
112
113} // namespace mesh
114
115#endif // OPENSWMMVIS_MESH_MESHQUADREGION_H
size_t i
Definition contourjob.cpp:27
ArrowPlacement p
Definition linesymbollayer.cpp:27
int h
Definition mesh2dresultsexport.cpp:387
QPolygonF ring
normalizeRingCCW(r.ring).
Definition meshgenerator.cpp:156
Definition meshcommands.h:302
QuadRegionMode
Definition meshquadregion.h:30
@ Auto
classifyQuadRegion() decides: Mapped → Submapped → Free.
@ Mapped
Four logical sides (polylines) → transfinite quads. Needs 4 corners.
@ Submapped
Exactly rectilinear ring → grid-based structured quads.
@ Free
Cross-field aligned lattice + template pairing (quad-dominant).
@ TrianglesOnly
Region ring is still a constraint loop, interior stays triangles.
bool ringIsSimple(const QPolygonF &ring)
True when ring is simple (no proper self-intersection). O(n²).
Definition meshquadregion.cpp:192
double ringSignedArea(const QPolygonF &ring)
Signed shoelace area (CCW positive).
Definition meshquadregion.cpp:138
QuadRegionMode classifyQuadRegion(const QPolygonF &ring, QVector< int > *corners, double cornerTolDeg=25.0, double rectilinearTolDeg=2.0)
Auto-classification (plan §4.1) on the normalised ring.
Definition meshquadregion.cpp:323
QPolygonF resampleRing(const QPolygonF &ring, double h, double keepTurnDeg=0.0)
Resample a closed ring at spacing h: every edge is split into max(1, round(len/h)) equal parts; ring ...
Definition meshquadregion.cpp:360
double ringTurnDeg(const QPolygonF &ring, int i)
Exterior turning angle (degrees, CCW positive) at ring vertex i.
Definition meshquadregion.cpp:208
bool pointInRegion(const QPolygonF &ring, const QVector< QPolygonF > &holes, const QPointF &p)
Inside ring and outside every ring of holes — the region's meshable interior. With no holes this is e...
Definition meshquadregion.cpp:167
QString validateQuadRegion(const QuadRegion &r, const QVector< QPolygonF > &domains, const QVector< QPolygonF > &holes)
Validate one region: >= 3 distinct vertices, simple, area >= 4·h² (h = spacing when > 0,...
Definition meshquadregion.cpp:222
QPolygonF normalizeRingCCW(const QPolygonF &ring)
Drop a closing duplicate, drop consecutive duplicates, make CCW.
Definition meshquadregion.cpp:147
QString validateQuadRegionsDisjoint(const QVector< QuadRegion > &regions)
Pairwise check: rings may share edges/vertices but no ring vertex of one may lie strictly inside anot...
Definition meshquadregion.cpp:283
bool pointInRing(const QPolygonF &ring, const QPointF &p)
Odd-even point-in-polygon (closed ring, last == first optional).
Definition meshquadregion.cpp:175
Definition meshquadregion.h:39
QPolygonF ring
Closed (last == first optional), simple, any orientation.
Definition meshquadregion.h:40
QVector< int > corners
Mapped: 4 ring vertex indices in ring order; empty = auto-pick.
Definition meshquadregion.h:59
QString tag
MeshTriangle::tag for every cell inside; empty = inherit region marker's.
Definition meshquadregion.h:60
double aspectMax
Longest/shortest side accepted (Free); <= 0 = unbounded.
Definition meshquadregion.h:55
QVector< QPointF > alignGuide
Free: optional polyline the field aligns to (streets, channels).
Definition meshquadregion.h:58
double alignAngleDeg
Definition meshquadregion.h:57
bool hasAlignAngle
Free: constant cross field at alignAngleDeg (from +x, CCW).
Definition meshquadregion.h:56
QVector< QPolygonF > holes
Definition meshquadregion.h:45
QuadRegionMode mode
Definition meshquadregion.h:53
bool isBackground
Definition meshquadregion.h:52
double spacing
Target quad edge length h; 0 = derive from the size field / max area.
Definition meshquadregion.h:54