fix(acis): read a lifted body at a tolerance a real file can meet
Faces were being dropped for sitting a nanometre off their own plane. An edge is shared by two faces and in a real file cannot lie exactly on both: the two surfaces were fitted separately and written to finite precision. Asked for exactness, the kernel decides the edge is not on its plane, declines to project it, and the face goes undrawn — silently, since a face that cannot be expressed is reported as absent rather than as an error. A micrometre in a drawing measured in metres recovers twenty-six walls of one building. Loosening further buys almost nothing — a hundredth of this finds one more face in sixty thousand — and past that it would start accepting geometry that really is wrong, so it stops here. With the tube fix that came with the kernel bump, VILLA_NEU_IFC3.dwg now meshes 59015 of its 59033 faces, from 58922. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
60ec29375f
commit
7c9366e362
2 changed files with 13 additions and 2 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
|
@ -904,7 +904,7 @@ checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04"
|
|||
[[package]]
|
||||
name = "cadkernel"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/HakanSeven12/cadkernel.git#962ffc3eda748a7d675ddc868be628c334e20a3b"
|
||||
source = "git+https://github.com/HakanSeven12/cadkernel.git#e3ff882a47c39104e04d07df8297ed02a4a657fe"
|
||||
dependencies = [
|
||||
"cavalier_contours",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -28,7 +28,18 @@ use crate::scene::model::mesh_model::MeshLodSet;
|
|||
const SAG: f64 = 0.05;
|
||||
|
||||
/// What counts as the same point when the kernel reads a body over.
|
||||
const TOL: f64 = 1e-9;
|
||||
///
|
||||
/// A micrometre, in a drawing measured in metres. Not slackness: an edge is
|
||||
/// shared by two faces, and in a real file it cannot sit exactly on both,
|
||||
/// because the two surfaces were fitted separately and written to finite
|
||||
/// precision. Asked for exactness the kernel decides the edge is not on its
|
||||
/// own plane, declines to project it, and the face is dropped — twenty-six
|
||||
/// walls of one building went missing at a nanometre that no drawing means.
|
||||
///
|
||||
/// Loosening further buys almost nothing: a hundredth of this recovers one
|
||||
/// more face in sixty thousand, and past that the tolerance would start
|
||||
/// accepting geometry that really is wrong.
|
||||
const TOL: f64 = 1e-6;
|
||||
|
||||
/// Tessellate an ACIS document by lifting it into the kernel.
|
||||
///
|
||||
|
|
|
|||
Loading…
Reference in a new issue