CAD地形导入SketchUp全流程:等高线预处理与沙盒工具生成三维地形
2026/9/19 0:25:21 网站建设 项目流程

简介:针对CAD地形图导入SketchUp并生成三维地形的实操需求,这份PDF面向景观设计、城市规划、建筑设计与三维建模初学者,系统梳理了从等高线提取、单位设置、模型导入到沙盒工具‘利用等高线创建地形’的完整流程。资源仅1个PDF文件,大小约1.09MB,内容精炼、步骤明确,不依赖多余插件,便于随时查阅对照。目前已有148人学习,适合想掌握地形建模关键步骤、避开常见单位与坐标误区的读者。除基本操作外,文中还说明了单位统一对三维地形尺寸准确性的影响,并结合CAD与SU各自优势解释了从二维等高线到逼真地形模型的转换思路,可延伸用于景观分析、规划展示、环境模拟与游戏场景搭建等场景。对于需要将规划图纸快速转化为直观三维场景的景观、规划或建筑设计师,这套流程能明显缩短建模周期,提升方案沟通与决策效率。

1. CAD 地形进 SU,真正的难点从来不在沙盒工具

拿到一张 CAD 总图,里面几十条闭合等高线,标高从 3 到 30 都标得明明白白,俯视图里看就是一张普通平面图。可一旦导入 SU,用沙盒工具“从等高线创建”生成,地形要么是平的,要么破洞,要么网格密到拖不动。做这类“CAD 地形导入 SU 生成三维地形”的需求,我反复遇到的情况是:决定成败的往往不是沙盒工具按钮在哪,而是 CAD 文件本身。等高线的 Z 值是否真实、图层是否干净、单位比例是否统一,任何一项没理顺,“三维”两个字都是空的。下面按 CAD 数据整理、导入设置、沙盒工具生成、数据验校的顺序展开,命令可以直接抄。这套流程也适合从 3dmax 导入 su 模型错乱时排查坐标问题的思路,本质都在坐标系和单位上。

2. 等高线数据预处理:把 CAD 地形整成沙盒工具能吃的线

CAD 文件通常不是为 SU 准备的。总图里同时存在建筑、绿化和道路,填充图案、标注文字、参照底图叠在一起。第一步不是点导入,而是把地形要素单独剥离出来。

2.1 先确认高度信息存放在哪里

用 AutoCAD 或中望 CAD 打开地形图,选中一根等高线,输入LIST,或者用快捷键 Ctrl+1 打开特性面板。这里要看两类高度信息:一类是对象的“标高(Elevation)”,整根线统一高度;另一类是顶点 Z 坐标,多段线每个顶点都有独立高度。两种 SU 导入后都能读取,但后续处理逻辑不同。

CAD 里承载等高线的对象主要有四种,对应的处理方式不一样:

对象类型高度信息位置建议处理
LWPOLYLINE(二维多段线)对象标高属性最常见,整根线同一标高,适合规则梯田式地形
POLYLINE(三维多段线)每个顶点的 Z 坐标最能表达坡地,优先保留
SPLINE(样条曲线)控制点 Z 坐标生成立体地形没问题,但网格边缘可能碎,导入前可先转成多段线
块引用里面的等高线块内实体SU 对块展开不彻底,先在 CAD 里_EXPLODE炸开

操作上可以这样做:选中全部等高线后输入_LAYISO,只隔离地形图层;再选择一条线看特性。如果特性里“标高”和顶点 Z 全部是 0,说明这张图被人为压平过,Z 值已经丢失。别急着导入 SU,先回 CAD 找原始地形文件,或者改用离散高程点重建。

提示:此时不要使用FLATTEN命令,它会强制把所有 Z 值归零,等于亲手删掉高程数据。

2.2 清理多余图元,只留下能参与构网的对象

哪怕只是做一个小场地模型,也不建议把整张 CAD 图纸拖进 SU。常见做法是在 CAD 里先建一个新文件,把地形相关图层复制过去。步骤为:关闭建筑、道路中线、填充和标注图层;框选剩余图元;输入_OVERKILL删除重合线;再输入_AUDIT修复图形错误;最后用WBLOCK导出成独立文件。

_WBLOCK的导出参数按这种方式设置:基点在命令提示行输入0,0,0,对象选择“仅等高线和高程点”,目标文件格式选择“低版本 DXF 或 DWG”。很多 CAD 制图初学入门的人会忽略这一点,结果 SU 里出现了几万条屋顶、窗线和填充线,沙盒工具生成时自然会卡到无响应。

坐标归零也放在这一步做。CAD 地形图如果来自测绘院,X、Y 往往是带号坐标,数值达到几十万甚至几百万,SU 离原点太远时显示和捕捉都会异常。用_MOVE选择全部,以原点0,0,0为基点,移动到0,0,0,这就把图形整体平移到了原点附近。注意等高点文字会跟着一起移动,不需要单独处理。

2.3 用脚本批量验 Z 值分布

图纸里等高线多的时候,肉眼不可能逐条看 Z。我会用 Python 加ezdxf库直接读 DXF,一次性统计所有曲线的高度范围。

import ezdxf doc = ezdxf.readfile("terrain.dxf") msp = doc.modelspace() z_values = set() for e in msp: if e.dxftype() == "LWPOLYLINE": # 二维多段线的标高存在 elevation.z z_values.add(round(e.dxf.elevation.z, 3)) elif e.dxftype() == "POLYLINE": # 三维多段线需要遍历顶点 for v in e.vertices: z_values.add(round(v.dxf.location.z, 3)) elif e.dxftype() == "SPLINE": for pt in e.control_points: z_values.add(round(pt[2], 3)) print("实体总量:", len(list(msp))) print("高度分层数:", len(z_values)) print("Z 最小值:", min(z_values), "Z 最大值:", max(z_values))

脚本逻辑是遍历模型空间里的所有实体,根据 DXF 类型分别读取高度值。round(..., 3)是为了去掉浮点误差,避免同一个高度被统计成两三个值。运行前需要先pip install ezdxf。如果输出的“高度分层数”只有 1 且 Z 为 0,代表文件里没有高度数据;如果分层数很多但数值跨度不到 0.1,则大概率是单位问题,CAD 里以毫米为单位画了等高线,但每层高差写的是米。

提示:脚本读到的 Z 值范围如果和图纸上的标高点文字不一致,优先检查 CAD 单位的设置,而不是改 SU 的比例。

3. 导入 SketchUp 的单位、坐标与几何体检查

CAD 数据整理干净之后,导入 SU 这一步仍然有坑。很多人认为把文件拖进去就能用,实际上导入对话框里三个选项决定地形后续能否正确生成。

3.1 导入对话框里最容易选错的三个选项

在 SU 中执行“文件 → 导入”,文件类型选择“AutoCAD 文件 (*.dwg, *.dxf)”。选择文件后弹出的选项面板里,单位设置是最容易被忽略的。图纸以毫米为单位绘制,导入选项就必须选“毫米”,否则模型放大 25.4 倍或缩小 1000 倍,沙盒工具生成的面片尺寸全乱。

导入选项面板实际含义建议取值
单位把 CAD 图纸长度换算成 SU 模型单位与 CAD 标注单位完全一致
合并共面把同一平面上的相邻面拼成一个面勾选,减少地形碎面
平面方向统一所有面法线朝向,避免黑面勾选,后面不用手动翻面

如果源文件是 CAD 尺寸标注以毫米计的高版本 DWG,建议先另存为低版本的 DXF 再导入。高版本文件中的代理对象和自定义对象会被 SU 忽略,但可能触发漫长的导入等待。另存为 AutoCAD 2018 或更早的 DXF 是兼容性最好的做法。多张图纸合并到一个文件时也注意,每张图纸可能使用不同原点和坐标系,合并之前先把它们移动到一个公共坐标区内,否则导入后地形会散落到模型空间各处。

3.2 导入后做一次几何体检,不要直接点沙盒工具

线导入完成后,先按 Shift+Z 全屏缩放。如果模型变成画面正中央的一个小点,说明单位比例或坐标归零出了问题。这时不要用缩放工具补救,返回 CAD 重新检查才是正路。

我会在 SU 的 Ruby 控制台里跑一段脚本,看导入几何的实际边界范围。

model = Sketchup.active_model ents = model.active_entities bbox = Geom::Bounds3d.new ents.each { |e| bbox.add(e.bounds) } puts "实体数量: #{ents.size}" puts "模型范围 X: #{bbox.width}" puts "模型范围 Y: #{bbox.height}" puts "模型范围 Z: #{bbox.depth}"

这段脚本把当前模型所有实体的包围盒累加到一个总范围里,输出长宽高。用已知的 CAD 图纸总尺寸和输出值比对,比如 CAD 里场地宽 120000(毫米),脚本输出 X 是 120000,说明单位没有错;如果输出是 120,说明导入时把毫米误选成了米。model.active_entities返回的是当前编辑上下文里的全部实体,运行前注意先退出所有组编辑状态。

离原点过远的问题也要在这里处理。SKetchUp 在离原点超过 10 公里时会出现视图裁剪和捕捉异常,Ruby 里可以这样整体归位:

model = Sketchup.active_model ents = model.active_entities all_bbox = Geom::Bounds3d.new ents.each { |e| all_bbox.add(e.bounds) } offset = Geom::Point3d.new(all_bbox.center.x, all_bbox.center.y, all_bbox.min.z) vec = Geom::Vector3d.new(-offset.x, -offset.y, -offset.z) transform = Geom::Transformation.translation(vec) ents.each { |e| e.transform!(transform) } puts "已平移到原点,底部 Z = #{all_bbox.min.z}"

脚本取模型边界盒的 X、Y 中心点,以及最低点的 Z 值作为平移目标。平移后地形底部落到 Z=0,方便后续贴材料和布置配景。注意ge.transform!会改动实体本身而不是复制,运行前建议先保存一个副本。

3.3 文字、字体和参照块造成的干扰

CAD 图纸里高程点旁边会有文字标注,很多标注使用自定义 SHX 字体。SU 导入 DWG 时对文字支持有限,显示成乱码或完全消失都正常,这不影响沙盒工具生成地形。真正会干扰的是高程点本身通常是块参照,块内部是属性文字加一个小圆点。SU 导入块参照时经常只显示圆点而丢掉属性文字,导致后期核对标高时没有依据。

如果确实需要在 SU 里看到标高数值,在 CAD 导出前把高程点块炸开,再把文字用_EXPLODE多炸一次转成几何线。但请记住:炸开后整个文件体积会翻几倍,而且会拖慢沙盒工具生成速度。我的习惯是只保留圆点和等高线用于建模,标高文字留在 CAD 里做验校。

4. 沙盒工具生成三维地形的按钮、参数与网格修正

等高线导入正确,沙盒工具才能真正发挥作用。这里讲的不是“点一下按钮就行”,而是按钮背后参数的含义,以及生成后网格怎么修正。

4.1 启用沙盒工具栏并执行“从等高线创建”

新版本 SU 默认不会显示沙盒工具栏。在“视图 → 工具栏”里勾选“沙盒”,如果列表里找不到,去“扩展程序管理器”里启用 Sandbox Tools 扩展。工具栏启用后,第一件事不是点按钮,而是把所有等高线选中,确认它们已经在同一个图层,并且没有被编组。

“根据等高线创建”按钮的图标是一个闭合曲线,点击后 SU 会按照 Delaunay 三角剖分算法,在等高线之间生成三角网格。这个算法没有直接暴露“网格间距”参数,网格密度由等高线数量和相邻等高线的间距决定。等高线密集的地区自然生成更多三角形,等高线稀疏处则相反。可以先使用“网格创建”工具,之后再对局部加密。

以下表格是沙盒工具里几个与地形制作直接相关的按钮:

工具按钮作用关键参数
根据等高线创建从等高线生成地形网格无手动参数,密度由等高线决定
曲面起伏拖拽网格局部形成凹凸半径值决定影响范围
曲面平整将一个面投影到地形上压平投影方向与地形组朝向
细分对选中三角面继续细分每点击一次细分一级
翻转边线交换三角形对角的边用于调整局部网格走向

点击“根据等高线创建”后,SU 会生成一个独立的网格组。如果没有任何反应,常见原因是等高线没有全部选中,或者存在大量断头短线。回到 CAD 检查等高线闭合性,必要时用_PEDIT的“合并”把断线接上,但注意只有同一标高的线才能合并。

4.2 网格朝向、柔化与密度的修正

生成后第一个要处理的是面朝向。朝阳面正常,阴面变成黑色,就是法线反了。选中地形网格,右键选择“反转平面”只能手动逐面修,效率太低。我一般在 Ruby 控制台跑一段脚本自动翻正:

model = Sketchup.active_model grid_group = model.selection.first grid_group.entities.each do |e| next unless e.is_a?(Sketchup::Face) # 地形网格的法线应该指向天空方向 e.reverse! if e.normal.z < 0 end puts "面朝向修正完成"

这段脚本假设你已经选中了地形组。逻辑是遍历组内所有面,检查每个面的法线向量在 Z 轴上的分量。地形模型的面法线正常情况下应该向上,也就是 Z 分量为正,如果为负就把面反转。运行前记得双击进入网格组,确保脚本作用对象是这个组而不是模型外层实体。

网格密度方面,等高线导入后如果三角形数量过万,SU 的视图旋转和剖切都会明显卡顿。简化方法是回到 CAD,每隔一条等高线删除,或者把细碎的小闭合等高线删除,只保留主要地形骨架。如果必须保留细节,用“细分”工具局部加密需要精细表达的区域,而不是整体加密。

柔化处理放在最后。全选整个地形网格,右键“柔化和平滑边线”,把角度阈值设在 20 度到 25 度之间。这个值表示相邻面的法线夹角小于设定角度时,边线被隐藏并产生平滑过渡。角度设得越大,模型看起来越光滑,但地形原有棱线也会被抹掉。地坪、陡坎这类需要清晰边界的位置,后期单独用“翻转边线”和边线工具补回来。

提示:沙盒工具生成地形后,如果模型里出现大面积黑面,先检查是否“平面方向”没有勾选,而不是急着重跑。

4.3 用曲面起伏做局部修形

等高线只能表达制图时刻的地形状态,实际项目中经常要在局部增加一个土坡或降低一块绿地。这时不回去改 CAD,直接双击进入地形组,选择沙盒工具栏里的“曲面起伏”工具。

点击第一个点确定起伏中心,屏幕上会出现一个圆,这个圆的半径就是影响范围。在数值输入框里输入半径值并回车,然后把鼠标上下移动,地形会以圆心为中心整体隆起或凹陷。影响范围边缘是逐渐衰减的,不会出现生硬的断崖。半径设得越大,过渡越平缓;半径贴近等高线间距,则会推出明显坡坎。

用曲面起伏修改地形后,如果想恢复局部细节,可以拖出一个小半径圆,反复在周围点击。工具每次点击都会改变网格,操作过多会产生碎三角。遇到这种情况,选中周围面使用“细分”工具重新三角化,或者直接删除区域内网格,再用等高线重新生成一次局部模型。

5. 投影贴图与地形点检:验证三维地形误差的最后一步

地形网格完成,进入最容易被忽略的环节:贴材料和验标高。这两步直接决定模型能不能用于方案汇报和后续深化。

先做投影贴图。将 CAD 原始总图导出为 PNG 或 PDF,注意不要用截图工具,而是打印成高分辨率图片。图片分辨率至少 300dpi,否则地形拉远了会模糊。回到 SU,打开材质编辑器,新建材质,使用该图片作为纹理图像,然后在“纹理”面板里勾选“投影”选项。勾选后贴图不再是逐面平铺,而是像幻灯机一样把整张图投射到地形上。操作方法是:选中地形网格,右键选择“贴图”→“投影”,再执行右键“贴图”→“位置”,调整贴图大小和对齐点。投影贴图的优势在于,多张网格面可以共享同一张图纸显示,不会出现相邻面纹理错位。

接下来是误差验证。CAD 地形图里通常有离散高程点,这些是实测数据。在 SU 中导入高程点所在图层,或者手动创建一组小立方体放在每个高程点坐标上,Z 值直接取实测标高。把立方体插入地形后,用卷尺工具从每个高程点垂直量到地形表面,读取距离。如果高差控制在 0.3 米以内,地形精度足够用于景观方案;如果偏差超过 0.5 米,说明等高线数据本身丢失了精度,或者导入时单位比例有误。

最后一个技巧是柔化边线角度的分场景控制。建筑场地模型用 15 度,山体模型用 20 到 25 度,市政道路模型保持 5 度以下,保留硬质路面边沿。每次调整后旋转视角从模型下方仰视一遍,检查有没有穿过地形底部的配景构件。

完成地形后,建议把高程点验证和投影贴图两件事固定成习惯。下次拿到新地形图,先抽三个高程点对完 CAD 原图再开始种树。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询