OpenCADStudio Python插件实战:用opencad-python模板为你的CAD添加自定义命令
【免费下载链接】OpenCADStudioA CAD application built with Rust — 2D/3D drawing, DWG/DXF support, and GPU-accelerated rendering项目地址: https://gitcode.com/gh_mirrors/op/OpenCADStudio
OpenCADStudio 是一款用 Rust 打造的开源 CAD 软件,支持 2D/3D 绘图、DWG/DXF 格式和 GPU 加速渲染。除了内置命令,它还自带了一个opencad-python 插件:内置 RustPython 解释器,让你在 CAD 里直接用 Python 脚本创建图形、批量编辑实体、驱动原生绘图命令,快速为自己的工作流添加自定义命令。🐍
1️⃣ opencad-python 是什么?
简单说,它是 OpenCADStudio 的第一方 Python 脚本插件,位于 plugins/opencad-python/。它的核心能力:
- 内置 RustPython 解释器:无需安装 Python 环境,脚本直接在插件进程内运行;
ocs模块:一个预绑定的原生模块,直接对接 CAD 文档——读实体、写实体、管理图层、样式、块、布局;- 崩溃隔离:插件运行在独立进程中,Python 脚本出错也不会拖垮主编辑器;
- 一条撤销步:整个脚本的所有修改合并为一次
undo,回退非常省心。
插件的元信息定义在 plugins/opencad-python/plugin.toml,其中command_prefixes = ["PY_"]决定了所有 Python 相关命令都以PY_开头。
2️⃣ 快速上手:两个核心命令
插件提供两条自定义命令,覆盖"随手试一下"和"跑完整脚本"两种场景:
| 命令 | 作用 | 示例 |
|---|---|---|
PY_EVAL <表达式> | 求值单个 Python 表达式,把结果打印到命令行 | PY_EVAL 1 + 1 |
PY_RUN <脚本路径> | 运行一个.py脚本文件(支持多行语句) | PY_RUN my_script.py |
除了命令行输入,Ribbon 选项卡上还提供了两个图形按钮:Eval 1+1(一键冒烟测试)和Run Script…(打开原生文件选择器挑选.py文件执行)。按钮定义可见 plugins/opencad-python/src/lib.rs。
💡 小贴士:
PY_EVAL只接受单个表达式,适合调试取值;完整脚本请用PY_RUN。
3️⃣ 你的第一个 Python 脚本
ocs模块在脚本中已自动绑定,不需要 import。最基础的用法——画一条直线和一个圆:
ocs.add_line(0, 0, 10, 10) # 添加一条 2D 直线,返回句柄 ocs.add_circle(5, 5, 3) # 添加一个圆,返回句柄 handles = ocs.selection() # 读取当前选中的实体句柄读数据同样简单:ocs.get(handle)返回实体的{handle, kind, layer, point}信息,ocs.layers()可列出所有图层。完整的函数清单(40 多个读写函数)收录在 plugins/opencad-python/PLUGIN.md。
4️⃣ 进阶:文档模型与事务编辑
API v7 构建中,脚本还能拿到完整的文档模型(doc = ocs.active_document),像操作对象一样增删改查 43 种画布实体:
doc = ocs.active_document line = doc.create_entity("Line", start={"x": 0, "y": 0, "z": 0}, end={"x": 10, "y": 0, "z": 0}) with doc.transaction("Move line"): # 事务内修改,一次撤销即可还原 line.end = (15, 5, 0)模型层还提供了一系列"绘制表"管理器,全部由宿主校验、一步撤销:
doc.layers:创建/改名/删除图层,设置颜色、线型、线宽;doc.text_styles/doc.dim_styles:管理文字样式与标注样式;doc.blocks:把现成实体打包成块并支持后续插入;doc.linetypes/doc.layouts:自定义线型、创建图纸布局。
官方示例脚本演示了画矩形、三角形、圆弧,并用PCONSTRAINT/TCONSTRAINT施加真实持久的几何约束——拖一条线,与之平行的那条会跟着动。代码见 plugins/opencad-python/examples/example.py。
5️⃣ 用脚本驱动原生 CAD 命令
脚本不只是"画东西",还能调用 OpenCADStudio 自己的命令引擎,行为与在命令行敲入完全一致(同样的提示、几何和撤销):
doc.command("CIRCLE 5,5 3"):一行执行整条命令;doc.start_command("OFFSET"):逐步应答交互式提示;doc.modify:常用修改工具的纯函数式封装——offset、trim、extend、fillet、chamfer、move、rotate、scale、mirror、矩形/环形/路径阵列、explode、join等一应俱全。
这让"批量圆角""沿路径复制 100 个孔位"这类重复劳动,变成了十几行 Python 的活。
6️⃣ 安全沙箱:脚本碰不到你的文件系统
很多新手担心脚本安全。这个插件做了认真的安全审计:RustPython 以禁用标准库方式编译,os、socket、subprocess、open()等全部被屏蔽——脚本唯一能调用的就是ocs模块。即使脚本里写了import os,得到的也只是ModuleNotFoundError。审计细节记录在 plugins/opencad-python/PLUGIN.md。
7️⃣ 想自己扩展?从这里看起 📚
- 插件设计与分期计划:plugins/opencad-python/ROADMAP.md
- 完整命令与
ocs模块参考:plugins/opencad-python/PLUGIN.md - 插件入口与 Ribbon 按钮源码:plugins/opencad-python/src/lib.rs
- Python 文档模型实现:plugins/opencad-python/src/document_model.py
- 从零开发自己的插件模板:docs/plugin-template/README.md
- 插件宿主 API(Rust 侧):crates/ocs_plugin_api/
- 插件架构总览:docs/plugin-architecture.md
总结
OpenCADStudio 的 opencad-python 插件把"脚本化 CAD"的门槛降到了极致:打开软件即可用PY_EVAL试算,PY_RUN跑脚本,几十行 Python 就能创建实体、编辑图层、批量修改几何,还自带沙箱保护和一步撤销。如果你有批量出图、自动标注或参数化建图的诉求,这套 Python 插件模板值得今天就试起来!
【免费下载链接】OpenCADStudioA CAD application built with Rust — 2D/3D drawing, DWG/DXF support, and GPU-accelerated rendering项目地址: https://gitcode.com/gh_mirrors/op/OpenCADStudio
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考