Crop a TriangleMesh



我能够从.stl文件加载一个TriangleMesh。我可以画出来,一切都很好。然而,当我需要从形状中"裁剪"这个TriangleMesh时,事情就变得复杂了。我想要一个像这样的方法:

public TriangleMesh cropFrom(Shape shape) {
    TriangleMesh croppedTriangleMesh = new TriangleMesh();
    for (Point point : currentTriangleMesh.getPoints()) {
        if ( shape.contains(point) ) {
            // Let the magic happens!
        }
    }
    return croppedTriangleMesh;
}

我知道TriangleMesh与点(x, y, z),面和纹理坐标一起工作。我不知道如何检索相关的面孔和纹理坐标给定一个点(或反之亦然)。我不知道该怎么开始,从哪里开始看。这似乎不是一个热门话题。

提前感谢您的时间和帮助!

您可能想要查看多边形网格的布尔运算。这通常是一个困难的操作,可以很容易地完成,但不健壮,例如以下方法:

  • 拆分两个对象的所有相交表面
  • 无论是使用光线追踪还是使用邻接信息,确定物体的内部和外部表面
  • 最后,根据需要进行的操作,只保留选定的表面
    • 交叉点-将A的部分保留在B内,将B的部分保留在A内
    • 联盟-保持A的部分在B之外,B的部分在A之外
    • 差异A - B -保持部分A在B外,部分B在A内(并翻转正常)

或者,也有使用多重精度算法和将多边形对象转换为边界平面表示的方法,这些方法速度较慢且难以实现。

最好使用其中一个库来实现它,例如CGAL(众多库中的一个)。

相关内容

  • 没有找到相关文章

最新更新