Two review findings, both root causes.
1. `_sync_header_to_dimstyle` copied the DIMSTYLE entry's ezdxf-internal
arrowhead spelling (OBLIQUE) into the DXF-facing $DIMBLK/$DIMBLK1/$DIMBLK2
header, so the saved file named a block it did not hold (the blocks are
_OBLIQUE / _DOT) and `system_get_variable("DIMBLK")` answered "OBLIQUE"
headlessly against "_OBLIQUE" on COM and in the same engine's own
`dimstyle_list` row. The header write now goes through
`reported_arrowhead` — the same read-side rule `_dimstyle_value` applies.
Pinned by header, `system_get_variable`, save/reopen (`ezdxf.readfile`
header equals the block the file holds) and the Restore-to-Standard
empty-string case in `test_builtin_arrowheads_render_save_and_report_one_spelling`.
2. The `mleaderstyle` capability refusal rested on a false engine boundary.
acax25enu.tlb (AutoCAD 2026) exposes IAcadMLeaderStyle with Name,
ArrowSize, LandingGap, TextHeight, TextStyle, ... — exactly what
`Dictionaries.Item("ACAD_MLEADERSTYLE").Item(i)` returns — and
IAcadDictionary.AddObject(keyword, "AcDbMLeaderStyle") creates one.
COM `mleaderstyle_list` now reads the four values off those objects
(`values_available: True`); COM `mleaderstyle_create` validates every value
(`validate_mleaderstyle`, shared with ezdxf), checks the clash and the text
style before AddObject, then writes the four properties. The contract
method is `@abstractmethod` again, the key is gone from both capability
maps, the fake ActiveX surface models the real call shape, and the spec
(§4.2, §8.1, §9) states the ActiveX route.
Live AutoCAD was not running on this machine (GetActiveObject: operation
unavailable; no acad.exe), so the COM route is type-library-verified and
fake-tested, not executed live — scripts/smoke_settings_com.py (Task 24)
owns that.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FKFStjEFzpGyLq5bMpWxTd
53 lines
1.4 KiB
Python
53 lines
1.4 KiB
Python
"""Authored drafting standards data.
|
|
|
|
Dimension, text and leader style presets live here (track E, group S); the
|
|
system-variable catalogue, paper sizes, plot styles and templates are sibling
|
|
modules added by their own groups and imported by path. Everything in this
|
|
package is data plus validation — no I/O, no ezdxf, no COM — so the backends,
|
|
the tools and the provenance tests read one copy.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from engineering.standards.dimstyles import (
|
|
ARROWHEAD_BLOCKS,
|
|
DIM_VARIABLE_RANGES,
|
|
DIM_VARIABLE_WHITELIST,
|
|
PRESET_VARIABLES,
|
|
PRESETS,
|
|
canonical_arrowhead,
|
|
check_dim_value,
|
|
describe_preset,
|
|
ezdxf_arrowhead,
|
|
reported_arrowhead,
|
|
resolve_dimstyle,
|
|
validate_overrides,
|
|
)
|
|
from engineering.standards.mleaderstyles import (
|
|
MLEADER_PRESETS,
|
|
resolve_mleaderstyle,
|
|
validate_mleaderstyle,
|
|
)
|
|
from engineering.standards.textstyles import TEXT_PRESETS, resolve_font, validate_textstyle
|
|
|
|
__all__ = [
|
|
"ARROWHEAD_BLOCKS",
|
|
"DIM_VARIABLE_RANGES",
|
|
"DIM_VARIABLE_WHITELIST",
|
|
"MLEADER_PRESETS",
|
|
"PRESETS",
|
|
"PRESET_VARIABLES",
|
|
"TEXT_PRESETS",
|
|
"canonical_arrowhead",
|
|
"check_dim_value",
|
|
"describe_preset",
|
|
"ezdxf_arrowhead",
|
|
"reported_arrowhead",
|
|
"resolve_dimstyle",
|
|
"resolve_font",
|
|
"resolve_mleaderstyle",
|
|
"validate_mleaderstyle",
|
|
"validate_overrides",
|
|
"validate_textstyle",
|
|
]
|