Files
OneCAD-Draft/INTEGRATION_GAPS.md
T

8.7 KiB
Raw Blame History

acadrust Integration Gaps

Missing or incomplete integrations between acadrust entity definitions and H7CAD rendering/interaction systems. Ordered by priority within each category.

Legend: ✅ Done · ⚠️ Partial · ❌ Not done


Entity Field Gaps (acadrust fields ignored in tessellation)

High Impact

Status Entity Ignored Field(s) Effect
✅ INSERT column_count, row_count, column_spacing, row_spacing MINSERT handled by acadrust::explode_from_document() → array_transforms()
✅ LWPolyline constant_width, vertex start_width / end_width Implemented in src/scene/mod.rs:3239
✅ Polyline (legacy) Vertex2D.start_width / end_width Implemented in src/scene/mod.rs

Medium Impact

Status Entity Ignored Field(s) Effect
✅ Dimension DIMSCALE, DIMASZ, DIMEXO, DIMEXE (from dimstyle) Implemented in src/scene/tessellate.rs:263
✅ Spline weights (rational NURBS control point weights) NurbsCurve used when weights present — src/entities/spline.rs
✅ Spline flags.closed / flags.periodic Implemented in src/entities/spline.rs:48
✅ Hatch BoundaryEdge::Spline tessellation Implemented in src/scene/mod.rs:1802
✅ MultiLeader MultiLeaderPathType::Spline Implemented in src/entities/multileader.rs:76
⚠️ RasterImage clip_boundary (polygonal/rectangular) Boundary read but not applied — Wipeout does apply clip, RasterImage does not

Low Impact

Status Entity Ignored Field(s) Effect
❌ Arc / Circle / Line / Polyline thickness No 3D extrusion along Z; invisible in pure 2D views
❌ LWPolyline plinegen flag Linetype pattern resets at each vertex instead of continuing

Entity Type Gaps (entire types with missing subsystems)

Renders Nothing / Placeholder Only

Status Entity Notes
✅ Face3D Full tessellation, grips, properties panel — src/entities/mesh.rs
❌ OLE2Frame Bounding box + X mark only; no interactivity

Wire Fallback Only (no full mesh)

Status Entity Missing
⚠️ Solid3D / Region / Body src/scene/solid3d_tess.rs exists with MeshModel support; no real mesh from ACIS data

Partial Render

Status Entity What works What's missing
⚠️ Viewport (paper space) Frame (active=gold, inactive=cyan), CPU projection + Cohen-Sutherland clipping, perspective, layer freeze per-viewport, MSPACE switching, pan/zoom/orbit GPU scissor rect for pixel-level boundary clipping; stencil masking for overlapping viewports

Systemic Gap — OCS→WCS Transform

⚠️ Partially done. The DXF arbitrary-axis algorithm is implemented in src/scene/transform.rs (ocs_axes, ocs_point_to_wcs). Applied to:

Status Entity Location
✅ Arc src/entities/arc.rs
✅ Circle src/entities/circle.rs
✅ Line src/entities/line.rs
✅ Point src/entities/point.rs
✅ Ellipse src/entities/ellipse.rs
✅ LwPolyline src/entities/lwpolyline.rs
✅ Spline DXF spec: spline control points are already in WCS (normal field unused)
✅ Polyline2D src/entities/polyline.rs — elevation + normal applied
✅ Polyline3D Vertices already in WCS per DXF spec (no OCS transform needed)
✅ AttributeDefinition / AttributeEntity OCS→WCS applied to insertion snap point — src/entities/attribute.rs
❌ Hatch elevation applied but normal not used for OCS→WCS in wire outline
❌ MLine / Leader no OCS transform

Impact: Low for typical 2D plan files (nearly all normals are (0,0,1)); high for 3D DXF files with entities on non-horizontal planes.

The DXF arbitrary-axis algorithm (src/scene/transform.rs:73):

if |Wx| < 1/64 and |Wy| < 1/64:
    Ax = (0,1,0) × N
else:
    Ax = (1,0,0) × N
Ax = normalize(Ax)
Ay = N × Ax

Then transform each OCS point: WCS = x*Ax + y*Ay + z*N


Render Style Gaps (color, linetype, lineweight resolution)

High Impact

Status Gap Effect Location
✅ ByBlock color resolved through INSERT chain Implemented via render_style_for_block_sub() src/scene/render.rs:243
✅ ByBlock linetype resolved through INSERT chain Implemented src/scene/render.rs:260

Medium Impact

Status Gap Effect Location
✅ ByBlock lineweight resolved from INSERT entity Implemented src/scene/render.rs:266

Text & Style Gaps

Medium Impact

Status Gap Effect Location
✅ TextStyle is_backward flag Negative width_factor applied src/entities/text.rs:60
✅ TextStyle is_upside_down flag Rotation offset by π applied src/entities/text.rs:63

Low-Medium Impact

Status Gap Effect Location
❌ Complex linetype text shapes not rendered Linetypes with embedded text elements show only geometry gaps src/scene/complex_lt.rs

Polyline3D Vertex Type Gap

✅ Done. src/entities/polyline.rs:305 — VertexFlags (SPLINE_VERTEX flag 8, SPLINE_CONTROL flag 16) properly detected and used for wire/snap point selection.


Snap Point Gaps

Critical / High

Status Entity Missing Snap Location
✅ INSERT Insertion snap point src/scene/mod.rs — appended after explode
✅ INSERT Nested entity snap points All sub-entity WireModels are flat-mapped into the scene wire list — snap sees them all
✅ Hatch Snap points for circular arc boundaries Center snaps added for CircularArc/EllipticArc edges — src/scene/tessellate.rs

Medium

Status Entity Missing Snap Location
✅ Dimension Node snap hints on defpoints src/scene/tessellate.rs — dimension_snap_pts()
✅ Spline Fit/control points in snap_pts src/entities/spline.rs:38
✅ MultiLeader Vertices and connection points in snap_pts src/entities/multileader.rs
✅ MLine Vertices in snap_pts src/entities/mline.rs

Low

Status Entity Missing Snap Location
⚠️ Ellipse (partial arc) Endpoints not in pre-baked snap_pts Arc endpoints emitted only as Center; functional via wire tessellation but semantically wrong
✅ Hatch Elevation Z Snap Z uses hatch.elevation - world_offset.z — src/scene/tessellate.rs:627

Grip Gaps

Status Entity Missing Grip Location
✅ LWPolyline Midpoint grips for arc segments src/entities/lwpolyline.rs:162

Text Rendering Gaps

Status Gap Effect Location
✅ TextStyle is_backward flag applied Negative width_factor src/entities/text.rs:61
✅ TextStyle is_upside_down flag applied Rotation offset src/entities/text.rs:64
⚠️ Unicode characters not in CXF fonts Glyph lookup implemented; missing characters silently dropped without warning src/scene/cxf.rs:74

DXF Reader Unit Gaps (acadrust bugs we work around)

These are fixed in our post-load fix_dxf_dimension_rotations() in src/io/mod.rs.

Status Entity Field DXF Code Fix Location
✅ Dimension (Linear) rotation 50 src/io/mod.rs:221
✅ Dimension (all) text_rotation 53 src/scene/tessellate.rs::dimension_text_natural_rotation()
✅ AttributeEntity rotation 50 src/io/mod.rs:224
✅ AttributeDefinition rotation 50 src/io/mod.rs:219
❌ Shape rotation 50 Shape not currently rendered — low priority

Coverage Summary

Subsystem Coverage
Tessellation 34/41 entity types fully, 4 legacy fallback, 3 missing
Snap points 36/41 (Face3D, Solid3D, Region, Body, OLE2Frame missing)
Grip points 36/41 (same 5 missing)
Properties panel 36/41 (same 5 missing)
Hit testing 41/41 (all via fallback)

Gap Status Summary

Status Count
✅ Done 39
⚠️ Partial 2
❌ Not done 2
Total 43

Remaining gaps by priority

Medium: OCS→WCS for Hatch wire outline and MLine/Leader · Viewport GPU scissor rect (pixel-level boundary clipping)

Low: LWPolyline plinegen (GPU shader change needed) · Complex linetype text shapes · OLE2Frame improvement · Shape rotation