feat(environment): portable layer states, named views and UCS on both engines

Layer states are ACADMCP_LAYERSTATES XRECORD chunks (<= 255 ASCII chars each),
in the file and not in AutoCAD's Layer States Manager. Headless view restore
writes the *Active VPORT (ezdxf's header has no $VIEWCTR; measured). UCS is
stored and made current; tool coordinates stay WCS.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FKFStjEFzpGyLq5bMpWxTd
This commit is contained in:
Umut CAN
2026-09-17 09:47:39 +03:00
co-authored by Claude Opus 5
parent 2805697d16
commit dcc8f07bf4
15 changed files with 2379 additions and 12 deletions
+139 -3
View File
@@ -3,7 +3,7 @@
"schema_version": 1,
"package_version": "1.5.1",
"totals": {
"tools": 169,
"tools": 179,
"resources": 8,
"prompts": 5,
"groups": 20
@@ -19,7 +19,7 @@
"entity_creation": 18,
"entity_modification": 16,
"entity_query": 9,
"layers": 14,
"layers": 18,
"layouts": 12,
"pid": 9,
"premium": 12,
@@ -28,7 +28,7 @@
"templates": 2,
"transactions": 3,
"validation": 1,
"view": 4
"view": 10
},
"tools": [
{
@@ -1611,6 +1611,60 @@
"title": "Show Layer"
}
},
{
"name": "layer_state_delete",
"group": "layers",
"cost": "destructive",
"summary": "Delete one saved layer state from the drawing.",
"tags": [
"layer"
],
"annotations": {
"title": "Delete Layer State",
"destructiveHint": true
}
},
{
"name": "layer_state_list",
"group": "layers",
"cost": "read",
"summary": "List the layer states saved in this drawing.",
"tags": [
"layer"
],
"annotations": {
"title": "List Layer States",
"readOnlyHint": true
}
},
{
"name": "layer_state_restore",
"group": "layers",
"cost": "safe",
"summary": "Restore a saved layer state, all properties or a chosen subset.",
"tags": [
"layer"
],
"annotations": {
"title": "Restore Layer State",
"readOnlyHint": false,
"destructiveHint": false
}
},
{
"name": "layer_state_save",
"group": "layers",
"cost": "safe",
"summary": "Save the layer table (on/frozen/locked/colour/linetype/lineweight/plot + current) under a name, in the file.",
"tags": [
"layer"
],
"annotations": {
"title": "Save Layer State",
"readOnlyHint": false,
"destructiveHint": false
}
},
{
"name": "layer_thaw",
"group": "layers",
@@ -2251,6 +2305,47 @@
"destructiveHint": true
}
},
{
"name": "ucs_list",
"group": "view",
"cost": "read",
"summary": "List the user coordinate systems, with the implicit world one.",
"tags": [
"view"
],
"annotations": {
"title": "List UCS",
"readOnlyHint": true
}
},
{
"name": "ucs_restore",
"group": "view",
"cost": "safe",
"summary": "Make a saved UCS current, or `world` to reset to WCS.",
"tags": [
"view"
],
"annotations": {
"title": "Restore UCS",
"readOnlyHint": false,
"destructiveHint": false
}
},
{
"name": "ucs_set",
"group": "view",
"cost": "safe",
"summary": "Define (or replace) a named UCS from an origin and two perpendicular axes, and make it current.",
"tags": [
"view"
],
"annotations": {
"title": "Set UCS",
"readOnlyHint": false,
"destructiveHint": false
}
},
{
"name": "validation_check",
"group": "validation",
@@ -2265,6 +2360,47 @@
"readOnlyHint": true
}
},
{
"name": "view_named_list",
"group": "view",
"cost": "read",
"summary": "List the named views saved in this drawing.",
"tags": [
"view"
],
"annotations": {
"title": "List Named Views",
"readOnlyHint": true
}
},
{
"name": "view_named_restore",
"group": "view",
"cost": "safe",
"summary": "Restore a named view.",
"tags": [
"view"
],
"annotations": {
"title": "Restore Named View",
"readOnlyHint": false,
"destructiveHint": false
}
},
{
"name": "view_named_save",
"group": "view",
"cost": "safe",
"summary": "Save a named view: a centre and height (and width) to come back to.",
"tags": [
"view"
],
"annotations": {
"title": "Save Named View",
"readOnlyHint": false,
"destructiveHint": false
}
},
{
"name": "view_screenshot",
"group": "view",