CAD地形图导入SketchUp生成三维地形:从等高线到沙盒工具全流程指南 简介面向景观设计、城市规划、环境科学及游戏设计领域的设计师与技术爱好者围绕CAD与SketchUp的协作流程系统讲解将CAD等高线数据导入SU并通过沙盒工具自动生成三维地形模型的完整方法。文档定位为操作型技术指南适合需要快速上手SU地形建模的初、中级使用者。资源包共包含1个PDF文件压缩包大小1.09MB内容精炼、步骤清晰便于对照实践。目前已有148人学习浏览。通过文中对等高线隔离、单位设置、沙盒工具调用及“利用等高线创建地形”等关键环节的提炼读者能快速掌握从二维地形图到三维模型的操作要点减少软件摸索时间。PDF格式便于打印与离线查看也可作为日常建模时的随身参考。1. 从 CAD 地形图到 SU 三维地形这从来不是文件转换而是一次几何重建CAD 地形图导入 SU 生成三维地形第一次做的人大多以为“导入、点一下沙盒工具、完成”。真正动手后才会发现卡住你的往往不是沙盒按钮而是 CAD 里的地形线根本没变成 SU 能读懂的数据。等高线是否闭合、高程写在 Z 坐标还是块属性里、单位是米还是毫米、图层里混了多少文字标注这些都决定沙盒工具最后生成的是地形还是垃圾曲面。所谓“沙盒工具.pdf”这类资料只是把操作流程和坑位整理成文档文档之外你更需要一套能自行判断数据是否可用的方法。下面按“数据准备、导入校正、沙盒生成、修整验证”的顺序展开新手可以从头照做有经验的人可以直接跳到第 3 章以后看参数和排错。2. 数据准备为什么 CAD 地形图不能直接导入 SU不少人的第一反应是在 CAD 里框选复制切到 SU 直接粘贴然后点沙盒工具。运气好时能生成雏形运气差时只有乱线和零碎面。区别不在电脑配置而在 CAD 文件里到底存了什么类型的地形数据。2.1 三种常见数据形态等高线、高程点和块引用CAD 地形图的高程信息并不只有一种存在方式。最常见的是等高线通常由多段线或样条曲线组成Z 坐标写进几何属性第二种是离散高程点以块或文字形式分布块的插入点带有 Z 值但普通方式选不中第三种是整张图被做成一个大块里面包含成百上千条线不炸开就选不到具体线段沙盒工具也不知道拿什么生成曲面。我的建议是拿到 DWG 后先在 CAD 里看图层树和对象类型。如果地形线被包在块里先用 X 命令炸开再检查有没有混入文字、标注、填充图案。非地形线要清理干净它们不仅会让沙盒工具误判边界还会把面数推到不必要的量级SU 一旦开始卡顿问题常常就在这里。2.2 图层清理给沙盒工具一个干净的输入沙盒工具不挑图层但挑选中范围。它拾取的是你当前选中的所有边线文字和尺寸线也会参与生形产生的面完全不能看。我习惯在 CAD 里先把地形要素归到固定图层下表是一个常用规范适用于大多数场地规划和竖向分析任务。图层名内容进入 SU 前的处理T-DIMS标高、尺寸标注删除或冻结T-TEXT高程点文字按需要转成 Z 值后删除T-CONT等高线闭合多段线保留修复断点与重复线T-BNDR场地边界、道路边界单独导出不参与生形T-BLK外部参照块全部炸开并清除冗余块按这个规范清理后CAD 里的 shx 字体缺失、文字显示成问号方块不会影响后续操作因为地形线不是文字。CAD 快速看图软件可以预览图纸但只读属性无法帮你完成图层拆分和 Z 值写入这一步仍然要在完整版 CAD 或支持脚本的 CAD 里做。2.3 DWG 和 DXF 怎么选以及为什么我更推荐 DXFSU 对 DWG 和 DXF 都能导入但在地形数据这个场景下我更推荐 DXF。DXF 是公开的 ASCII 格式几何信息可读可查出了问题能用脚本直接检查DXF 中实体的 Z 坐标与图层名不会因 SU 的导入预处理器而丢失需要处理多个 CAD 文件时DXF 也更容易走批处理命令。DWG 不是不能用但如果项目里多张图纸需要合并管理统一用 DWG 时至少要保证所有文件预设的单位一致否则导出的 DXF 会在坐标上互相打架。2.4 命令行批量把 DWG 转 DXF少开十次 CAD 的偷懒办法分幅地形图动辄几十张逐张另存为 DXF 太浪费生命。常见做法是使用 ODA File Converter它支持命令行调用可把整个目录的 DWG 一键转成 DXF。下面是我常用的命令行形式以 Windows 为例。cd /d C:\Program Files\ODA\ODAFileConverter ODAFileConverter.exe D:\drawings\input D:\drawings\output ACAD2018 DXF 0 1 *.dwg;*.dxf这段命令的逻辑是把D:\drawings\input目录下的 DWG 文件按 AutoCAD 2018 格式的 DXF 输出到D:\drawings\output不递归子目录转换前执行修复审计。几个参数分别说明ACAD2018是目标版本号可改成ACAD2021或更低版本原则上 SU 支持的 DXF 版本越高越好DXF指定输出格式第一个数字0表示不遍历子目录改成1就会递归处理第二个数字1表示输出前执行文件修复建议保留它能自动清除一部分短小线段。如果你熟悉 Python命令行之外还可以直接读取 DXF 做数据体检。下面的脚本用 ezdxf 库扫描等高线的 Z 值范围能快速判断导入后有没有“所有线都在一个平面”的隐患。import ezdxf doc ezdxf.readfile(terrain.dxf) msp doc.modelspace() zs [] for e in msp: # 只处理多段线实体样条线可按实际情况补充 if e.dxftype() in (LWPOLYLINE, POLYLINE): for v in e.vertices_in_wcs(): zs.append(round(v[2], 3)) if zs: print(Z 值范围:, min(zs), ~, max(zs)) print(异常点数量:, sum(1 for z in zs if abs(z - min(zs)) 0.001)) else: print(没有读到任何多段线顶点)这段代码的工作方式是从模型空间遍历所有多段线把每个顶点的 Z 坐标单独收集起来最后打印高度范围和贴近最低值的顶点数量。参数上你可以修改round(..., 3)来控制小数点保留位数也可以把LWPOLYLINE, POLYLINE换成SPLINE来检查样条线。一旦发现所有 Z 值都相同说明 CAD 里的高程并没有写进几何属性需要回到 CAD 里补齐。如果你经常做 Python 批量修改 CAD 的自动化工作这个思路也能迁移到地形预检查里把你的矢量地形数据在进入 SU 之前先清洗一遍。提示CAD 里等高线的高程如果写在扩展属性或块属性里导入 SU 前必须先把高程写入实体 Z 坐标否则沙盒工具拿不到高度。2.5 顺带说明ArcGIS 转 CAD 后地类为什么消失ArcGIS 导出的 CAD 经常出现“地类没了”的情况是因为面要素的字段被写入图层属性SU 不读这类属性所以地物编码信息在 SU 里看不到。但这不影响地形建模等高线的几何 Z 值已经包含你所需的高程信息。如果你从 GIS 端拿到的是点文件可以先用 GIS 插值成 TIN再导出带高程的等高线 DXF走这条链路往往比直接在 CAD 里徒手描线可靠得多。3. 导入 SU 并还原坐标与比例三个设置决定后面顺不顺如果你见过 3dmax 模型导入 SU 后东倒西歪、比例错乱的现场就不难理解 CAD 导入 SU 也要过单位、坐标、轴向三关。地形图导入失败多半不是沙盒工具的锅而是导入设置没配对。3.1 单位与导入选项毫米和米千万别混进入 SU 后先在“窗口—模型信息—单位”里把格式设为十进制、米、精度 0.01m。这里有个繁琐但重要的细节CAD 文件可能是毫米制也可能是米制即使同一张图不同版本 CAD 也常混用。SU 导入对话框里会有一个“选项”按钮点击后可以选择单位。如果你手头的地形图单位是米就选米如果是毫米就先合理缩放。下表是我常用的匹配关系。CAD 图纸单位SU 导入选项缩放系数常见结果米米1.01 米 1 米正确毫米毫米1.01000 毫米 1 米内部换算正确毫米但按米绘制米1000.0图形被放大 1000 倍需要再用卷尺校正表格里的“毫米但按米绘制”是最常踩的坑地形线量出来是 500实际应该是 500m而你按 500mm 处理结果模型小到看不见。遇到这种情况我一般先不着急改缩放导入后用一段已知长度的 CAD 线做参考直接在 SU 里全局缩放见下一节。3.2 用一条已知边校准全局缩放导入后如果整体比例出问题最直接的方法是用“卷尺工具”配合参考线。先在 CAD 里记一条地形边界线的长度比如场地方向 AB 两点之间是 120m。在 SU 中画一条同样长度的临时参考线然后选中整个导入的图形使用卷尺工具从 A 点量到 B 点直接输入 120 并回车SU 会问是否调整模型尺寸选择“是”整个模型就会按你输入的长度重新缩放。这个做法的逻辑是卷尺工具在校准模式下相当于“图元缩放标尺”你输入的目标长度会被当作真实尺寸SU 按比例把整个组或模型整体缩放到目标值。三个地方容易漏一是卷尺工具要在测量状态而不是创建参考线状态二是输入长度时要带上单位比如 120m 而不是 120三是缩放前要把所有地形线放在同一个组或组件里避免只缩一半。3.3 把“看起来在地面上”的等高线改成“真的有 Z 值”沙盒工具的“根据等高线创建”按钮要求等高线具备真实 Z 坐标不是图层显示上看起来有高差。如果你导入后所有线条都落在 Z0 平面就需要回到 CAD 处理。常见的补齐方式有两种一种是在 CAD 里用“标高”命令把每条等高线的 Z 改到对应高程另一种是使用“移动”命令选中单条等高线后输入 Z 方向的目标高度。处理后的 DXF 重新导入 SU沙盒工具才能读出高度差。这里顺带回应一个高频问题为什么 CAD 图纸导入后线条全部堆到一个点上了这通常不是数据损坏而是 CAD 里的图形距坐标系原点非常远SU 导入时把原点归零远处图形就“飞”到了天边。解决方法是导入前在 CAD 里执行“移动到原点”或使用“图形界限”把图纸挪到原点附近再另存为 DXF。同理SU 导入面板里的“保持原始坐标”和“自动定位到原点”两个选项要按需求切换地形模型后续要导回 GIS 或 Cesium 时保留原坐标更有利。3.4 导入后的 30 秒快速体检导入完成后不要急着点沙盒工具先做四个检查。第一框选所有实体看右下角实体数量是否和 CAD 里的数量大致相当数量相差太多说明有块没炸开。第二旋转视图看侧面看是否有线条明显高过其他线没有就说明 Z 值丢失。第三用卷尺量一条已知长度的边确认比例正确。第四检查图层面板看 Layer0 之外是否有不该出现的杂层这一步决定后续要不要来回清图。我一般建议把上面四步写成一个导入检查清单贴在显示器旁边。它不占用多长时间但能帮你把“沙盒工具生成失败”这个模糊问题拆解成“数据没处理好”和“设置没配对”两类具体原因。下一章进入沙盒工具本体参数设置和操作顺序开始变得重要。4. 沙盒工具生成地形的完整流程从等高线到可编辑曲面到这里才轮到标题里的沙盒工具。SU 的沙盒工具条在“视图—工具栏—沙盒”里调出核心是“根据等高线创建”和“根据网格创建”两个按钮。下面按拿到干净等高线和只有高程点两类情况分别讲。4.1 两条主路径等高线创建和网格创建“根据等高线创建”适合数据里有完整的闭合或半闭合等高线SU 会把这些线作为平滑曲面的骨架“根据网格创建”适合手里只有散落高程点、或者希望完全自定义地形精度的场景你需要先画一个矩形网格再把每个网格点抬到目标高度。两者不是互斥的很多实际项目里我都会先用网格创建一个大曲面再把等高线叠加进去做局部校准最后统一删除多余杂线。网络上偶尔能搜到“su模型下载免费”之类的地形种子模型拿来当参考没问题但种子模型的高程点和你的真实场地对不上仍然需要回到上一步把 Z 值替换掉否则会得到一座假山而不是场地地形。4.2 根据等高线创建地形操作顺序与网格间距以等高线创建地形的步骤基本是固定的选中所有等高线点击沙盒工具中的“根据等高线创建”此时 SU 会询问网格间距输入合理的间距值后回车SU 按等高线的高低起伏生成三角网面。生成结果是一个组你可以双击进入编辑继续用推拉工具、柔化边线等方式修整。网格间距的选择直接决定模型面数和视觉精度。间距太小面数爆炸SU 操作卡顿间距太大地形细节丢失山谷和山脊的转折处被抹平。下表是我在低配笔记本上也跑得动的经验值。场景场地尺度推荐网格间距说明方案概念模型300m × 300m3m ~ 5m优先保证操作流畅场地竖向分析1km × 1km5m ~ 10m兼顾细节与性能大型规划汇报5km × 5km10m ~ 20m面数控制在 50 万以内需要导出到 GIS按 GIS 栅格分辨率2m ~ 5m与 DEM 对齐更稳妥注意这里的网格间距是 SU 在等高线周围生成网格时的步长不是等高线本身的间距。输入 5m 意味着 SU 在平面方向上每隔 5m 插值一个顶点地形起伏越大的位置这个值越要调小如果场地本身是缓坡10m 和 5m 的视觉差异并不大优先选大的可以省下大量编辑时间。4.3 根据网格创建地形与少量 Ruby 批量抬升使用“根据网格创建”时操作顺序是先画矩形网格平面点击该按钮生成可编辑的网格组然后进入组内逐点抬升。逐点用推拉工具抬升太慢适合的方式有几种如果你的高程数据在电子表格里可以生成一个脚本按坐标批量设置每个网格点的高程如果只做局部调整用 Ruby 控制台快速抬升选中的点即可。下面是一段可以在 SU 的 Ruby 控制台直接运行的脚本作用是把选中组内所有边线的顶点统一抬升 100mm。它的价值在于当你需要给一块场地做整体抬高时不用手动框选几百个点。model Sketchup.active_model model.selection.each do |entity| next unless entity.is_a?(Sketchup::Group) entity.entities.grep(Sketchup::Edge).each do |edge| edge.vertices.each do |v| pos v.position v.position Geom::Point3d.new(pos.x, pos.y, pos.z 100.mm) end end end这段代码的逻辑是遍历当前选中的实体筛选出组再遍历组内的所有边线对每条边线的顶点做一次三维坐标更新。参数上100.mm是抬升高度SU 的 Ruby API 会自动把毫米换算成模型单位如果你要基于真实高程数据改动可以把100.mm替换成从 CSV 文件读入的高度数组但那样需要先按坐标匹配网格点代码量会大不少。先跑通这个最小脚本再往里面加数据匹配逻辑是更稳妥的路线。4.4 沙盒生成后的常见失败与排错沙盒工具本身并不复杂失败通常发生在输入数据或者操作的某个前置步骤。下表是我遇到过的几类典型问题和处理顺序。现象常见原因处理办法生成的地形呈锯齿状等高线断口多、未闭合在 CAD 里加捕捉修复断点或用炸开方式重新闭合完全没有高度变化等高线 Z 值全为 0回到 CAD 写 Z 值或检查导入时是否关闭了保持坐标SU 长时间无响应等高线太密、节点过多用简化曲线命令减点或放大网格间距生成后杂线缠身文字和尺寸线混入选区按第 2 章图层规范重新清理再导入排错顺序建议从数据端往回查不要每次都纠结 SU 设置。尤其是“完全没有高度变化”这个问题九成以上是 CAD 里的高程根本没有写进 Z 坐标而不是沙盒工具坏了。5. 进阶让地形模型可编辑、可导出、可对接 GIS地形面生成只是第一步实际项目里下一步往往是加材质、修边线、对接 GIS 或者交给可视化平台。这几个动作如果不提前规划返工量会非常大。5.1 生成后立刻打组、重设材质和图层沙盒工具生成的地形本身是一个组但我建议立刻做三件事。第一给这个组命名比如“Terrain_Main”方便后续有成百上千个组时定位。第二新建一个“地形”图层把组放到该图层上这样关闭图层可以临时隐藏所有地形面方便编辑 CAD 底图。第三给地形面先拍一个基础材质比如浅灰绿色后续做彩平或分析图时再覆盖真实材质避免黑色网格面影响视觉判断。5.2 用 Ruby 控制台批量处理地形网格地形面创建后经常出现“面朝向不一致”的问题某些面显示成蓝色背面贴材质后颜色不统一。手动翻转面在大模型上非常低效用一段短脚本可以批量处理选中范围内的所有面。model Sketchup.active_model faces model.selection.grep(Sketchup::Face) faces.each do |face| face.reverse! if face.normal.z -0.9 end这段代码的作用是遍历当前选中的所有面如果法线方向接近垂直向下就执行翻转。逻辑上地形面在默认视角下应该朝上法线向量 Z 分量应接近 1所以当 Z 小于 -0.9 时翻转是安全阈值。如果你有山坡、岩壁等非水平面这个脚本会把侧面的背面也翻转掉所以使用前最好先框选要处理的平面区域而不是全选整个模型。我把脚本保存成 txt 文件需要时整段复制进 Ruby 控制台一分钟内解决几百个面的朝向问题。5.3 导出 DAE/OBJ 给 Cesium 等平台时的三个参数经常有人问“cesium 模型可以直接加载 su 吗”答案是不能。SU 的 SKP 是专有格式Cesium 需要 glTF、3D Tiles 或经过转换的 DAE。从 SU 导出时以下三个参数最值得盯住。参数推荐值原因单位米Cesium 默认按米解释图形单位米制可直接使用三角化保留原始三角网地形面本身已经是三角网格额外三角化会增加面数纹理尽量展平到单张纹理多材质纹理在导出时容易丢失或错位导出前先在 SU 里把模型摆到正确的位置原点设置直接影响 Cesium 中的经纬度对齐。如果你确定地形模型后续要进 Cesium建议从一开始就在 SU 里保留 CAD 导入时的原始坐标导出时关闭“重新定位到原点”。5.4 批量导出多个地块的脚本思路大型项目常有几十个分块地形。逐个选中再导出太慢我一般先用一段 Ruby 脚本把所有未命名的组自动命名方便在导出面板里逐块确认。model Sketchup.active_model model.entities.grep(Sketchup::Group).each_with_index do |g, i| g.name terrain_#{i} if g.name.empty? end这段脚本的逻辑是遍历模型中的全部组如果组名为空则按terrain_0、terrain_1的规则自动命名。参数上terrain_前缀可以改成你的项目名避免多个模型文件同名冲突。命名工作通常在生成地形后立刻执行比最后堆了几十个空白组再回头理清楚要省事得多。6. 三个验证地形的习惯在交付前替自己把关很多地形模型不是建不出来而是建出来没人检查等到汇报或导出阶段才发现高程偏差、局部穿模、面数爆炸。养成下面三个检查习惯可以把返工成本压到最低。6.1 用已知高程点反推检查地形从 CAD 原图里找到至少三个带明确标高值的点比如道路交叉口、场地角点、特征高点。在 SU 里分别找到对应位置用卷尺工具从 Z0 平面量到地形面上记录误差。误差范围判断建议±0.1m 以内优秀可直接交付±0.5m 以内可接受关注局部陡坎是否失真超过 1m需要检查多半是等高线 Z 值错乱或网格间距过大这个检查的目的不是追求毫米级精度而是防止“整体抬升了 2 米”这类系统性错误。如果三个点误差方向一致优先检查 CAD 里的等高线标高是否整体平移过。6.2 用剖面检查地形穿模在 SU 里画一个竖直矩形面与地形相交然后旋转视图看交线。交线连续说明该区域面完整交线断断续续说明地形有空洞生成时某些等高线没有参与运算。修复方式分两种小面积空洞可以直接进入地形组用线条把缺口封住再生成面大面积空洞需要回到 CAD 检查等高线是否有长断口。剖面检查比三维视角漫游更可靠因为它能把局部凹坑和悬空面直接暴露出来。6.3 减面量的经验值地形模型的最终面数决定导出速度和后期性能。我的经验是先按推荐间距生成一次再把网格间距放大 5 倍生成第二次两次结果放在同一视角下对比。如果视觉差异不大选大间距版本如果山脊转折处明显变钝再把间距调回两者之间。这个“由小到大逐步回调”的方式可以帮你找到既保留细节又不浪费面数的临界值。我会把最终选定的间距记在项目文件夹的 README 里下次同类地形直接套用不需要每次重新试错。本文还有配套的精品资源点击获取