Antimony:从 Lisp 机器而非绘图台演化而来的 CAD 软件
摘要
Antimony 是一款实验性 CAD 工具,通过在有向无环图(DAG)中连接可脚本化的节点来进行实体建模,使用函数表示来实现构造实体几何(CSG)和由 Python 定义的形状。它支持自动传播更改、交互式视口编辑,以及带特征检测的 STL/高度图导出。
暂无内容
查看缓存全文
缓存时间: 2026/11/03 15:44
# Antimony
来源:https://www.mattkeeter.com/projects/antimony/3/
## 关于
Antimony 是一款来自平行宇宙的计算机辅助设计 \(CAD\) 工具,在那个宇宙中,CAD 软件是从 Lisp 机器而非绘图板演化而来的\.
## 演示
## 基础
Antimony 建立在三个基本相互独立的方面之上:
- 一个通过有向无环图追踪信息流的框架
- 一个用于进行构造实体几何(CSG)运算的几何引擎 (http://en.wikipedia.org/wiki/Constructive_solid_geometry)
- 一个形状与变换的标准库
### 图引擎
在 Antimony 中,实体建模通过连接图中的节点来完成:图示例
每个节点都由可自定义的脚本定义\. Antimony 使用 Python 3\.x,并添加了几个特殊关键字\.
上面的圆形节点如下所示:
``
import fab.shapes
# 定义一组输入端口
# (并将变量注入局部命名空间)
input('x', float)
input('y', float)
input('r', float)
# 调用标准形状库中的 'circle' 函数
# 使用从输入端口传入的变量
c = fab.shapes.circle(x, y, r)
# 创建一个输出圆形形状的输出端口
output('shape', c)
``
节点通常表示一种基本形状或变换\. 系统会追踪连接,并自动将更改传播到下游\.
更改传播
图引擎可以扩展到复杂的多零件装配体\.
Kelvin
Kelvin
### 几何引擎
Antimony 的几何引擎使用函数表示法 (http://en.wikipedia.org/wiki/Function_representation) 进行实体建模\. 这种表示法特别适合使用布尔运算 \(并集 / 交集 / 差集\) 进行建模\.
布尔运算示例
在应用程序中,几何引擎将形状渲染为带明暗效果的位图\. 随后将这些位图以块传输方式绘制到 3D 视口中\.
应用程序截图
Antimony 可以导出用于 2\.5D 加工的高度图,以及用于 3D 制造的 `\.stl` 文件\. `\.stl` 导出包含特征检测功能,以保持角点和边缘清晰锐利\.
网格
### 标准库
Antimony 的标准库定义了许多形状和变换 (https://github.com/mkeeter/antimony/blob/develop/py/fab/shapes.py),从基本操作 \(旋转、缩放、布尔运算\) 到特殊操作 \(吸引、排斥、弯曲\),应有尽有\.
这些形状用于节点定义中,节点定义通常会添加输入和输出端口,也可以选择定义用户界面功能\.
下面是一个定义了用户界面功能的节点示例:
``
import fab
title('矩形')
input('xmin', float)
input('ymin', float)
input('xmax', float, 1)
input('ymax', float, 1)
output('shape', fab.shapes.rectangle(xmin, xmax, ymin, ymax))
# 用户界面
sb.ui.wireframe([(xmin, ymin, 0), (xmax, ymin, 0),
(xmax, ymax, 0), (xmin, ymax, 0)], close=True)
sb.ui.point(xmin, ymin, 0)
sb.ui.point(xmax, ymax, 0)
``
在 3D 视口中,脚本底部定义的用户界面元素会绘制在矩形的渲染结果之上\.
这些用户界面元素又与图相连:拖动矩形角上的点,会将更改推送到图节点\.
界面拖动
**题外话**:内置形状足以满足大多数用户的需求,但也可以定义自定义形状\.
形状使用前缀字符串语法表示,这种语法易于解析,但读起来有些晦涩\. 下面是上述圆形形状的定义:
``
def circle(x0, y0, r):
return Shape(
'-r+q-Xf%gq-Yf%gf%g' % (x0, y0, r), # 数学表达式字符串
x0 - r, y0 - r, x0 + r, y0 + r) # 边界
``
将前缀字符串展开并按层级缩进,得到
``
-
r
+
q
-
X
f%g
q
-
Y
f%g
f%g
% (x, y, r)
``
它编码了一个二维圆的距离场表示:
``
f(x,y) = sqrt(pow(x - x0, 2) + pow(y - y0, 2)) - r
``
其中,`x0`、`y0` 和 `r` 分别是圆心坐标和半径 \(在调用 `circle` 时指定\)\.
前缀字符串到中缀函数的具体映射留给读者作为练习 \(也可以查阅我的论文 (https://www.mattkeeter.com/research/thesis.pdf) 的附录 A\)\.
## 下载
可以从 GitHub 发布页面 (https://github.com/mkeeter/antimony/releases) 下载预先构建好的 Mac 应用程序\.
Antimony 的源代码可在 GitHub (https://github.com/mkeeter/antimony) 上获取,同时还提供了在 Mac 和 Linux 上构建它的说明 (https://github.com/mkeeter/antimony/blob/master/BUILDING.md)\.
## 开发
Antimony 是一个长期持续、正在积极开发中的项目 (https://github.com/mkeeter/antimony/graphs/contributors)\.
开发
它的稳定性处于 Beta 阶段:运行稳健,但不建议用于关键任务\.
如果你有兴趣参与贡献,入门门槛相当低\. 只要具备基本的 Python 知识,就可以开始制作自定义节点 \(例如 RobotGrrl (https://twitter.com/RobotGrrl) 贡献的这个 HSB 颜色节点 (https://github.com/mkeeter/antimony/blob/develop/py/nodes/Color/set_color_hsb.node),或 Neil (http://ng.cba.mit.edu/) 贡献的大量节点 (https://github.com/mkeeter/antimony/commits?author=neilger)\)\.
对于有 C\+\+ 经验、想做更多事情的人来说,还有许多可以改进的地方,从加快渲染速度,到改进用户界面,再到优化图求值\. 如果这些让你感兴趣,请给我留言\.
## 历史
Antimony 源于我在麻省理工学院比特与原子中心 (http://cba.mit.edu/) 开展的工作,研究如何打造功能强大、适合个人使用的 CAD/CAM 工作流程\.
它是这一系列软件中的最新工具,此前的工具包括 cad\_ui (https://www.mattkeeter.com/projects/solver) 和 kokopelli (https://www.mattkeeter.com/projects/kokopelli),同时也从 fabserver (http://kokompe.cba.mit.edu/) 中汲取了灵感\.
若想了解历史背景,可以阅读以下几篇早期的 Antimony 介绍:
- 2014 年初 (https://www.mattkeeter.com/projects/antimony/1)\(作为世界经济论坛的演示项目开发\)
- 2014 年秋季 (https://www.mattkeeter.com/projects/antimony/2)\(为“如何制造几乎任何东西”课程的使用而更新\)
本次更新恰逢 2015 年 Fab Academy (http://fabacademy.org/) 举办;使用这个搜索查询 (https://www.google.com/search?q=site%3Ahttp%3A%2F%2Ffabacademy.org%2Farchives%2F2015%2F%20antimony&rct=j) 可以了解人们如何使用它\.
## 媒体报道与讨论
- Hackaday 报道 (http://hackaday.com/2015/05/29/otherworldy-cad-software-hails-from-a-parallel-universe/)
- Libre Graphics World 访谈 (https://librearts.org/2015/05/introducing-antimony-node-based-cad-application/)
- Hacker News 讨论 (https://news.ycombinator.com/item?id=9623609)
相似文章
OpenSCAD 程序员的实体 3D CAD 建模器
OpenSCAD 是一款免费、开源、面向程序员的实体 3D CAD 建模软件,支持 Linux、Windows 和 macOS,并提供教程、库以及 IRC 和 Mastodon 上的社区支持。
ArtisanCAD: 一种基于专家知识蒸馏的工业级CAD智能体
ArtisanCAD是一种技能引导的工业级CAD智能体,利用专家驱动的知识蒸馏将模糊提示转化为可执行的CAD程序,在Text2CAD基准上提升了性能,并能生成复杂汽车部件的可编辑B-Rep模型。
基准对比:CadQuery与OpenSCAD在代理CAD工作中的表现
一项控制基准测试对比了CadQuery和OpenSCAD在AI智能体生成功能性3D打印部件时的表现,揭示了两者能力相似,但在故障模式和工具特定优势方面存在差异。
展示HN:LuaCAD – 使用Lua脚本化参数CAD
LuaCAD是一个可脚本化的CAD工具,使用Lua进行参数化2D和3D建模,基于Rust引擎构建,支持多种导出格式和CSG操作。
CADFather:通过协同工具调用实现自主CAD重建
CADFather 是一个自主智能体系统,通过协调视觉-语言助手与互补的学习型、算法型和优化工具,从 3D 网格重建可编辑的参数化 CAD 程序,并在 DeepCAD、Fusion360 和 CADENA-Bench 等基准上进行了评估,无需额外训练。