0

我有一些有机形状(例如骨骼)的非常精细的网格 (STL),并且希望将其转换为 NURBS 的一些补丁,通过合理的简化会更加平滑。

我可以使用 Solidworks ScanTo3D 函数手动执行此操作,但它不可编写脚本。当我需要做数百个时,这很痛苦。

有没有办法自动化它,例如,使用一些可用的开源库?我完全没问题,但准确性有一些损失。我主要使用 Python,但我不介意它是否是其他语言,我可以解决它。

请注意,我要避免的一件事是将 10,000 个三角形的 STL 转换为具有 10,000 个面片的 NURBS。我想自动(以编程方式,可以通过一些参数调整)将网格划分为几个补丁,然后对其进行拟合。再一次,我很好,但准确性有一些损失。

4

1 回答 1

1

一般来说,将任意网格转换为 nurbs 并不容易。对于给定的网格,什么是好的 nurbs 表面取决于用例。之后是否要手动编辑 nurbs 曲面?是否应该在 nurbs 主体中正确识别和表示对称结构或其他特征?保持身体的体积重要吗?是否存在不应简化的边界线,因为它们改变了必须保留的外观或角度?

如果您只想平滑网格或减少顶点数量,可以使用更简单的方法,例如网格缩减网格平滑

如果您要求输出为 nurbs,则有不同的方法会导致不同的拓扑和近似值,如上所示。对象简化的常用方法是将网格注册到一些手工制作的原型,然后执行一些较小的更改来塑造特定实例。例如,如果有几类形状,如骨骼、心脏、肝脏等,则可以为每个类建模一次原型 nurbs 身体,它定义了该器官的平均外观和拓扑结构。然后可以通过将原型拟合到该实例来将类的每个实例转换为 nurbs。由于拓扑是固定的,优化问题被简化为我们需要找到以最小误差逼近网格的控制点的问题。这种方法的缺点是你必须为每个类创建一个原型。优点是拓扑将很好并且易于编辑。

另一种方法是首先平滑网格并减少多边形数量(有可用于减少网格的库),然后简单地将每个三角形/四边形转换为 nurbs 补丁(如 Rhino MeshToNurb 命令)。此方法应该更容易实现,但生成的 nurbs 主体可能具有丑陋的拓扑。

如果其中一种方法适用,实际上取决于您要对转换后的数据做什么。

于 2017-06-26T23:23:32.257 回答