我有一些非常精细的网格(STL)的某些有机形状(例如,骨骼),并希望将其转换为NURBS的几个补丁,这将更加平滑,合理的简化。
我可以使用Solidworks ScanTo3D函数手动执行此操作,但它不具有脚本。当我需要做数百件时,这是一种痛苦。
是否有办法实现自动化,例如,某些开源库可用?我完全没有准确的损失。我主要使用Python,但我不介意它是否在其他语言中,我可以解决它。
请注意,我要避免的一件事是将10,000个三角形的STL转换为具有10,000个补丁的NURBS。我想自动(以编程方式,可以使用一些参数调整)将网格划分为几个补丁然后适合它。再说一次,我完全没问题,准确性也有所下降。
答案 0 :(得分:1)
一般来说,将任意网格转换为nurbs并不容易。对于给定网格,什么是良好的nurbs表面取决于用例。你想在之后手动编辑nurbs表面吗?是否应该在nurbs体中正确识别和表示对称结构或其他特征?保持身体的体积是否重要?是否存在不应简化的边界线,因为它们会改变必须保留的外观或角度?
如果您只想平滑网格或减少顶点数量,可以采用更简单的方法,例如网格缩小和网格平滑。
如果您需要输出为nurbs,则会有不同的方法导致不同的拓扑和近似值,如上所示。对象简化的常用方法是将网格注册到一些手工制作的原型,然后执行一些较小的更改以形成特定实例。如果存在例如骨骼,心脏,肝脏等几类形状,则可以为每个类别模拟原型nurbs体,其定义该器官的平均外观和拓扑。然后,通过将原型拟合到该实例,可以将类的每个实例转换为nurbs。由于拓扑是固定的,优化问题减少到我们需要找到接近具有最小误差的网格的控制点的问题。这种方法的缺点是你必须为每个类创建一个原型。优点是拓扑结构非常好且易于编辑。
另一种方法是首先平滑网格并减少多边形数量(有可用于网格缩小的库),然后简单地将每个三角形/四边形转换为nurbs补丁(如Rhino MeshToNurb Command)。这种方法应该更容易实现,但最终的nurbs体可能会有一个丑陋的拓扑结构。
如果其中一种方法适用,实际上取决于您对转化数据的处理方式。