通過VTK顯示PCL點雲

void showPointCloud(pcl::PointCloud<pcl::PointXYZ>::Ptr pointCloud){
    if(pointCloud->points.size() == 0){
        warningWindow(STR_3D_IMAGE_ERROR_TITLE);
        return;
    }
    vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();//key code
    vtkIdType size = pointCloud->points.size();
    int n =0;
//可以通過openmp優化
    for (vtkIdType rowId = 0; rowId < size; rowId++) {
        auto dp = pointCloud->points.at(rowId);
        if (dp.z == 0) {
            continue;
        }
        points->InsertNextPoint(dp.x*1.0/_iShowScale, dp.y*1.0/_iShowScale, dp.z*1.0/_iShowScale);//key code
        n++;
    }
//todo確認是否需要,也許可以去掉,通過polydata直接顯示
    vtkSmartPointer<vtkPolyVertex> polyvertex = vtkPolyVertex::New();
    polyvertex->GetPointIds()->SetNumberOfIds(n);
    int i=0;
    for(i=0;i<n;i++)//建立拓撲關係
    {
        polyvertex->GetPointIds()->SetId(i,i);//todo
    }
    vtkSmartPointer<vtkUnstructuredGrid> grid=vtkUnstructuredGrid::New();
    grid->SetPoints(points);
    grid->InsertNextCell(polyvertex->GetCellType(), polyvertex->GetPointIds());

    vtkSmartPointer<vtkDataSetMapper> mapper = vtkDataSetMapper::New();
    mapper->SetInputData(grid);
//actor顯示外包圍邊框
#if 0
//    vtkSmartPointer<vtkOutlineFilter>outLineData = vtkSmartPointer<vtkOutlineFilter>::New();
//    outLineData->SetInputData(grid);
//
//    vtkSmartPointer<vtkPolyDataMapper> mapOutline = vtkSmartPointer<vtkPolyDataMapper>::New();
//    mapOutline->SetInputConnection(outLineData->GetOutputPort());
//
//    vtkSmartPointer<vtkActor>outline = vtkSmartPointer<vtkActor>::New();
//    outline->SetMapper(mapOutline);
//    outline->GetProperty()->SetColor(0, 0, 0);
//    _renderer->AddActor(outline);
#endif
      _renderer->RemoveActor(_tmpmodelpointCloudActor);
      _tmpmodelpointCloudActor = vtkActor::New();
      _tmpmodelpointCloudActor->SetMapper(mapper);
      _tmpmodelpointCloudActor->GetProperty()->SetColor(0.9,0.2, 0.9);
      _renderer->AddActor(_tmpmodelpointCloudActor);
    _qvtkWidget->GetRenderWindow()->Render();
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章