forked from 1b-agent/opencadstudio-upstream
feat(python): block definitions (doc.blocks)
TableOperation gains BlockCreate (copy entities into a definition shifted by the base point, optionally erasing originals), BlockModify, BlockRename (inserts follow) and BlockDelete (refused while referenced; removes members, markers and orphaned draw-order tables). Real-IPC audit with DWG/DXF persistence and undo, IPC and Python unit tests, docs; the DXF loss of the block description is pinned by a canary. Co-Authored-By: Claude Sonnet 5 <[email protected]>
This commit is contained in:
1 parent
aaea15e4ef
commit
8d20d280fe
9 files changed
+612
No files matched your search
@@ -208,4 +208,6 @@ Found by `audit_python_text_and_dim_styles_over_real_ipc`; each is pinned by a c
|
||||
- **`DIMSTYLE` text style name:** the DXF reader keeps only the text-style handle (group 340) and never
|
||||
resolves `dimtxsty` from it, so the name reopens as `Standard` (the handle is right; DWG resolves both).
|
||||
- **`TextStyle::true_type_font`** is never written or read by either codec, so it lives only in memory.
|
||||
- **`BLOCK_RECORD` description:** the DXF codec does not carry `BlockRecord::description`
|
||||
(found by `audit_python_blocks_over_real_ipc`, pinned by a canary); DWG keeps it.
|
||||
|
||||
@@ -213,3 +213,17 @@ semantics, rename following references, current/delete guards, five-step undo),
|
||||
tests. Four cadcodec findings (STYLE flags and oblique units, DIMSTYLE name, `true_type_font`) are pinned by
|
||||
canaries and listed in `cadcodec-reader-gaps.md`. Next: linetypes, blocks, layouts; then headless commands.
|
||||
|
||||
### 2026-09-21: blocks (`doc.blocks`)
|
||||
|
||||
`TableOperation` gained `BlockCreate` (copy existing model/paper entities into a definition shifted by
|
||||
`-base_point`, optionally erasing the originals), `BlockModify` (description, explodable, uniform scale),
|
||||
`BlockRename` (inserts follow, via `Scene::rename_block`) and `BlockDelete` (refused while an insert, a
|
||||
dimension-style arrow or a multileader uses it; removes the members, markers, record and orphaned draw-order
|
||||
tables). Creation reuses `Scene::define_block_from_owned_entities`. Python: `blocks.create/modify/rename/delete`,
|
||||
lookup and iteration, records with member handles and kinds. Evidence: `audit_python_blocks_over_real_ipc`
|
||||
(18 refusals; shifted geometry and base point; inserts following a rename; original kept vs erased;
|
||||
live/DWG/DXF persistence; guarded delete; three-step undo restoring the definitions), IPC round-trip and Python
|
||||
unit tests. One more cadcodec finding (DXF drops the block description) is pinned by a canary. Not covered:
|
||||
editing a definition's contents in place, and attribute definitions inside a scripted block. Next: linetypes and
|
||||
layouts, then headless commands.
|
||||
|
||||
Reference in new issue
Block a user