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
sizefield.hpp
Go to the documentation of this file.
1
49#ifndef MESHKIT_NATIVE_SIZEFIELD_HPP
50#define MESHKIT_NATIVE_SIZEFIELD_HPP
51
52namespace meshkit::plan
53{
54
56 bool footprintBounds = false;
60 double nearSize = 0.0;
61
67 double gradation = 0.25;
68
72 double areaFloor = 0.0;
73
77 std::int64_t maxGridCells = 4'000'000;
78
79 // ── Overhaul additions (MESH_OVERHAUL_PLAN_2026-09-29.md §3 Stage 2) ──
82 double maxSize = 0.0;
87 std::function<double(double, double)> terrainSizeAt;
89 struct Region {
91 double h = 0.0;
92 };
96
106};
107
116{
117public:
118 // Conservative bound on every bilinear target over this rectangle. Zero
119 // means unbounded/invalid field. Includes all interpolation support nodes.
120 double minimumSizeInBox(const Box2 &) const;
121 double minimumTerrainSizeInBox(const Box2 &)
122 const;
123
157 bool build(const Box2 &bbox, const Vector<ConstraintSegment> &segs,
158 const Vector<Vector<Point2>> &rings, const Vector<SteinerPoint> &pts,
159 const SizeFieldOptions &opt);
160
176 [[nodiscard]] double targetAreaAt(double x, double y) const;
194 [[nodiscard]] double sizeAt(double x, double y) const;
202 [[nodiscard]] bool isValid() const { return m_cols > 0 && m_rows > 0; }
210 [[nodiscard]] bool hasSizeBound() const { return isValid() && sizeAt(m_x0, m_y0) > 0.0; }
217 [[nodiscard]] double pitch() const { return m_pitch; }
223 [[nodiscard]] int cols() const { return m_cols; }
229 [[nodiscard]] int rows() const { return m_rows; }
230
244 [[nodiscard]] double distanceAt(double x, double y) const;
245
246private:
256 [[nodiscard]] double cellDist(int cx, int cy) const;
265 [[nodiscard]] double cellSize(int cx, int cy) const;
281 void buildSizeGrid(const SizeFieldOptions &opt, const Vector<float> &stepDist);
293 void stampSeedPoint(const Point2 &p, Vector<float> &into);
307 void stampSeedSegment(const Point2 &a, const Point2 &b, Vector<float> &into);
308
309 Vector<float> m_dist;
310 Vector<float> m_h;
311 struct MinLevel {
312 int columns, rows;
313 Vector<float> values;
314 };
315 Vector<MinLevel> m_minLevels;
316 double minimumSizeInBoxImpl(const Box2 &, bool includeTerrain) const;
317 struct RegionBound {
318 Box2 box;
319 double size = 0;
320 int end = 0;
321 bool terrainOnly = false;
322 };
323 Vector<RegionBound> m_regionBounds;
324 int m_cols = 0, m_rows = 0;
325 double m_x0 = 0.0, m_y0 = 0.0;
326 double m_pitch = 0.0;
327 double m_near = 0.0, m_g = 0.0, m_floor = 0.0;
328};
329
330} // namespace meshkit::plan
331
332#endif // MESHKIT_NATIVE_SIZEFIELD_HPP
Definition geometry.hpp:59
Definition geometry.hpp:11
Definition storage.hpp:18
Definition planmodel.hpp:49
Distance-to-feature field sampled as a max-area function.
Definition sizefield.hpp:116
double sizeAt(double x, double y) const
Bilinearly read the combined gradation-relaxed target edge length.
Definition sizefield.cpp:415
double minimumSizeInBox(const Box2 &) const
Definition sizefield.cpp:288
bool isValid() const
Check whether stored grid dimensions are positive.
Definition sizefield.hpp:202
bool hasSizeBound() const
Check whether the valid field reports a positive size at its first grid-center coordinate.
Definition sizefield.hpp:210
double targetAreaAt(double x, double y) const
Read the sampled equilateral-triangle area cap at a mesh coordinate.
Definition sizefield.cpp:507
double pitch() const
Read the background grid spacing retained by the latest layout attempt.
Definition sizefield.hpp:217
int cols() const
Read the number of grid columns.
Definition sizefield.hpp:223
bool build(const Box2 &bbox, const Vector< ConstraintSegment > &segs, const Vector< Vector< Point2 > > &rings, const Vector< SteinerPoint > &pts, const SizeFieldOptions &opt)
Replace this field with sampled feature-distance, terrain and region size bounds.
Definition sizefield.cpp:173
double minimumTerrainSizeInBox(const Box2 &) const
Includes finer directional source bounds without changing nominal sizing.
Definition sizefield.cpp:292
int rows() const
Read the number of grid rows.
Definition sizefield.hpp:229
double distanceAt(double x, double y) const
Bilinearly read the approximate chamfer distance-to-feature grid.
Definition sizefield.cpp:490
int end
Definition constraints.cpp:103
ArrowPlacement p
Definition linesymbollayer.cpp:29
double cellSize
Definition mesh2dresultsexport.cpp:476
std::vector< double > cx
Definition mesh2dresultsexport.cpp:131
std::vector< double > cy
area centroid per cell
Definition mesh2dresultsexport.cpp:131
Definition blocks.hpp:25
Box box
Definition constraintaudit.cpp:161
Vector< Point2 > pts
Definition patch.cpp:100
Definition sizefield.hpp:89
double h
Definition sizefield.hpp:91
Polygon ring
Definition sizefield.hpp:90
Definition sizefield.hpp:55
double areaFloor
Definition sizefield.hpp:72
bool footprintBounds
Build a compact min pyramid for verified sizing.
Definition sizefield.hpp:56
double maxSize
Definition sizefield.hpp:82
Vector< Vector< Point2 > > steps
Definition sizefield.hpp:105
Vector< Region > terrainRegions
Finer prescribed directional scales; footprint terrain queries only.
Definition sizefield.hpp:95
double nearSize
Definition sizefield.hpp:60
Vector< Region > regions
Definition sizefield.hpp:93
std::function< double(double, double)> terrainSizeAt
Definition sizefield.hpp:87
std::int64_t maxGridCells
Definition sizefield.hpp:77
double gradation
Definition sizefield.hpp:67
double
Definition swmmpollutantpropertyadapter.cpp:68
int rows
Definition terrainerrorfield.cpp:54
int y
Definition terrainerrorfield.cpp:60
double a
Definition terrainerrorfield.cpp:42
double b
Definition terrainerrorfield.cpp:42
int x
Definition terrainerrorfield.cpp:60