返回

文章详情

展示 HN:LuaCAD - 用 Lua 脚本编写的参数化 CAD

Hacker News2026年8月14日 16:43

可脚本化的 CAD,使用 Lua 编写。用 Lua 编写参数化的 2D 和 3D 模型,将它们导出为 3MF、STL、OBJ、PLY、OFF、AMF 或 SCAD,或直接渲染为 PNG。LuaCAD 将 Lua 5.4 嵌入在 Rust 引擎中,直接评估 CSG 操作(通过 Manifold)或生成 OpenSCAD 代码以供外部渲染。为什么选择 Lua?与 OpenSCAD 语言类似的语法,但更好:更强大、更一致、更快、易于嵌入。自然的 CSG 语法的运算符重载(`a + b`,`a - b`,`a * b`)。已在其他 CAD 软件中使用,如 LibreCAD 和 Autodesk Netfabb。示例 LuaCAD:my_cube = cube { size = { 1, 2, 3 } } function my_sphere(radius) return sphere({ r = radius }):translate(5, 0, 0) end model = my_cube + my_sphere(2) render(model) 等效的 OpenSCAD:module my_cube() { cube(size=[1,2,3]); } module my_sphere(radius) { translate([5,0,0]) sphere(r = radius); } union() { my_cube(); my_sphere(2); } 入门指南 cargo install luacad # 运行和转换 LuaCAD 脚本的命令行工具 cargo install luacad-studio # 带有实时 3D 预览的 GUI 桌面应用程序。或者从源代码构建,这需要 Rust:git clone https://github.com/ad-si/LuaCAD.git cd LuaCAD make install。这两个库都提供了他们的 C/C++ 依赖项,因此不需要安装系统库 - 但必须能够使用 C++ 编译器和 CMake 来构建它们。luacad 构建 Manifold 和 Clipper2;luacad-studio 除此之外还构建 OpenCSG,需要 OpenGL 开发头文件(在 Debian/Ubuntu 上:libgl1-mesa-dev,libx11-dev,libxcb1-dev,libxkbcommon-dev,libxrandr-dev,libwayland-dev)。命令行用法 luacad convert model.lua output.3mf # 转换为 3MF luacad convert model.lua output.stl # 转换为 STL luacad convert model.lua output.scad # 导出为 OpenSCAD luacad watch model.lua output.3mf # 文件更改时重新构建 luacad render model.lua preview.png # 渲染为 PNG 图像 luacad info model.lua # 打印三角形计数和边界框 luacad lint model.lua # 使用 selene 进行代码检查(也可以处理目录) luacad run model.lua # 执行(仅限副作用)转换和监视从输出扩展名推断格式;--format <fmt> 覆盖它,--via-openscad 将导出交给安装的 OpenSCAD 二进制文件而不是使用 Manifold 构建网格。BOSL2 LuaCAD 完全支持 Belfry OpenSCAD Library v2,重新实现了 LuaCAD 本身,因此可以在不安装 OpenSCAD 或 BOSL2 的情况下渲染、预览和导出到网格:bosl.cuboid { {40, 40, 40}, rounding = 2 } bosl.regular_prism { 5, r = 10, h = 25 } bosl.spur_gear { circ_pitch = 5, teeth = 20, thickness = 5 } 导出到 .scad 仍然会写入 BOSL2 调用本身,从而保持导出文件和生成它的脚本一样简短。文本和导入 text() 将系统字体轮廓化为草图,text3d() 在一步中将其挤出,因此文本成为真实的几何形状,而不是 SCAD 输出:render(text("LuaCAD", { size = 12, halign = "center" }):linear_extrude(2)) import() 读取 LuaCAD 写入的每种网格格式,并返回一个可以像任何原始体一样变换和组合的固体;SVG 和 DXF 则返回 2D 草图,准备挤出。支持的导出格式 SCAD - OpenSCAD 格式 3MF - 3D 制造格式 STL - 用于 3D 打印的标准三角形语言 OBJ - Wavefront 3D 对象格式 PLY - 多边形文件格式 OFF - 对象文件格式 AMF - 添加制造文件格式。您脚本返回的每个值都成为一个 3MF 对象,因此切片器将它们加载为单独可移动的部件。使用 :name(…) 给它们标记,以控制它们在对象列表中的显示。其他格式无法表示单独对象,因此它们将所有内容平面化为单个网格。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡