forked from 1b-agent/opencadstudio-upstream
fix(io): keep zero-radius circles and arcs on open
Problem The open guard rejects circles and arcs with a radius below 1e-10. A normal open fails when a drawing contains one. The user gets the recovery prompt. AutoCAD and nanoCAD open these drawings. The check came fromace99541. Its comment says the tessellator cannot sample a degenerate curve. That was true of truck's parameter_division. Commit8c7ebdc9removed truck. Commit96be8214made the kernel sample circles and arcs by sweep angle with a floored segment count. The reason for the check no longer exists. Change - Remove the near-zero radius check for circles and arcs. - Keep the checks for non-finite values and radii above 1e10. - Update the guard comments. The purge rejects parser desync. It does not reject degenerate geometry. Be generous in what you accept and strict in what you produce. - Add tests: a zero radius passes the guard, an absurd radius does not. - Change the automation purge test sample from radius 0 to radius 1e11. Behavior - Zero-radius circles and arcs load. They render as dots. - Tessellation, hit testing, snapping, and hatch boundaries accept a zero radius. - The DXF writer does not change. Co-Authored-By: Claude Fable 5.1 <[email protected]>
This commit is contained in:
1 parent
7aff9fa046
commit
8e14b10104
2 files changed
+49
-9
No files matched your search
@@ -1414,7 +1414,9 @@ mod tests {
|
||||
doc.add_entity(acadrust::EntityType::Circle(good)).unwrap();
|
||||
let mut corrupt = acadrust::entities::Circle::new();
|
||||
corrupt.center = acadrust::types::Vector3::new(1.0, 1.0, 0.0);
|
||||
corrupt.radius = 0.0; // io::is_entity_corrupt rejects a zero-radius circle
|
||||
// Past any drawing's extent: io::is_entity_corrupt treats it as parser
|
||||
// desync. (A zero radius is legal geometry and survives the purge.)
|
||||
corrupt.radius = 1.0e11;
|
||||
doc.add_entity(acadrust::EntityType::Circle(corrupt)).unwrap();
|
||||
let bytes = crate::io::save_to_bytes(&doc, "dxf", doc.version)
|
||||
.expect("save a document containing a corrupt entity");
|
||||
|
||||
Reference in new issue
Block a user