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):
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