forked from 1b-agent/opencadstudio-upstream
Resolve dimension references through viewport and block chains
An `AssocDimensionReference` addresses a feature through a chain of handles — dimension -> [viewport] -> [insert ...] -> entity -> feature — stored in `xrefs` (AutoCAD's `mainObjectIds`). The existing resolver read only `xrefs[0]`. That is right for a model-space dimension on top-level geometry and wrong for everything else: a paper-space dimension measuring through a layout viewport has the VIEWPORT first, so resolution stopped on a viewport entity, found no curve and gave up. Nine of the ten association objects in the 115448 regression drawing are that shape. `dimension_assoc_chain` walks the chain positionally, which is all the file gives us: a leading VIEWPORT is the trans-space hop, INSERTs after it are the block-instance path (with their composed transform), and the first handle that is neither is the geometry. A chain of nothing but INSERTs ends on the innermost one, which is how a block reference's own insertion point is dimensioned. A handle that is no longer in the document comes back as `ChainError::Missing` rather than as a silent failure, so the caller can tell a broken link from an unsupported one. The module also evaluates the osnap feature itself, in the entity's own coordinates: centre, midpoint, quadrant, node/insertion, nearest, perpendicular, tangent (closed form on a circle or arc; a Newton refinement of (C(u) - P) . C'(u) = 0 on a spline, seeded from the stored parameter — the shape of the 115448 tangent-to-spline reference), and intersection / apparent intersection against the second object chain. Types we do not evaluate return None and keep their stored data, so an unsupported reference is left unresolved instead of being replaced by a guess. `Transform` has no inverse of its own and a block path is always affine, so the 3x3 cofactor inverse lives here too. All arithmetic is f64. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
1 parent
417e8e3676
commit
64c534f511
2 files changed
+636
No files matched your search
@@ -30,6 +30,7 @@ mod boundary;
|
||||
mod camera_ops;
|
||||
pub(crate) mod centerline;
|
||||
pub(crate) mod dimension_assoc;
|
||||
pub(crate) mod dimension_assoc_chain;
|
||||
pub(crate) mod centermark;
|
||||
mod dwg_native_constraints;
|
||||
mod entity;
|
||||
|
||||
Reference in new issue
Block a user