From 998aefd1d10a5cce794cf4c81248796719b9b0e6 Mon Sep 17 00:00:00 2001 From: Anatoly Baksheev Date: Sun, 2 Feb 2014 20:43:43 +0400 Subject: [PATCH] cloud collection merges data only on rendering --- modules/viz/src/clouds.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/modules/viz/src/clouds.cpp b/modules/viz/src/clouds.cpp index 4b84e8e..b7c8bbb 100644 --- a/modules/viz/src/clouds.cpp +++ b/modules/viz/src/clouds.cpp @@ -211,13 +211,16 @@ void cv::viz::WCloudCollection::addCloud(InputArray cloud, InputArray colors, co vtkSmartPointer mapper = vtkPolyDataMapper::SafeDownCast(actor->GetMapper()); if (!mapper) { + vtkSmartPointer append_filter = vtkSmartPointer::New(); + VtkUtils::AddInputData(append_filter, polydata); + // This is the first cloud mapper = vtkSmartPointer::New(); mapper->SetScalarRange(0, 255); mapper->SetScalarModeToUsePointData(); mapper->ScalarVisibilityOn(); mapper->ImmediateModeRenderingOff(); - VtkUtils::SetInputData(mapper, polydata); + mapper->SetInputConnection(append_filter->GetOutputPort()); actor->SetNumberOfCloudPoints(std::max(1, polydata->GetNumberOfPoints()/10)); actor->GetProperty()->SetInterpolationToFlat(); @@ -226,15 +229,10 @@ void cv::viz::WCloudCollection::addCloud(InputArray cloud, InputArray colors, co return; } - vtkPolyData *currdata = vtkPolyData::SafeDownCast(mapper->GetInput()); - CV_Assert("Cloud Widget without data" && currdata); - - vtkSmartPointer append_filter = vtkSmartPointer::New(); - VtkUtils::AddInputData(append_filter, currdata); + vtkSmartPointer producer = mapper->GetInputConnection(0, 0)->GetProducer(); + vtkSmartPointer append_filter = vtkAppendPolyData::SafeDownCast(producer); VtkUtils::AddInputData(append_filter, polydata); - append_filter->Update(); - - VtkUtils::SetInputData(mapper, append_filter->GetOutput()); + append_filter->Modified(); actor->SetNumberOfCloudPoints(std::max(1, actor->GetNumberOfCloudPoints() + polydata->GetNumberOfPoints()/10)); } -- 2.7.4