19#ifndef OPENSWMMVIS_MESH_MESHQUADREGION_H
20#define OPENSWMMVIS_MESH_MESHQUADREGION_H
74bool pointInRegion(
const QPolygonF &
ring,
const QVector<QPolygonF> &holes,
const QPointF &
p);
83 const QVector<QPolygonF> &domains,
84 const QVector<QPolygonF> &holes);
101 double cornerTolDeg = 25.0,
102 double rectilinearTolDeg = 2.0);
108QPolygonF
resampleRing(
const QPolygonF &
ring,
double h,
double keepTurnDeg = 0.0);
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 > ®ions)
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