///////////////////////////////////////////////////////////////////////////////////////////////
/// grid widget implementation
+struct cv::viz::GridWidget::GridImpl
+{
+ static vtkSmartPointer<vtkPolyData> createGrid(const Vec2i &dimensions, const Vec2d &spacing)
+ {
+ // Create the grid using image data
+ vtkSmartPointer<vtkImageData> grid = vtkSmartPointer<vtkImageData>::New();
+
+ // Add 1 to dimensions because in ImageData dimensions is the number of lines
+ // - however here it means number of cells
+ grid->SetDimensions(dimensions[0]+1, dimensions[1]+1, 1);
+ grid->SetSpacing(spacing[0], spacing[1], 0.);
+
+ // Set origin of the grid to be the middle of the grid
+ grid->SetOrigin(dimensions[0] * spacing[0] * (-0.5), dimensions[1] * spacing[1] * (-0.5), 0);
+
+ // Extract the edges so we have the grid
+ vtkSmartPointer<vtkExtractEdges> filter = vtkSmartPointer<vtkExtractEdges>::New();
+ filter->SetInputConnection(grid->GetProducerPort());
+ filter->Update();
+ return filter->GetOutput();
+ }
+};
+
cv::viz::GridWidget::GridWidget(const Vec2i &dimensions, const Vec2d &spacing, const Color &color)
{
- // Create the grid using image data
- vtkSmartPointer<vtkImageData> grid = vtkSmartPointer<vtkImageData>::New();
-
- // Add 1 to dimensions because in ImageData dimensions is the number of lines
- // - however here it means number of cells
- grid->SetDimensions(dimensions[0]+1, dimensions[1]+1, 1);
- grid->SetSpacing(spacing[0], spacing[1], 0.);
-
- // Set origin of the grid to be the middle of the grid
- grid->SetOrigin(dimensions[0] * spacing[0] * (-0.5), dimensions[1] * spacing[1] * (-0.5), 0);
-
- // Extract the edges so we have the grid
- vtkSmartPointer<vtkExtractEdges> filter = vtkSmartPointer<vtkExtractEdges>::New();
- filter->SetInputConnection(grid->GetProducerPort());
- filter->Update();
+ vtkSmartPointer<vtkPolyData> grid = GridImpl::createGrid(dimensions, spacing);
vtkSmartPointer<vtkDataSetMapper> mapper = vtkSmartPointer<vtkDataSetMapper>::New();
- mapper->SetInput(filter->GetOutput());
+ mapper->SetInputConnection(grid->GetProducerPort());
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
cv::viz::GridWidget::GridWidget(const Vec4f &coefs, const Vec2i &dimensions, const Vec2d &spacing, const Color &color)
{
- // Create the grid using image data
- vtkSmartPointer<vtkImageData> grid = vtkSmartPointer<vtkImageData>::New();
-
- // Add 1 to dimensions because in ImageData dimensions is the number of lines
- // - however here it means number of cells
- grid->SetDimensions(dimensions[0]+1, dimensions[1]+1, 1);
- grid->SetSpacing(spacing[0], spacing[1], 0.);
-
- // Set origin of the grid to be the middle of the grid
- grid->SetOrigin(dimensions[0] * spacing[0] * (-0.5), dimensions[1] * spacing[1] * (-0.5), 0.0f);
-
- // Extract the edges so we have the grid
- vtkSmartPointer<vtkExtractEdges> filter = vtkSmartPointer<vtkExtractEdges>::New();
- filter->SetInputConnection(grid->GetProducerPort());
- filter->Update();
+ vtkSmartPointer<vtkPolyData> grid = GridImpl::createGrid(dimensions, spacing);
// Estimate the transform to set the normal based on the coefficients
Vec3f normal(coefs[0], coefs[1], coefs[2]);
vtkSmartPointer<vtkTransformPolyDataFilter> transform_filter = vtkSmartPointer<vtkTransformPolyDataFilter>::New();
transform_filter->SetTransform(transform);
- transform_filter->SetInputConnection(filter->GetOutputPort());
+ transform_filter->SetInputConnection(grid->GetProducerPort());
transform_filter->Update();
vtkSmartPointer<vtkDataSetMapper> mapper = vtkSmartPointer<vtkDataSetMapper>::New();
- mapper->SetInput(transform_filter->GetOutput());
+ mapper->SetInputConnection(transform_filter->GetOutputPort());
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);