CAD 曲线切割 3D 曲面:坡面 / 开挖模型的开挖 - 填埋精准计算解决方案

第一章 背景

如何对两个曲面模型,按照它们之间的交线,将一个模型智能分割成多个不同部分?同时对另一个模型按照最大开挖线,分割成内外两个部分------这直接决定了我们能否正确计算出开挖-填埋的几何体,以及精准统计面积、体积的核心。

第二章 方案流程及现存问题

1. 数据准备

2. 求解开挖模型开口方向边界线+开挖交线

2.1 对开口边界线的拓扑进行排序,满足顺时针条件

注意 :下图中 - 黄色为边界线,红色为两个模型之间的交线 -:

3. 对开口边界轮廓线,按PCA(需计算)方向进行投影,同时基于OBBTree进行射线求交

  • 核心结果 :得到投影交线

4. 基于投影轮廓,裁剪坡面模型

5. 接边处理

核心逻辑 :封闭开挖模型边界与坡面模型边界------从拓扑角度,去掉内部坡面,接入开挖模型边界。

6. 体化计算与体积统计

将裁剪后的地形和开挖模型进行体化处理,最终区分开挖部分与填埋部分,得到精准体积数据:

  • 黄色部分:坡面以上与开挖模型面构成的填埋部分,填埋体积为 30465.6 m³;
  • 蓝色部分:坡面以下与开挖模型构成的开挖部分,开挖体积为 16175.8 m³;
  • 拓扑特性:两部分完全分离,无拓扑混淆。


7. 方案效果与核心缺陷

上述流程可初步解决问题,但存在两处关键缺陷,无法满足工程级精准要求:

缺陷1:裁剪边界粗糙,依赖原始网格密度

基于粗糙网格计算时,裁剪边界精度差,完全依赖原始网格的密度与精度:

解决方案 :网格加密优化------将原始 400 个三角面提升至 3200 个三角面,边界精度显著改善:



优化前后对比 :边界光滑度与精度提升明显:

缺陷2:闭合交线密集区域,三角网归属判断失效

当闭合交线密度极高(如间距 2cm=10cm 比例尺)时,仅通过三角质心判断坡面上下部分的方式,完全不符合工程实际要求:

核心问题:单纯依赖三角质心的归属判断,无法应对高密度交线场景的精准计算需求。

第三章 精确计算及求解方案

核心问题定位

上述初步方案仅能满足非精细化工程计算需求。要实现精准计算,核心需解决:用空间非共面曲线,对任意三角网曲面模型(开放/闭合)进行布尔计算

只要突破"任意空间曲线对三维模型的精准切割"技术难点,即可满足工程级计算要求。

1. 调研分析与现有技术局限

通过测试 Geomagic、CloudCompare(CC)、Meshlab、Catia、Maya、Blender 等主流三维软件的曲线切割功能,发现其技术路线可归为两类,但均存在明显局限:

切割方式 核心原理 适用场景
近平面投影曲线裁剪 基于空间单一视角的投影区域裁剪 曲面无大幅弯折的简单场景
三维贴面投影裁剪 曲线贴合曲面的投影裁剪 模型网格质量极高(水密、无裂缝、流形)的场景
问题1:近平面投影裁剪的局限性

当曲面出现 90° 弯折时,曲线无法完整裁剪弯折区域,导致切割结果不符合预期。以 CloudCompare 为例:

问题2:三维贴面投影裁剪的局限性

该方式对模型网格质量要求严苛(需满足水密、无裂缝、流形、封闭等条件),但实际工程数据存在两大痛点:

  1. 坡面模型多基于倾斜摄影测量生成,网格粗糙度高、平滑度差,难以满足高质量要求;
  2. 开挖模型多为开放模型,非封闭特性直接不符合三维贴面裁剪的前提条件。
开源库技术评估

调研 CGAL、VTK、OpenMesh、Carve、VCGL、OCCT 等主流开源库后发现:

  • CGAL/VTK/OpenMesh/Carve/VCGL:仅支持近平面切割,无法解决曲面弯折场景;
  • OCCT:支持三维贴面裁剪,但对网格质量要求更高,无法适配工程级"脏数据"。

结论:现有开源库的原生功能,难以应对低质量网格、开放模型、曲面弯折等复杂工程场景,需自研核心算法突破。

2. 自研解决方案:CGAL 基础功能+定制化算法

核心思路

计算两模型交线 → 用交线迭代切割开挖模型 → 统计分析切割后的各部分 → 确定填埋/开挖区域。

2.1 切割交线的拓扑乱序问题及解决

问题 :通过八叉树加速搜索+任意三角形交线计算,得到的交线(Polyline)由大量无序线段组成,拓扑混乱:

解决方案:从拓扑混乱到独立闭环的 9 步解决方案

2.2 曲线贴合曲面:检索连通三角带
  1. 对绘制曲线进行离散化处理;
  2. 通过空间检索,找到离散曲线点最近的目标模型三角面(去重);
  3. 基于回环检索,完成三角带的连通性构建:


2.3 拆分:连通区域提取
  1. 从原始拓扑中移除上述连通三角带;
  2. 采用空间面区域生长算法:为每个三角面标记标识,随机选取初始种子点,循环遍历-出队,直至无连通三角面;
  3. 最终得到多个分离的小连通带数据:
2.4 打标:内外关系判断
  1. 计算每个小连通带的质心;
  2. 采用 PCA 投影方向,将三维空间的质心与曲线关系,降维为二维投影面的内外判断;
  3. 基于二维奇偶法/环绕法判断内外关系,确保与三维空间一致性:
2.5 三角带切割:降维布尔运算
  1. 计算空间曲面法向 A 与三角带中每个三角面的法向 B;
  2. 求解 AB 变换矩阵 M1,将三维数据投影至 XOY 平面,记录投影矩阵 P1;
  3. 在二维平面完成交集/异或布尔运算;
  4. 逆算投影矩阵 P1,还原回三维空间,同时标记三角带的内外部分。
2.6 重组:拓扑整合与脏数据清理
  1. 按标记重组各部分三角带拓扑;
  2. 对重组后的数据进行去重、脏数据清理;
  3. 得到最终精准切割结果:

第四章 结尾

至此,空间非共面曲线切割任意模型(开放/闭合)的核心问题与解决方案已完整呈现,最终形成了一套实用、鲁棒性极强的工程级解决方案。

附录:两种曲线切割方式对比图

相关推荐
Ralph_Y2 小时前
C++数据库操作
开发语言·数据库·c++
不会写代码的里奇2 小时前
从零开发基于DeepSeek的端侧离线大模型语音助手:全流程指南
c++·后端·音视频
nike0good2 小时前
Goodbye 2025 题解
开发语言·c++·算法
Sheep Shaun2 小时前
STL中的unordered_map和unordered_set:哈希表的快速通道
开发语言·数据结构·c++·散列表
樊梓慕3 小时前
【嵌入式】buildroot构建ros2环境
c++·机器人
爱编码的傅同学3 小时前
【程序地址空间】页表的映射方式
c语言·数据结构·c++·算法
序属秋秋秋3 小时前
《Linux系统编程之进程控制》【进程替换】
linux·c语言·c++·操作系统·进程·系统编程·进程替换
hslinux3 小时前
NDK 通过configure 编译C++源码通用脚本
android·c++·ndk·configure
盖世灬英雄z3 小时前
数据结构与算法学习(二)
c++·学习