第一部分:在 COMSOL Multiphysics® 中编辑和修复面网格

2026年 5月 27日

在某些场景下,对导入的网格进行适当修改会非常有用,例如,当您需要移动或旋转网格、网格存在孔洞或自相交问题,或者您希望使用平面对网格进行切割,等等。在本篇博客文章中,我将介绍 COMSOL Multiphysics® 软件中提供的用于编辑和修复面网格的功能,以及处理导入网格的各种操作和工作流程,并提供一些可供进一步学习的现有教程模型和其他相关资源。本文是两部分系列文章的第一篇,我会在 第二篇 文章中介绍如何将导入的 STL 网格与其他的导入 CAD 进行装配。

目录

  1. 导入面网格的格式
  2. 修复和编辑导入的面网格
  3. 颅骨网格演示案例
    1. 移动和旋转导入的网格
    2. 修复孔及相交单元等问题
    3. 制作网格的切口
    4. 从网格中移除单元
    5. 重新划分面网格以控制单元大小
    6. 合并、融合网格并创建计算域
    7. 合并域并创建选择
  4. 总结与思考

导入面网格的格式

本文重点讨论的三维面网格通常源自三维成像技术。以医学应用为例,三维面网格可用于描述人体内部器官甚至整个身体的几何形态。COMSOL Multiphysics® 软件支持导入的常见文件格式包括 STL、3MF 和 PLY。STL 广泛应用于 3D 打印,或许是最广为人知的格式,因此本文将以 STL 格式为主展开讨论。但请注意,本文介绍的所有网格编辑方法适用于所有以任意 支持格式 导入到 基于网格的几何 序列中的网格。

STL 文件通常不包含任何 边界或域 信息,因此这些信息需要在导入过程中自动完成或在导入后手动创建。导入过程中始终会自动创建边界,但如果导入的网格因区域重叠而存在相交单元,则无法在导入过程中创建域,即,可指派材料并使用体网格填充的体积区域。软件中的大多数物理场接口都需要域,因此创建域非常重要。对于存在重叠区域的网格,您首先需要消除相交问题,生成可完整描述所有轮廓的边,之后才能手动创建域。为域填充体网格的操作会在生成计算网格时完成,我将在本系列的 第二篇文章 中演示这一点。

注:对于在 CAD 软件中创建的设计,建议将其导出为 CAD 导入模块 支持导入的格式。

修复和编辑导入的面网格

除了处理 STL 格式的挑战之外,导入面网格时遇到的另一个常见挑战是这些三角形网格的质量通常较差,无法直接用于有限元仿真。从仿真角度来看,如果网格包含以下情况,则其质量较差:

  • 存在孔或自相交边界,阻碍域的创建
  • 存在尖峰或其他不需要的不规则形状
  • 存在角度非常尖锐或非常钝的三角形
  • 存在大小差异显著的三角形

COMSOL Multiphysics® 提供了一系列功能来处理所有这些挑战,以及进行其他各种常见的网格编辑。您可以使用这些功能来实现:

  • 移动、缩放和旋转导入的网格
  • 在导入过程中修改修复容差
  • 填充网格中的小孔或大孔
  • 从网格中移除单元,并用新的已划分网格的表面替换它们
  • 融合与合并网格
  • 将导入的网格与参数化 CAD 设计(或在 COMSOL Multiphysics® 中绘制的几何图形)相融合,以运行参数化扫描
  • 使多个导入的网格相交或与平面相交
  • 重新划分面网格以控制单元大小和形状
  • 对非平面边界使用曲面表示

对颅骨的面网格进行的编辑。

在本篇博客文章中,我将使用一套人体颅骨的网格模型来演示上述几项操作的工作流程。

颅骨网格演示案例

以下演示所用的网格来自美国国立卫生研究院(NIH)网站(参考资料 1)。首先,将网格导入到 基于网格的几何 序列中,然后继续在序列定义满足任意物理场设置和求解所需的域和边界的几何模型。或者,您也可以在 网格零件 序列中执行导入、修复和编辑操作,如 本博客系列的第二部分STL 导入系列教程 中所示。将部分工作移至一个或多个网格零件中,既有利于项目工作的结构化整理,也便于在多个序列中重复使用同一网格,或将网格零件用作构造几何(该用法同样在第二部分文章中展示)。

对于此示例,我需要旋转和平移网格以将其调整到目标位置,删除一些冗余单元,并计算骨骼和牙齿网格之间的交集。此外,我还将介绍一些可适配其他情况的实用操作和工作流程。为便于可视化,除非另有说明,网格表面均已着色。在本文末尾可下载的示例模型中,所有边界默认保持灰色,仅在最后创建彩色选择集后才会显示对应色彩。

移动和旋转导入的网格

许多三维成像技术是在躺卧的人体上进行扫描的,这意味着导入的网格可能需要旋转,例如,将人体模型置于直立姿态。移动和旋转导入的网格可通过向 导入 节点添加一个或多个 变换 属性来完成。若要实现绕多个轴旋转,则需要添加多个 变换 属性。

对于本示例,我执行这样的旋转操作:首先通过 轴类型 设置将 z 轴与指定的轴对齐;然后,将网格绕指定的 x 轴旋转 83 度,并添加一个位移以将网格置于坐标原点。

文件中网格的原始方向(左)。通过将 轴类型 设置为 x 轴,网格旋转以使 z 轴与 x 轴对齐(中)。最后,执行绕 x 轴旋转 83 度的操作(右)。

请注意,建议在进行任何其他编辑或修复操作之前添加所有的 变换 属性,这是因为,若在使用新的 变换 设置后重新导入网格,可能会导致序列中后续特征的输入选择集丢失。

修复孔及相交单元等问题

在导入期间或构建其他操作时,可能会出现 信息 节点,通知您网格中存在孔,并为您提供一个可以放大查看的边选择。

对于相对于网格整体尺寸较小的孔(通常为一个或几个网格单元的大小),通常只需增加导入的 修复容差 即可,因为这可以折叠单元或对齐顶点坐标的不匹配。对于较大的孔,或者如果增加修复容差无法封堵所有孔,请尝试使用 填充孔 操作。若执行该操作后填充了所有孔,并且表面因此形成了封闭区域,则 填充孔 操作还将在此类区域内创建域。

对于相交单元等问题(如下右图所示),请隔离问题区域,删除单元,然后填充孔。有关此工作流程的更多详细信息,请参阅本文 从网格中移除单元 这一章节。

当前这套颅骨网格不需要此类修复,但 STL 导入系列教程 包含了几个较小孔和相交单元的例子,如下图所示。您可以下载对应文件学习如何修复这类问题。

零面积孔(即狭缝)由以蓝色突出显示的边界定(左);因顶点坐标不匹配导致的网格孔(中);导入网格中的相交单元(右)。

制作网格的切口

如果您只想在仿真中包含导入网格的一个较小区域,该怎么办?以这份颅骨网格为例,最终目标是创建一个模型来模拟牙种植体,因此不需要完整的颅骨网格。假设网格的某些部分在仿真中不需要,您可以删除它们。本次导入的颅骨网格由多个独立的网格表面组成,因此可以使用 删除实体 操作提取颌骨和牙齿的表面,如下图所示。

使用 删除实体 操作删除了网格中不感兴趣的部分,只保留了上颌骨和两颗牙齿(以浅黄色突出显示)。

接下来,使用 与平面相交 操作将上颌骨切割成多个小块,然后删除仿真不需要的部分。您可以使用坐标平面、点、坐标、法矢量等来指定平面。一旦指定了一个平面,就可以添加一个或多个平行平面,如下方的最后两张图片所示。与平面相交 操作用于创建平面上方和下方的选择集。您可以使用这些选择轻松选择要删除的网格。

顺时针从左上开始:使用了多个 与平面相交 操作将上颌骨切割成更小的块,并逐步删除了平面上方和/或下方的部分。

从网格中移除单元

对于颅骨网格,需要在骨骼和牙齿内部创建实体域,以便在后续向模型添加物理场时为其指派材料,为此需要使用 并集 操作来解析骨骼和牙齿表面之间的相交问题。如下图所示,两类表面以复杂的方式相交,网格之间存在小的重叠和间隙。我还需要解析相交问题,以移除缺失牙齿造成的凹痕,因为我想模拟牙种植体(将在本系列第二篇文章中添加到网格中)已完全愈合并融入骨骼。在相交角度接近 90 度时,执行合并网格操作的难度远低于本颅骨网格这类小角度。为此,我移除了骨骼表面相当大的部分,替换为一块更平整的新网格化表面。

使用 剪裁平面 操作查看网格内部。骨表面(浅黄色)包含与牙齿(白色)和未来牙种植体相交的凹陷区域。

移除冗余网格单元的工作流程通常包括:隔离不规则区域、删除该区域、创建新表面,并将其与相邻边界连接。某些 STL 网格包含大量问题区域,因此可以借助从软件中的 开发工具 选项卡获取的 用球进行网格分割 插件来自动化隔离表面的过程。分割操作可以快速分割网格,但其设置仅限于特定形状或逻辑表达式。另一方面,创建边 操作更灵活,因为您可以手动选择每个网格边。出于实际考虑,创建边 操作通常仅在隔离较少数量的网格单元时使用。

我将在此演示一个使用这两种操作的工作流程,首先从加载 用球进行网格分割 插件开始。为此,单击 开发工具 选项卡上的 插件库 按钮,然后在插件列表中,勾选 用球进行网格分割 插件的复选框,单击 完成。接下来,单击 开发工具 选项卡上的 插件 按钮,选择 用球进行网格分割

当插件加载到模型中后,通过鼠标中键单击放置旋转中心,以用作球体的中心。在插件的 设置 窗口中单击 创建 按钮,将 用球分割 操作添加到序列中,其中心和半径会由插件自动填充。如果需要,这些设置后续仍可手动更改。在本示例中,我选择仅分割最大的骨骼边界(如下方左图中以蓝色高亮显示的区域),因为那是唯一包含我要替换单元的边界。有关该插件的其他用例,请参阅 喷雾颗粒在人体呼吸道中的沉积 教程模型。

从底部视角观察网格,为提升可视性隐藏了牙齿部分。在 图形 窗口中,用鼠标中键单击网格以设置球体的中心。球体的半径(浅粉色)由插件自动设置。为便于观察,牙齿已隐藏(左)。将 用球分割 操作添加到序列中以隔离球体包围的区域后生成的网格(右)。

对于其余的凹陷区域,我使用了 创建边 操作,因为中间凹陷周围的骨壁相当薄,手动单击边可以更好地控制要隔离哪些单元。使用 创建边 操作时,可在 图形 窗口中单击网格边创建将隔离表面的几何边,然后选择这些边连接到由插件创建的边(下方左图中较粗的黑色边)。创建边 操作的使用也在 STL 导入系列教程 中进行了演示。

图形 窗口中单击网格边(以蓝色高亮显示),形成包含其余凹陷区域的表面的边界边(左)。使用 剪裁平面 操作从侧面观察网格:突出显示的表面(蓝色)被选中以进行删除和替换(右)。

凹陷区域被隔离之后,我删除了这些表面,并使用 创建面 操作创建了一个新的网格表面,如下图所示。生成的新表面是一个最小曲面,这意味着在粗网格尺寸下,它旨在尽可能接近平面形态。如果孔相对于网格的边框较小,可以改用 填充孔 操作。

突出显示的边(蓝色)用作 创建面 操作的输入(左)。灰色显示的是新的网格化边界(右)。

最后,我使用 连接实体 操作将骨骼的较大边界与新创建的边界连接起来。

重新划分面网格以控制单元大小

为了让 并集 操作顺利计算出牙齿和骨骼网格之间的交线,理想的情况是两类网格的单元尺寸尽可能的均匀,且相交面上单元质量较高。使用 重新划分面网格 操作可以实现这些条件。要获得对单元大小的更多控制,请在 大小 子节点中更改单元尺寸。为了使所有表面上的网格尺寸相似,而不受曲率和任何狭窄区域的影响,请将 最小单元大小最大单元大小 设置为相似或相等的值。请注意,使用 重新划分面网格 操作生成的网格仅用于帮助 并集 操作并获得更平滑的表面表示,该操作通过将新节点放置在由线性网格导出的曲面表示上来实现后者。计算网格稍后在 网格 序列中生成。

重新划分牙齿和已连接的骨表面的网格,为 并集 操作做准备。

重新划分面网格重新划分边网格 操作也可用于控制表面和边的形状。有关使用 重新划分面网格 操作来平滑网格表面的示例,请参阅 如何基于扫描图像数据创建和优化网格

合并、融合网格并创建计算域

回到牙种植体的示例,我使用了 并集 操作来计算牙齿和骨骼重叠网格之间的交集。并集 操作计算相交边、分割表面,并在必要时拆分网格单元,如下方右侧图所示。

如果 并集 操作报告相交单元异常、保留域失败等报错,请尝试在 重新划分面网格 操作中调整网格大小,尝试降低 并集 操作的 绝对 修复容差,和/或切换到 网格顶点放置 设置中的 线性 选项。当使用 弯曲 顶点放置选项时(如下图中间图所示),新的网格顶点被放置在从线性网格导出的网格表面的曲面表示上。线性 选项简化了问题,但代价是相交边更具棱角。

对于本示例模型,我对 并集 操作使用了 线性 网格顶点放置选项,从而创建追踪交点的边,使得网格在其上贴合(下方右图)。

构建 并集 操作之前的网格:牙齿的三角形与骨骼的三角形相交(左)。当使用 弯曲 网格顶点放置选项时,交线边缘更平滑(中)。当使用 线性 网格顶点放置选项时(本示例模型中选择使用),交线边缘更具棱角(右)。

在此之前,由于牙齿和骨骼之间存在相交单元,网格内部尚未创建域。现在网格中的相交问题已解决,我使用 创建域 操作在封闭区域内形成计算域。要可视化域,您可以在 图形 窗口中右键单击网格任意位置,依次选择 剪裁 >剪裁平面。然后,在 图形 工具栏中,单击 剪裁活动项 按钮并选择 显示横截面

另一种查看域是否已创建的方法是检查 选择列表 是否报告了任何域。在 创建域 操作构建完成后,图形 窗口应显示域的横截面(下方右图),选择列表 应在域层填充,并且 创建域 操作设置的 信息 栏将列出已创建的域数以及总域数。

在构建 创建域 操作之前,网格中没有域——只有边界、边和顶点(左)。构建 创建域 操作后,如果启用了 显示横截面 设置,则域在 剪裁平面 中显示为横截面(右)。

通过多个 导入 节点导入的网格,其处理逻辑与在 几何 序列中使用 形成装配 方法时处理不同对象的方式相同。要连接此类网格中的接触边界,建议使用 合并实体 操作,后者也可用于折叠网格中的间隙,如下方取自 STL 导入系列教程 中的示例所示。可下载案例文件以了解更多信息。

合并两个面(黄色)以封堵椎骨和椎间盘之间的间隙(左)。间隙封堵后生成的网格(右)。

合并域并创建选择

不出所料,示例网格中牙齿的域被骨骼表面分割(下方左图)。我本可以保持域的分割状态,但我使用了 连接实体 操作将牙齿的域合并为两个域(下方右图)。之后,我可以定义域和边界选择,用于设置材料和物理场。本示例中,我创建了域选择以方便指派配材料属性。

合并牙齿的域(左)。已指定颜色选择的域:所有域已被指定颜色,横截面也会同步显示这些颜色(右)。

最终的基于网格的几何。

截止目前,这一基于网格构建的几何模型已完全满足仿真使用要求,后续仅需在 网格 1 节点中构建计算网格即可。

总结与思考

COMSOL Multiphysics® 提供了多个用于修复和编辑导入网格的功能。在本篇博客文章中,我演示了如何旋转导入的网格、移除单元、合并实体、执行网格布尔并集运算以及创建计算域。如果您尚未执行操作,可查看本文的 示例模型文件。请注意,对此网格进行的所有编辑可能不适用于其他网格,添加操作的顺序也可能因具体网格而异。我已对网格进行预处理,以便稍后在缺失牙齿的位置添加牙种植体,其目标是生成可用于固体力学仿真的计算网格。关于本文中完成预处理的网格与导入的 CAD 几何相结合的内容,将在 本系列的第二部分 中进行介绍。

了解更多

如果您有兴趣了解更多关于处理导入网格的信息,请查看以下资源:

参考资料

  1. kbrowne, “Skull and Eyes – Visible Human Male. Version 1.03,” NIH 3D, 12, Apr. 2026; https://3d.nih.gov/entries/3DPX-020591.

博客分类

评论 (0)

正在加载...
浏览 COMSOL 博客