feat(automation): richer query geometry + layers/header introspection
query now emits geometry for Ellipse/Text/MText/Polyline/Insert (on top of Line/Circle/Arc/Point). Add layers op (name, ACI/RGB colour, on/off, frozen, locked + current layer) and header op (units, PDMODE/PDSIZE, LTSCALE, annotation scale, current layer/text style). ocs.py gains layers()/header(). Lets an agent read the drawing's structure and settings, not just entity counts. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
707c143212
commit
d4f5ed3135
3 changed files with 80 additions and 1 deletions
|
|
@ -19,7 +19,9 @@ can act → observe → act.
|
|||
| `{"op":"open","path":"plan.dwg"}` | entity summary |
|
||||
| `{"op":"run","cmd":"LAYER Walls"}` | `{"ok":true,"cmd":...,"entities":N,"added":D}` |
|
||||
| `{"op":"entities"}` | `{"ok":true,"total":N,"by_type":{"Line":42,...}}` |
|
||||
| `{"op":"query","type":"Line","layer":"Walls"}` | per-entity `{handle,type,layer,…geometry}` (filters + `limit` optional) |
|
||||
| `{"op":"query","type":"Line","layer":"Walls"}` | per-entity `{handle,type,layer,…geometry}` (Line/Circle/Arc/Point/Ellipse/Text/MText/Polyline/Insert; filters + `limit` optional) |
|
||||
| `{"op":"layers"}` | layers `{name,color,off,frozen,locked}` + the current layer |
|
||||
| `{"op":"header"}` | drawing variables (units, PDMODE/PDSIZE, LTSCALE, …) |
|
||||
| `{"op":"select","handles":["2B"]}` | set the selection (by `handles`, `type`, or `layer`; `clear` to deselect) → `{"ok":true,"selected":N}` |
|
||||
| `{"op":"undo"}` / `{"op":"redo"}` | step the document history → entity summary |
|
||||
| `{"op":"save","path":"out.dwg"}` | `{"ok":true,"saved":"out.dwg"}` (path optional once opened/saved) |
|
||||
|
|
|
|||
|
|
@ -79,6 +79,14 @@ class Ocs:
|
|||
"""List entities (handle, type, layer, geometry), optionally filtered."""
|
||||
return self._send(op="query", type=type, layer=layer, limit=limit)
|
||||
|
||||
def layers(self) -> dict[str, Any]:
|
||||
"""List layers (name, color, on/off, frozen, locked) and the current one."""
|
||||
return self._send(op="layers")
|
||||
|
||||
def header(self) -> dict[str, Any]:
|
||||
"""Read drawing header variables (units, PDMODE/PDSIZE, LTSCALE, …)."""
|
||||
return self._send(op="header")
|
||||
|
||||
def select(
|
||||
self,
|
||||
handles: Optional[list[str]] = None,
|
||||
|
|
|
|||
Loading…
Reference in a new issue