PolygonalSurfaceContourLineInterpolator 多边形交互器
1. 效果:
2.简介:
可以实现在多边形上进行交互,选择;在多边形曲面上实现轮廓点的交互绘制。
该类的使用需要结合 vtkPolygonalSurfacePointPlacer 类,定位点的功能也就是拾取器。
前提:输入的多边形曲面需要计算法向量。
3.源码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char* argv[])
{
vtkNew colors;
vtkSmartPointer polyData;
if (argc < 2)
{
vtkNew sphereSource;
sphereSource->SetThetaResolution(40);
sphereSource->SetPhiResolution(20);
sphereSource->Update();
polyData = sphereSource->GetOutput();
}
else
{
vtkNew reader;
reader->SetFileName(argv[1]);
reader->Update();
polyData = reader->GetOutput();
}
// The Dijkistra interpolator will not accept cells that aren't triangles.
vtkNew triangleFilter;
triangleFilter->SetInputData(polyData);
triangleFilter->Update();
auto pd = triangleFilter->GetOutput();
// Create a mapper and actor.
vtkNew mapper;
mapper->SetInputConnection(triangleFilter->GetOutputPort());
vtkNew actor;
actor->SetMapper(mapper);
actor->GetProperty()->SetInterpolationToFlat();
actor->GetProperty()->SetColor(colors->GetColor3d("MistyRose").GetData());
// Create the render window, renderer and interactor.
vtkNew renderer;
vtkNew renderWindow;
renderWindow->AddRenderer(renderer);
renderWindow->SetWindowName("PolygonalSurfaceContourLineInterpolator");
vtkNew interactor;
interactor->SetRenderWindow(renderWindow);
// Add the actors to the renderer, set the background and size.
renderer->AddActor(actor);
renderer->SetBackground(colors->GetColor3d("CadetBlue").GetData());
// Here comes the contour widget stuff...
vtkNew contourWidget;
contourWidget->SetInteractor(interactor);
vtkSmartPointer rep =
dynamic_cast(
contourWidget->GetRepresentation());
rep->GetLinesProperty()->SetColor(colors->GetColor3d("Crimson").GetData());
rep->GetLinesProperty()->SetLineWidth(3.0);
vtkNew pointPlacer;
pointPlacer->AddProp(actor);
pointPlacer->GetPolys()->AddItem(pd);
rep->SetPointPlacer(pointPlacer);
vtkNew interpolator;
interpolator->GetPolys()->AddItem(pd);
rep->SetLineInterpolator(interpolator);
renderWindow->Render();
interactor->Initialize();
contourWidget->EnabledOn();
interactor->Start();
return EXIT_SUCCESS;
}
4.使用场景
可以用来做任意曲面切割:
曲面拟合主要用的贝塞尔曲面,交互部分用
vtkPolygonalSurfacePointPlacer,
vtkPolygonalSurfaceContourLineInterpolator
也可使用
vtkOrientedGlyphContourRepresentation
以及自定义的vtk3DWidget子类