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