在阅读了有关 STL 文件的一些内容后,我意识到它们不包含有关网格的信息(例如连接性),但它们表示要网格化的零件的表面几何形状。
但是,一些可用的工具(如开源 Gmsh)可以导入 STL 文件并从 STL 文件中定义的顶点创建网格。谁能指导一些执行这种转换的算法?
在阅读了有关 STL 文件的一些内容后,我意识到它们不包含有关网格的信息(例如连接性),但它们表示要网格化的零件的表面几何形状。
但是,一些可用的工具(如开源 Gmsh)可以导入 STL 文件并从 STL 文件中定义的顶点创建网格。谁能指导一些执行这种转换的算法?
您需要做的是分析输入顶点集(每个三角形贡献其中三个)并为它们分配连续的索引,以便多次出现的顶点(即由不同的三角形共享)每次都分配相同的索引。这会给你一个(唯一的)顶点列表,以及索引三元组列表索引到顶点列表中,以便' 代表原始三角形。
原则上这很容易做到——只需使用哈希表将索引与 3D 点相关联,并在迭代所有顶点时填充它。
在实践中,等效顶点的坐标可能不完全相同,但由于舍入问题而存在少量差异。在这种情况下,使用网格分辨率离散化您的输入数据(这应该是一个对应于最大预期舍入误差的小数字,例如)。使用由此获得的顶点的网格坐标(而不是它们的 3D 位置)作为哈希表中的键来查找关联的顶点索引,但请确保在生成新的之前检查是否有任何一个相邻网格单元在之前分配了索引指数。最后一步确保关闭的顶点将接收相同的索引。