0

我正在使用 VTK 从使用地面激光扫描仪获得的输入点列表中生成 3D Delaunay 三角剖分。到目前为止,我成功生成了一些 3D 三角剖分并将它们保存为 .vtk 或 .vtu 文件格式。但是,我需要将它们保存为流行格式之一,例如 .ply、.stl、.obj 或 .wrl。您能否告诉我如何以其中一种格式保存 3d 三角测量?我的另一个问题是关于 setAlpha 和 setTolerance 参数,你能详细解释一下这些参数吗?提前致谢

int main( int argc, char* argv[] )
{
    //load the point cloud
    vtkSmartPointer<vtkSimplePointsReader> reader = vtkSmartPointer<vtkSimplePointsReader>::New();
    reader->SetFileName("kucuk50k.xyz");
    reader->Update();
    vtkPolyData* polydata = reader->GetOutput();
    std::cout << "The point cloud is loaded" << std::endl;
    //end of point cloud loading
    std::cout << "----------------------------------------------" << std::endl;
    // Generate a mesh from the input points. If Alpha is non-zero, then
    // tetrahedra, triangles, edges and vertices that lie within the
    // alpha radius are output.
    std::cout << "Start delaunay 3d triangulation" << std::endl;
    vtkSmartPointer<vtkDelaunay3D> delaunay3DAlpha = vtkSmartPointer<vtkDelaunay3D>::New();
    delaunay3DAlpha->SetInputConnection(reader->GetOutputPort());
    delaunay3DAlpha->SetAlpha(0.01);
    std::cout << "3d Delaunay computed" << std::endl;
    std::cout << "----------------------------------------------" << std::endl;
    std::cout << "Start writing the triangulation" << std::endl;
    vtkSmartPointer<vtkXMLUnstructuredGridWriter> ugWriter =    vtkSmartPointer<vtkXMLUnstructuredGridWriter>::New();
    ugWriter->SetInputConnection(delaunay3DAlpha->GetOutputPort());
    ugWriter->SetFileName("delaunayy_50k.vtk");
    ugWriter->Write();
    std::cout << "VTK file created" << std::endl;
    return EXIT_SUCCESS;
}
4

1 回答 1

0

您尝试从扫描的地形计算三角形表面,对吗?是否有充分的理由使用创建四面体的 3D Delaunay 而不是 2.5D Delaunay?你可以看看我的Fade2.5D库,有一个免费的学生版。然而,2.5D 的限制是您不能表示垂直墙,因此不直接支持建筑物。

在此处输入图像描述

于 2017-05-03T07:24:37.150 回答