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
constraints.hpp
Go to the documentation of this file.
2// SPDX-License-Identifier: Apache-2.0
3#pragma once
4#include <functional>
5#include <optional>
6
7namespace meshkit::plan
8{
10 enum class Mode { Preserve, Simplify };
12 double maxDeviation = 0; // XY, in the common planar frame
13 double maxZDeviation = 0; // Z, in the supplied elevation units; 0 preserves exact heights
14 double maxTurnDegrees = 5;
15 double maxAreaChangeFraction = .001; // Relative to original ring area; -1 disables
16 double maxAreaChange = -1; // Absolute area in squared XY units; -1 disables
17 double minimumClearance = 0;
18 Text validate() const;
19};
20// Unset fields inherit from the parent policy. The caller supplies consistent
21// planar/elevation units before resolving; no implicit conversion or clamping.
32 Vector<double> z; // Empty or exactly one finite value per XY vertex
33 Vector<bool> fixed; // Semantic vertices; absent flags mean false
34 bool closed = false;
37 int marker = 0;
38 bool requiredInMesh = true;
39 Text label; // Optional human-readable source label; id remains stable.
40};
43 std::ptrdiff_t removed = 0, rejectedShortcuts = 0;
45 bool budgetRetained = false, rolledBack = false;
46 // Empty means identity. Otherwise maps each output vertex to its original index.
48};
51 std::function<bool()> cancelled;
52 // Zero selects 256 operations per input vertex plus 100,000. Exhaustion
53 // retains original features, never relaxes geometry checks.
54 std::uint64_t workBudget = 0;
56 // A bounded shared-edge workspace; exceeding it retains the original graph.
57 std::uint64_t maximumWorkspaceBytes = std::uint64_t(1) << 30;
58};
66// All features share one immutable segment index. Input must describe the
67// intended original graph in one planar frame. Coordinates never move. Every
68// accepted shortcut is checked against its entire original span (XY and Z),
69// original obstacles/pins and swept pockets; output shortcuts are checked
70// against each other. Exact shared-edge chains are simplified once under the
71// strictest owner policies and stitched back with source mappings. Differently
72// sampled overlaps remain conservative; coordinates are never proximity-welded.
76
77namespace detail
78{
79// Internal shared-chain adapter; the public entry point validates input first.
83}
84}
Definition storage.hpp:18
Definition planmodel.hpp:14
ConstraintSimplificationResult simplifySharedConstraints(const Vector< SimplificationFeature > &features, const ConstraintSimplificationOptions &options)
Definition constraintshared.cpp:91
Definition blocks.hpp:25
ConstraintSimplificationResult simplifyConstraints(const Vector< SimplificationFeature > &features, const ConstraintSimplificationOptions &options={})
Definition constraints.cpp:282
const ConstraintAuditOptions & options
Definition constraintaudit.cpp:34
int parent
Definition planning.cpp:199
Definition constraints.hpp:22
std::optional< double > minimumClearance
Definition constraints.hpp:25
std::optional< double > maxTurnDegrees
Definition constraints.hpp:24
std::optional< double > maxDeviation
Definition constraints.hpp:24
std::optional< double > maxAreaChangeFraction
Definition constraints.hpp:24
int mode
Definition constraints.hpp:23
ConstraintSimplificationPolicy resolve(ConstraintSimplificationPolicy parent) const
Definition constraints.cpp:14
std::optional< double > maxZDeviation
Definition constraints.hpp:24
Text validate() const
Definition constraints.cpp:31
std::uint64_t maximumWorkspaceBytes
Definition constraints.hpp:57
Vector< Point2 > protectedPoints
Definition constraints.hpp:50
std::function< bool()> cancelled
Definition constraints.hpp:51
bool canonicalizeSharedEdges
Definition constraints.hpp:55
std::uint64_t workBudget
Definition constraints.hpp:54
double minimumClearance
Definition constraints.hpp:17
Mode mode
Definition constraints.hpp:11
double maxAreaChange
Definition constraints.hpp:16
Text validate() const
Definition constraints.cpp:39
double maxDeviation
Definition constraints.hpp:12
double maxZDeviation
Definition constraints.hpp:13
double maxTurnDegrees
Definition constraints.hpp:14
double maxAreaChangeFraction
Definition constraints.hpp:15
bool cancelled
Definition constraints.hpp:60
Vector< SimplificationFeature > features
Definition constraints.hpp:62
bool ok
Definition constraints.hpp:60
Text error
Definition constraints.hpp:61
std::uint64_t workUsed
Definition constraints.hpp:64
Vector< SimplificationChange > changes
Definition constraints.hpp:63
std::uint64_t sharedSegments
Definition constraints.hpp:64
std::uint64_t sharedChains
Definition constraints.hpp:64
Definition constraints.hpp:41
std::ptrdiff_t rejectedShortcuts
Definition constraints.hpp:43
Text id
Definition constraints.hpp:42
double areaChange
Definition constraints.hpp:44
double maxZDeviation
Definition constraints.hpp:44
double maxDeviation
Definition constraints.hpp:44
Vector< int > sourceVertices
Definition constraints.hpp:47
bool budgetRetained
Definition constraints.hpp:45
std::ptrdiff_t removed
Definition constraints.hpp:43
bool rolledBack
Definition constraints.hpp:45
Definition constraints.hpp:29
Vector< double > z
Definition constraints.hpp:32
int marker
Definition constraints.hpp:37
bool closed
Definition constraints.hpp:34
Vector< Point2 > xy
Definition constraints.hpp:31
Text label
Definition constraints.hpp:39
Role
Definition constraints.hpp:36
ConstraintSimplificationPolicy policy
Definition constraints.hpp:35
bool requiredInMesh
Definition constraints.hpp:38
Vector< bool > fixed
Definition constraints.hpp:33
Text id
Definition constraints.hpp:30
enum meshkit::plan::SimplificationFeature::Role role