2017-05-02 127 views
0

我正在使用VTK從使用地面激光掃描儀獲取的輸入點列表生成3D Delaunay三角剖分。到目前爲止,我成功生成了一些3D三角剖分,並將它們保存爲.vtk或.vtu文件格式。但是,我需要將它們保存爲諸如.ply,.stl,.obj或.wrl等流行格式之一。您能否告訴我如何以這些格式之一保存3d三角測量?我的另一個問題是關於setAlpha和setTolerance參數,請您詳細解釋一下這些參數嗎? 在此先感謝vtkDelaunay3D保存三角剖分

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; 
} 

回答

0

您嘗試從掃描地形計算三角形的面,對嗎?是否有充分的理由使用3D Delaunay創建四面體而不是2.5D Delaunay?你可以看看我的Fade2.5D圖書館,有一個免費的學生版本。然而,2.5D的侷限性在於,您無法表示垂直牆,因此不直接支持建築物。

enter image description here

+0

我的數據不是被掃描的地形。它由各種建築構成。 – user887912