mirror of
https://github.com/storytold/cadcraft.git
synced 2026-11-09 20:10:12 -06:00
67 lines
3.8 KiB
Markdown
67 lines
3.8 KiB
Markdown
# Customizing and automating CADCraft
|
|
|
|
What you can use today to automate CADCraft or bring over add-ons written for other CAD programs,
|
|
and what is not there yet.
|
|
|
|
| You have | In CADCraft | More |
|
|
|---|---|---|
|
|
| LISP routines (`.lsp`) | Run with APPLOAD or `(load "name")`. The core language, `command`, entity lists, selection sets, `get…` input and `c:` commands work. | [autolisp.md](autolisp.md) |
|
|
| Startup LISP (`acad.lsp`, `acaddoc.lsp`) | Loaded from the support folder at startup and for each drawing. | [autolisp.md](autolisp.md#at-startup) |
|
|
| Scripts (`.scr`) | SCRIPT (Tools > Run Script...), `cadcraft-cli run --script-file`, and script text over MCP and the control channel. | below |
|
|
| Command aliases (`.pgp`) | ALIASEDIT `{file}` loads an alias file and keeps it; the aliases and the file survive restarts. REINIT reads it again. | below |
|
|
| Compiled plug-ins (C++, .NET) | Not supported. A plug-in API is planned, for plug-ins written in Rust and compiled to WebAssembly. | [gaps.md](gaps.md) (E4) |
|
|
| Programs that drive the CAD program from outside | The JSON control channel, the MCP server and `cadcraft-cli`. Any language that can open a TCP socket or start a process can use them. | below |
|
|
|
|
## LISP routines
|
|
|
|
Most routines that only draw, edit and query objects run as they are. Not yet supported: Visual
|
|
LISP ActiveX functions (`vlax-…`, `vla-…`), DCL dialogs and reactors ([gaps.md](gaps.md) E1). A
|
|
routine that uses them needs those parts rewritten, for example with `command` calls and `get…`
|
|
prompts instead of a dialog.
|
|
|
|
Put routines you want in every session in the support folder (`support` in the settings folder;
|
|
paths in [autolisp.md](autolisp.md#at-startup)) and load them from `acad.lsp` or `acaddoc.lsp`, or
|
|
with `(autoload "file" '("CMD"))` so they load the first time their command is typed.
|
|
|
|
## Scripts
|
|
|
|
A `.scr` file is what you would type at the command line, one line at a time. Run it with SCRIPT
|
|
in the app, or headless:
|
|
|
|
```sh
|
|
cadcraft-cli run drawing.dxf --script-file setup.scr --save out.dxf
|
|
```
|
|
|
|
## Command aliases
|
|
|
|
ALIASEDIT reads a `.pgp` alias file (`ALIAS, *COMMAND` lines); its aliases replace the ones you
|
|
had. Lines that would start external programs are skipped. From a script or the control channel:
|
|
`aliasedit {"file": "/path/to/aliases.pgp"}`. The Command Aliases dialog's **Import…** button picks
|
|
a `.pgp` file, loads it the same way, shows its path and warnings, and remembers the folder it came
|
|
from; on the web (no native file dialog) type `ALIASEDIT` with the file's contents in its `text`
|
|
parameter instead.
|
|
|
|
Aliases are user settings, never part of a drawing. The desktop and web apps keep them, and the
|
|
file REINIT reads, with your other preferences, so aliases added, edited, imported or removed in
|
|
the Command Aliases dialog (or with ALIASEDIT's `set`, `remove` and `clear`) are there after a
|
|
restart, and REINIT reads the same file again. The headless CLI keeps no preferences: there,
|
|
aliases last for that run.
|
|
|
|
## Driving CADCraft from another program
|
|
|
|
Every command has a JSON form that runs without dialogs. `cadcraft-cli commands [FILTER]` prints
|
|
the catalog: each command's id and its parameters.
|
|
|
|
- **Headless batch jobs:** `cadcraft-cli run FILE --cmd 'id {json}' --save OUT --export OUT.png`.
|
|
A `--cmd` parameter value of exactly `{last}` is replaced with the last object handle an earlier
|
|
`--cmd` in the same run returned, so `viewport.set {"handle":"{last}","scale":1}` can follow
|
|
`mview`. Every other value is passed unchanged.
|
|
- **The running app:** start it with `--control PORT` and send JSON lines to `127.0.0.1:PORT`.
|
|
See [control-protocol.md](control-protocol.md).
|
|
|
|
```sh
|
|
printf '%s\n' '{"id":1,"method":"cmdline.input","params":{"text":"circle 0,0 5"}}' | nc -w 2 127.0.0.1 7979
|
|
```
|
|
|
|
- **AI agents:** `cadcraft-cli mcp`, headless or connected to the app. See [mcp.md](mcp.md).
|