三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

SketchUp STL 插件从零到一:把模型变成3D打印文件的完整实操记录

SketchUp STL 插件从零到一:把模型变成3D打印文件的完整实操记录

SketchUp STL 插件从零到一:把模型变成3D打印文件的完整实操记录

【免费下载链接】sketchup-stlA SketchUp Ruby Extension that adds STL (STereoLithography) file format import and export.项目地址: https://gitcode.com/gh_mirrors/sk/sketchup-stl

凌晨两点,老周盯着屏幕上的"导出失败"四个字,快把鼠标捏碎了。他在 SketchUp 里花了一下午搭的机械臂模型,卡在了最后一步——切片软件只认 STL 格式,而 SketchUp 原生根本不支持 STL。网上的教程翻了个遍,不是让你装付费插件,就是让你用各种奇奇怪怪的转换网站,把模型丢上去还得担心隐私问题。

后来他找到了一款叫 sketchup-stl 的开源插件。这是一款由 SketchUp 官方团队维护的 Ruby 扩展,专门为 SketchUp 补齐 STL 文件格式的导入和导出能力。装上之后,从建模到导出3D打印文件,全程没离开过 SketchUp 界面。如果你也在跟老周一样的问题较劲,这篇文章就是为你写的——我会从安装讲起,一直讲到踩过的每一个坑。

30秒速览:这东西到底是什么

sketchup-stl 本质上是一个 Ruby 扩展(当前版本 2.2.0),安装后会给 SketchUp 增加两个入口:文件 → 导入新增 STL 类型,文件 → 导出 STL...菜单项。它免费、开源、MIT 许可,代码就放在 src/sketchup-stl/ 目录下,英语、德语、荷兰语界面它都支持。

维度说明
能解决什么SketchUp 原生不支持 STL 导入导出,它是那座桥
导出能力支持 ASCII / Binary 两种格式,可选单位,可只导出选中物体
导入能力自动识别 ASCII / 二进制,支持单位缩放、合并共面、自动修复
适合谁用 SketchUp 做3D打印模型的个人和工作室,以及想学 Ruby 扩展开发的人
不适合谁想用 SketchUp 做复杂曲面逆向建模的用户(STL 本质是三角网格)
上手成本装一个 RBZ 文件,点两下菜单

为什么值得单独说一句:它底层处理 STL 的很多思路(比如下面要讲的单位换算和格式识别)本身就是很好的学习材料,读一遍 src/sketchup-stl/ 里的代码,比看十篇博客都管用。

上手三步曲:从下载到第一次导出

第一步,拿安装包。从 SketchUp 扩展商店下载最新的 RBZ 文件。注意别下成旧的 zip 包——RBZ 才是 SketchUp 认可的扩展打包格式。

第二步,装进 SketchUp。打开窗口 → 扩展管理器(Mac 上是SketchUp → 偏好设置),点"安装扩展",选中刚下载的 RBZ 文件,搞定。装完重启一下 SketchUp,看到文件菜单里多出导出 STL...就说明成功了。

第三步,导一次试试。随便画个立方体,文件 → 导出 STL...,在弹出的选项窗口里保持默认值,选个位置保存。用记事本打开刚导出的文件——你会看到一大段以solid开头、endsolid结尾的文本,那里面每一行facet normal和三个vertex就是一个三角面。

踩坑提示:导出对话框里默认格式是 ASCII,文件会比较大。确认流程没问题之前,别急着追求"文件小",ASCII 格式能用文本编辑器直接检查内容,排查问题方便得多。

我的实操全流程:一个花盆模型的完整旅程

我拿自己最近做的多肉花盆练了一遍手,过程比想象中顺,但也翻过两次车。

准备阶段。花盆在 SketchUp 里是个内外两层面的实体,底部留了三个排水孔。导出前我做了两件事:一是把所有辅助线删干净,二是检查每个图层——导出器会跳过隐藏图层和隐藏对象,这个逻辑藏在 exporter.rb 的find_faces方法里,画图时随手藏的参考线不会污染文件,但也意味着你"以为导出了"的东西可能根本没进去。

第一次导出,尺寸吓我一跳。我选了毫米单位导出,然后在切片软件里打开,花盆居然只有指甲盖大小。查了源码才明白原因:SketchUp 内部所有长度都以英寸存储,导出时按单位乘一个换算系数——毫米乘 25.4,厘米乘 2.54,英尺乘 0.0833。问题出在模型本身:我在 SketchUp 里建的"10 单位"花盆,其实是 10 英寸,而不是 10 毫米。这不是插件的锅,是建模时单位习惯的锅。把模型重建成毫米语义下的正确尺寸,重新导出,一切正常。

第二次翻车,是二进制格式。为了传文件方便,我试了 Binary 格式。导出的文件确实小——二进制每条三角面固定占 50 字节,80 字节文件头加 4 字节三角形数量,后面就是密密麻麻的浮点数,完全不可读。导入切片软件没问题,但我想拿文本编辑器核对数据就做不到了。所以我的建议是:给切片软件用二进制,给排查问题用 ASCII

导入验证环节。我把导出的文件用文件 → 导入又拉回 SketchUp,检验数据没丢。导入选项里有四个勾选项,值得分别说清楚:

  • 合并共面面:把相邻且在同一平面上的三角面合并,减少碎面,对后续编辑友好;
  • 单位缩放:导入时按你选的单位重新缩放,配合导出时的单位设置使用;
  • 保留绘图原点:勾选后几何保持原坐标,不勾选会自动把模型移到原点附近;
  • 修复几何:这个后面单独讲,是隐藏大招。

整个流程走下来,从 SketchUp 建模到切片软件就绪,没碰任何第三方转换工具。

进阶工具箱:三个很少人知道的隐藏能力

这招很少人知道——自动修复几何。STL 文件里模型不一定是"水密"的,有破洞、有开放边界,直接切片大概率打印失败。导入选项里的"修复几何"就是干这个的。它的实现很有意思:往模型里塞一批零长度边,再触发 SketchUp 内部的几何修复机制把顶点焊起来。源码在 src/sketchup-stl/ 的 utils.rb 里,方法名叫heal_geometry。如果你的模型是网上下的、来源不明的 STL,导入时千万别把这项关掉。

这招也很少人知道——二进制文件的"照妖镜"识别。STL 分 ASCII 和二进制两种,理论上 ASCII 文件以solid开头,但有些二进制文件不守规矩,头部也写solid,光看开头根本分不清。sketchup-stl 的做法很聪明:它跳过 80 字节头,读出第 81 到 84 字节的三角形数量,然后按80 + 4 + 50 × 三角形数算一遍文件大小,跟实际文件大小一比对,严丝合缝就是二进制,否则就是 ASCII。这是我在 importer.rb 里读到的最漂亮的 trick 之一。

最后一招——隐藏图层自动跳过导出。想导出模型的一部分又不想删掉另一半?不用新建组件再单独选择,把不想导出的内容放进隐藏图层就行。导出器遍历时遇到hidden?或者不可见图层里的对象直接跳过。配合"仅导出当前选择"(没选中任何东西时会弹窗问你要不要导整个模型),你能很灵活地控制导出范围。

如果你对源码本身感兴趣,可以用git clone https://gitcode.com/gh_mirrors/sk/sketchup-stl拉一份到本地慢慢看,整个项目结构很干净,exporter.rbimporter.rbutils.rb三个文件基本就是全部核心逻辑。

问答与收尾:关于 SketchUp STL 导入导出的最后一轮答疑

问:导出的模型在切片软件里显示法线反了、破面,怎么办?先看是不是有翻转的组件或面。STL 格式要求顶点按右手定则排列,而 SketchUp 里翻转的组件会破坏这个规则。sketchup-stl 在导出时会用叉积重新计算法线方向,自动纠正顶点顺序(源码在get_vertex_order方法里),所以绝大多数情况下它会自己处理。真遇到问题,用"修复几何"再导入一次试试。

问:导入的 STL 文件进来后模型巨大/巨小,是插件坏了吗?大概率是单位设置问题。STL 文件本身不带单位信息,全靠导入时的"单位缩放"选项猜。源头文件如果是毫米导出的,导入时就把单位选成毫米,一般能对得上。

问:二进制和 ASCII 到底选哪个?二进制文件体积小、解析快,适合最终交付给切片软件;ASCII 可读性好,适合调试和二次处理。日常导给切片软件选二进制,自己排查问题选 ASCII。插件会记住你上次的选择,不用每次重设。

问:这个插件值得拿来学 Ruby 扩展开发吗?值得。它结构清晰、注释友好、还自带一套完整的 UI 组件库(SKUI),从菜单注册、对话框到本地化字符串处理全都有。能完整跑通一个 SketchUp 扩展该有的所有环节,是很典型的学习样板。

写到最后,我想起老周后来跟我说的话:"早知道有这东西,我那两个小时的教程视频都白看了。" 工具往往就是一层窗户纸,sketchup-stl 把 SketchUp 和 3D 打印之间那层窗户纸捅破了。你的下一步很简单:装上它,画一个封闭的实体,导出,切片,打印。从第一个成功的 3D 打印文件开始,剩下的事情都会顺理成章。

【免费下载链接】sketchup-stlA SketchUp Ruby Extension that adds STL (STereoLithography) file format import and export.项目地址: https://gitcode.com/gh_mirrors/sk/sketchup-stl

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

← 返回列表