第一部分:在 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 博客
Baidu
map