feat(v4.2): shared topology + precise tolerance system
- make_box: shared 8 vertices + edge dedup (was 24 vertices, now 8) - ToleranceConfig: per-operation tolerances, global config - fuzzy_equal/zero/gt/lt/gte/lte with absolute+relative tolerance - fuzzy vector/point/parallel/perpendicular helpers - adaptive_tolerance: scales with model size - 14 tolerance tests
This commit is contained in:
@@ -153,6 +153,7 @@ add_library(vde_brep STATIC
|
||||
brep/incremental_update.cpp
|
||||
brep/large_assembly.cpp
|
||||
brep/format_io.cpp
|
||||
brep/tolerance.cpp
|
||||
brep/modeling.cpp
|
||||
brep/brep_drawing.cpp
|
||||
brep/step_export.cpp
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
#include "vde/brep/tolerance.h"
|
||||
#include "vde/brep/brep.h"
|
||||
|
||||
namespace vde::brep {
|
||||
|
||||
// Global tolerance config
|
||||
static ToleranceConfig g_global_tolerance;
|
||||
|
||||
const ToleranceConfig& ToleranceConfig::global() {
|
||||
return g_global_tolerance;
|
||||
}
|
||||
|
||||
void ToleranceConfig::set_global(const ToleranceConfig& cfg) {
|
||||
g_global_tolerance = cfg;
|
||||
}
|
||||
|
||||
double model_tolerance(const BrepModel& body) {
|
||||
auto bb = body.bounds();
|
||||
if (bb.min().x() > bb.max().x()) return 1e-6;
|
||||
|
||||
double extent = bb.extent().norm();
|
||||
return adaptive_tolerance(extent);
|
||||
}
|
||||
|
||||
} // namespace vde::brep
|
||||
Reference in New Issue
Block a user