
这次我们来看一个很常见但很磨人的事SketchUp 模型导出 CAD。很多人的工作流是“建模很快导 CAD 很痛苦”模型建完交给深化或者施工图阶段常常要经历图层错乱、线型丢失、坐标偏移、单位不对、一个视图一张图手动导半天最后还得在 CAD 里修图。这次分享的是一套免费而且可复用的做法用 SketchUp 自带的导出能力叠加轻量 Ruby 脚本把重复劳动压缩成一次设置、批量输出。一套流程走完你能得到的核心能力是三件事按场景批量导出 CAD、按图层分别导出 CAD、模型清理和导出选项固定成模板。整体不依赖付费插件不需要额外装大型工具普通办公电脑就能跑。对经常需要把 SU 模型交给 CAD 做标注、深化、报建、施工图配合的人来说这套流程可以直接替换掉原来的手动导出习惯。全文会按这样的顺序展开先梳理手动导出的慢点在哪再做模型前置清理接着讲免费的脚本准备和场景设置然后给出可直接运行的批量导出脚本最后是效果验证和常见问题排查。如果你之前靠的是“逐层显示 - 逐个导出 - 反复修图”这篇文章建议收藏后按步骤走一遍。1. 核心能力速览能力项说明适用软件SketchUpWindows 环境为主Mac 版菜单和 Ruby 控制台位置有差异导出格式DWG / DXFSketchUp 原生导出功能即可完成免费程度不依赖收费插件使用 SketchUp 自带功能与 Ruby 脚本批量能力支持按场景批量导出也支持按图层批量导出自动化程度支持脚本自动化可通过 Ruby 控制台运行无需外部 HTTP API硬件要求普通办公电脑导出速度主要取决于模型面片数和场景数量启动方式打开 SketchUp 模型进入 Ruby 控制台执行脚本学习成本中等重点是理解图层、场景、脚本三个概念适合场景反复提交 CAD、多视图出图、图层拆分、图纸归档这套方案的核心不是某个神奇插件而是流程改造。慢不是慢在“SketchUp 导出这一步”而是慢在“每个视图都要重新设置、导出后还要大量手工修复”。下面先把这个慢点拆开看。2. 为什么 SU 导 CAD 会这么慢先看一个典型的低效工作流在 SketchUp 里建好模型。手动调整视图角度开投影显示。打开“文件 - 导出 - 三维模型”选择 DWG 格式。在弹出的选项里重新设置单位、版本、路径。导出完成后切下一个视图重复刚才所有步骤。把所有视图导完再一张张用 CAD 打开检查发现图层乱、线型不对、图元散落再回头改模型。问题出在哪里导出动作本身很快慢在三点。第一设置重复。每次导出一个视图都要重新点一次菜单、重新选一次单位、重新确认保存路径。如果模型有十个视图就要重复十次。真正花在“等待导出”上的时间只是一小部分大部分时间都在做重复点击。第二源模型本身没整理好。如果模型里的组件、组、辅助线全部堆在 Layer0 上导进 CAD 以后当然分不出图层。CAD 用户拿到文件之后要把大量图元重新归层、整理颜色和线型这和“从 SU 导出”已经没有关系完全是源模型阶段欠的债。第三场景和导出之间没有衔接。SketchUp 的场景页面可以保存视图角度、图层可见性和隐藏状态但很多项目根本没有利用场景作为“导出批次”。于是每个视图都要手工调显示状态、调视角导出的文件之间也缺乏统一命名和保存路径后续归档自然乱。所以要提高效率要做的是三件事把模型整理规范把视图变成场景让脚本代替手工导出。脚本能做到什么程度脚本可以遍历所有场景一个接一个导出也可以按图层临时控制可见性分别输出图层文件还可以把文件命名从“场景名”或“图层名”自动生成完全避免人工起名。这才是“效率翻 10 倍”的实现逻辑不是单次导出变快而是整个流程从重复手工变成了批量自动化。3. 前置准备单位、图层与模型清理脚本只能帮你加速“导出”不能帮你修正“模型本身很乱”的问题。所以在实际运行批量导出脚本之前先花十分钟做前置检查。3.1 统一模型单位SketchUp 里的“英寸”“英尺”“毫米”“米”导出到 CAD 之后会直接影响图纸比例。比如你模型用的是米CAD 里希望用毫米导出后整个模型尺寸会差 1000 倍。最稳妥的做法是建模型之前就定好单位并且在导出前到“模型信息 - 单位”里确认一次。如果你的项目已经在用某一种单位批量脚本能做得更好的是让每次导出的单位保持一致而不是每次手工去改。不同版本 SketchUp 的导出选项中单位字段可能有差异但“单位必须与 CAD 目标图纸一致”这条原则不会变。3.2 图层命名规范CAD 之所以要图层是为了控制线宽、颜色、开关和打印。SketchUp 里画图也应该有对应逻辑。常见的做法是墙体、门窗、家具、地面、标注、辅助线分开建图层。命名用统一前缀比如AX-墙体、AX-门窗、AX-标注方便 CAD 端识别。不要把所有实体都丢在 Layer0 里。组件内部可以保留 Layer0但放置到场景中的实体应该分配明确图层。图层规范越早做导出到 CAD 后的可用性越高。脚本按图层导出时也需要图层名字足够清晰否则自动生成的 DWG 文件名全是“图层1”“图层2”这种含义不明的名字。3.3 清理无用组件和材质你可以在需要时将未使用的模型组件和材质从文档中清除具体入口与最终目的都在“窗口 - 模型信息 - 统计信息”等位置也可以通过 Ruby 脚本执行。脚本清理示例# 清理未使用组件定义、材质减少文件体积和导出时的处理量 model Sketchup.active_model model.materials.purge_unused if model.materials.respond_to?(:purge_unused) model.definitions.purge_unused if model.definitions.respond_to?(:purge_unused) puts 模型清理完成这个脚本的思路是把模型里“已经不存在但定义还残留”的组件和材质清掉减小模型体积也能让导出文件更干净。执行前只需要打开目标模型打开 Ruby 控制台粘贴运行即可。3.4 坐标原点和模型位置CAD 里最常见的灾难之一是模型离原点特别远导致打开 DWG 后图元飞到几十万公里外。SU 建模时也容易在离原点很远的坐标区画线。导出前建议把模型移动到原点附近或者至少确认坐标符合项目习惯。脚本不负责移动模型这一点必须在模型阶段处理。4. 免费工具链与脚本准备这套方案不需要装收费插件。核心依赖只有三样SketchUp 自带导出功能。Ruby 控制台。一个能打开 DWG/DXF 的免费查看工具用于验证导出结果。如果你已经安装了 SketchUp那这套流程基本零成本。没有安装 CAD 的读者也不需要为了验证一个导出的 DWG 去装大型 CAD 软件用免费的 DWG/DXF 预览工具就能完成效果检查。4.1 打开 Ruby 控制台在 SketchUp 的“窗口”菜单里打开 Ruby 控制台英文版叫 Ruby Console。控制台是一个输入 Ruby 代码并显示输出结果的面板。向其中粘贴脚本后按回车即可运行这是验证脚本最快的方式。如果后续需要长期反复使用可以把脚本保存为.rb文件在控制台里用 load 命令加载load D:/SU_Scripts/export_scenes.rb不同版本对脚本路径和 API 方法的支持存在细微差别先从小样本场景试跑确认通过后再放开到整个项目。4.2 导出版本与格式选择SketchUp 导出 DWG/DXF 时通常可以选择目标 CAD 版本。建议统一导出为较低版本让上下游同事用任何 CAD 版本都能打开。具体哪个版本低到足够兼容要看团队工具环境不必盲目追求最新版本。如果只是给深化组做参照DXF 也很常用兼容性更好。实际导出时到底选 DWG 还是 DXF取决于接收方软件和项目要求。脚本层面也只是改一个后缀名的问题。4.3 关于脚本和导出选项的边界需要明确一点脚本不能替你完成“窗口里点导出选项”的全部事情。不同版本 SketchUp 的导出选项差异较大脚本里无法覆盖所有选项配置。安全的思路是先手动导出一次把单位、版本、路径都设好。验证导出的 DWG 符合预期。再交给脚本执行批量导出。这样脚本承担的是“按已有配置批量重复动作”的工作而不是凭空替你猜导出参数。5. 场景设置批量导出的基础批量导出不是让脚本随便截一个视图就导出而是让 SketchUp 按场景一个个输出。所以场景是这次流程里最重要的一环。5.1 创建导出场景在 SketchUp 场景面板里把需要导出成 CAD 的视图全部保存为场景。例如01_平面02_南立面03_东立面04_剖面A05_轴测创建场景的时候不要只存角度还要检查图层可见性。如果某个场景只想显示墙体和门窗就要把家具等图层设置为隐藏并保存到场景属性里。这样脚本每次切换场景时导出的就是当前场景所见内容。5.2 场景命名决定文件名脚本自动导出时会直接用场景名作为 DWG 文件名。所以场景名不要用“场景1”“Scene 1”这种毫无辨识度的名字。命名规则尽量做到数字前缀保证导出顺序。层级含义清晰方便归档。不要包含\/:*?|等特殊字符。路径建议用英文避免中文路径导致部分版本导出失败。一个比较稳的命名示例01_FLOOR_PLAN、02_SOUTH_ELEVATION、03_SECTION_A。如果你的团队习惯用中文也可以不用刻意改英文但路径和文件名的稳定性要在小规模测试中先确认。5.3 场景与图层的配合如果你的项目需要“墙体一张图、门窗一张图”这种按图层拆分提交的模式可以不走场景直接按图层批量导出。这时要保证每个图层里确实有实体且图层分类扎实。两个方向的脚本分别处理不同的使用场景按场景导出适合出图视角固定、每个视图包含多层内容的场景。按图层导出适合按专业拆图、需要分别交付图层的场景。6. 批量导出实操从单视图到全场景下面进入核心操作。整个过程分三步先运行清理脚本再按场景批量导出或者按图层批量导出。先在测试副本上试跑确认没问题再用到正式项目。6.1 打开模型并进入 Ruby 控制台打开要导出的模型确认模型单位、图层、场景都已经检查过。接着打开 Ruby 控制台准备粘贴脚本。建议第一次先做两个场景的测试导出不要直接十多个场景一起跑。脚本出错时小样本更容易定位问题。6.2 按场景批量导出 DWG这是一个通用模板脚本# 按场景页面批量导出 DWG # 使用前请确认导出目录存在脚本按当前已保存的场景顺序执行 model Sketchup.active_model export_dir D:/CAD_Export Dir.mkdir(export_dir) unless Dir.exist?(export_dir) model.pages.each do |page| # 切换到指定场景让导出内容与场景保持一致 model.pages.selected_page page file_path File.join(export_dir, #{page.name}.dwg) result model.export(file_path, DWG) puts 导出 #{page.name} #{result} end脚本逻辑很直接遍历所有场景切换当前场景导出 DWG文件名用场景名。执行过程中注意观察控制台输出的 true还是 false。true表示导出动作成功false说明该文件没有导出成功需要结合报错信息排查。导出目录D:/CAD_Export需要提前创建或者调整为你自己想要的路径。脚本里的目录分隔符是正斜杠避免在 Ruby 字符串里出现反斜杠转义问题。6.3 按图层批量导出 DWG按图层导出的思路稍有不同脚本先记录当前所有图层的可见状态然后只让目标图层可见其余全部隐藏再导出该图层的内容。全部导出完成后恢复原始显示状态。# 按图层批量导出 DWG导出后自动恢复源模型显示状态 model Sketchup.active_model export_dir D:/CAD_Layer_Export Dir.mkdir(export_dir) unless Dir.exist?(export_dir) # 记录每个图层当前可见性 original_visibility {} model.layers.each { |layer| original_visibility[layer.name] layer.visible? } model.layers.each do |layer| # 跳过 Layer0该图层内容通常零散不适合作为独立导出文件 next if layer.name Layer0 # 只显示当前图层 model.layers.each { |other| other.visible (other.name layer.name) } file_path File.join(export_dir, #{layer.name}.dwg) result model.export(file_path, DWG) puts 图层导出 #{layer.name} #{result} end # 恢复原始可见状态 model.layers.each { |layer| layer.visible original_visibility[layer.name] }这个脚本的价值在于不需要手动一个个开关图层也不需要记住哪些图层需要导出。只要模型图层本身规范脚本输出的 DWG 就是一个图层一个文件命名也不用人工起。需要特别提醒脚本执行时会临时改变 SketchUp 的图层显示状态。如果模型里设置了场景并且场景也保存了图层可见性脚本的临时修改可能会影响后续手动浏览。所以在脚本最后加一段恢复逻辑很重要不要省略。6.4 执行后的预期输出假设模型里有01_平面、02_南立面、03_东立面三个场景按场景导出后D:/CAD_Export目录下应该出现01_平面.dwg02_南立面.dwg03_东立面.dwg按图层导出后D:/CAD_Layer_Export目录下应该按实际图层名生成对应的 DWG。如果目录下只有部分文件优先检查是否跳过了名为 Layer0 的图层。是否有图层没有内容。是否有图层名或路径包含中文字符导致失败。6.5 从按钮触发脚本如果你不想每次都打开 Ruby 控制台粘贴脚本可以做一个简单的工具菜单或者把脚本保存为.rb文件之后只改路径和模型执行一行 load 命令。对一个长期项目来说脚本本身不会经常变变的是模型和导出目录。建议把路径统一写在脚本顶部目录结构固定这样每次只需要确认模型已保存即可。7. 导出效果验证与质量检查批量导出完成不等于工作完成。CAD 文件的可用性才是最终目标。建议把验证步骤固定下来每次导出后快速检查避免把问题文件发给下游。7.1 打开看什么用免费 DWG/DXF 查看工具打开导出文件按以下维度检查检查项合格标准不合格表现图层图层名与源模型一致全部图元堆在 Layer0 或图层名丢失尺寸比例在 CAD 中测量关键尺寸符合预期尺寸差 10 倍、1000 倍线型无需展线型CAD 中按打印样式统一处理整张图全是复杂折线、线段碎裂视图内容与 SU 场景所见一致隐藏图层被导出、多余实体出现坐标范围图元集中在合理坐标范围图元飞到极大坐标区最容易出问题的是比例和图层。比例问题几乎都是单位不一致导致的。图层问题几乎都是源模型阶段没有分好图层导致的。这两类问题不要指望导出时自动修复应该在源模型阶段解决。7.2 成功判断标准一批导出文件是否符合交付要求可以用最朴素的标准判断在 CAD 查看器里按图层开关每层的内容分开按比例测量一堵已知墙的长度数据正确视图角度与 SU 场景一致。如果这三点都满足这套流程就是可用的。缺一个都需要先回头改模型或改场景再重新导出。7.3 导出文件名的二次检查脚本自动命名难免出现场景名与最终交付清单不一致的情况。建议导出后做一次目录清单检查不要直接在文件夹里肉眼扫一遍就完事。特别是在有中文文件名、特殊字符的目录下更容易漏掉某个文件。8. 常见问题与排查方法问题现象可能原因排查方式解决方案导出文件在 CAD 中打不开导出版本过高或文件损坏改用低版本 CAD 打开验证导出时选择较低版本的 DWG 格式模型尺寸差很多SU 单位和 CAD 单位不一致对比已知尺寸在模型信息中统一单位按需缩放导出后图层全是 Layer0源模型实体没有分配到具体图层检查 SU 模型图层分配情况在 SU 中重新归层再重新导出线型全部是连续线SU 导出不直接关联 CAD 线型在 CAD 查看器中检查线型配置到 CAD 中统一线型标准或导出前在 SU 中用颜色区分打开 DWG 后图元在极远处模型离原点太远查看模型包围盒位置在 SU 中将模型移动到原点附近脚本输出的部分文件缺失场景名/图层名含有特殊字符在 Ruby 控制台看报错信息改文件名避免特殊字符和中文路径中文路径导出失败不同版本对非 ASCII 路径支持不一致先导出到英文目录测试统一使用英文路径和英文文件名一个场景导出内容不完整场景未保存图层可见性切换场景后观察图层状态重新保存场景属性勾选可见性状态按图层导出后模型显示全被隐藏脚本中途报错恢复逻辑没执行检查 Ruby 控制台报错信息手动把所有图层设为可见再重跑脚本排查时有一个通用手段小样本测试。不要直接在几百个子模型上用脚本一次批量跑先在两个场景、三个图层的小副本上试确认脚本输出正常再放到全量项目中使用。9. 效率提升与最佳实践这套流程如果要用到日常工作中建议把下面这些规则变成习惯。9.1 模板优先把单位、图层命名、场景命名、导出目录、脚本文件都固定为一套模板。新建项目时直接基于模板起步而不是每次从零开始建图层、建场景。你的下一套项目从建模第一笔开始就已经为“导出 CAD”做好了准备。9.2 先同步后导出多人协作项目中先确认模型同步完成不要导出到一半发现同事传来了新版本而重复工作。导出前把模型文件保存并锁定版本保证脚本读到的就是你要导出的最终模型。9.3 归档结构建议把项目文件按以下结构管理项目文件夹/ ├─ 01_Source/ │ ├─ Project_v01.skp │ └─ Project_v02.skp ├─ 02_Export/ │ ├─ CAD_Plan/ │ └─ CAD_Layer/ └─ 03_Review/ └─ 导出检查记录.xlsx导出文件放在独立目录避免混在模型素材里。检查记录可以简单记录每一次导出时间、模型版本、文件数量、发现的问题方便追溯。9.4 善用保存场景属性如果脚本导出的内容和你在 SU 里看到的视图不一致大部分原因是场景没有保存图层可见性。养成习惯在场景面板里创建场景后明确保存“图层可见性”和“相机视角”。这能减少 90% 的场景导出问题。9.5 适合什么团队这套方法最适合需要定期把 SKP 模型转成 DWG 配合施工图、深化、报建和基础图纸整理的团队。如果只是偶尔导一次 CAD脚本化带来的收益有限但场景和图层规范依然值得做。9.6 不适合什么情况如果你的需求是“SU 模型导进 CAD 里要保留材质贴图、照明信息、实体属性、复杂线宽和打印样式”那 DWG/DXF 本身就不是最佳载体。CAD 图纸是用来表达几何和工程信息的不是用来承载 SU 渲染信息的。这类需求应该考虑别的交付方式而不是在导出环节硬扛。回到最开始的思路效率提升的关键是把“重复手动设置”变成“一次性场景配置 脚本批量执行”。并不是导出动作本身有十倍差距而是你不再需要反复做低价值的重复操作。源模型整理得越规范批量导出脚本能发挥的作用就越大。第一步可以先试的场景是把现有模型里两三个常用视图做成场景用按场景批量导出的脚本跑一遍对比一次手动导出的耗时。确认可行后再逐步把图层规范、脚本归档、团队命名规则补起来。后面做熟之后这套流程可以继续扩展成“一键导出多个 SKP 文件”或“导出后自动整理目录”的完整工具链。