CAD地形导入SketchUp全流程:等高线预处理与沙盒工具生成三维地形

发布时间:2026/9/19 0:25:22
CAD地形导入SketchUp全流程:等高线预处理与沙盒工具生成三维地形 简介针对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或者用快捷键 Ctrl1 打开特性面板。这里要看两类高度信息一类是对象的“标高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 导入后做一次几何体检不要直接点沙盒工具线导入完成后先按 ShiftZ 全屏缩放。如果模型变成画面正中央的一个小点说明单位比例或坐标归零出了问题。这时不要用缩放工具补救返回 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 值作为平移目标。平移后地形底部落到 Z0方便后续贴材料和布置配景。注意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 原图再开始种树。本文还有配套的精品资源点击获取