vtk/Qt中的控制图外观

Control plot appearance in vtk / Qt

本文关键字:控制 外观 Qt vtk      更新时间:2023-10-16

我在QVTKWidget中显示一个vtk曲面图。QVTKWidget支持交互,即我可以缩放或旋转。我想在任何用户交互之前控制绘图的初始外观:缩放因子、视角、曲面颜色映射。为此,我必须操作哪些对象?我正在查看vtkChartXYZ、vtkContextScene、vtkCamera、vtkRenderer的接口,但还没有找到设置上述参数的好方法。最好的方法是什么?

QVTKWidget vtkWidget;
vtkSmartPointer<vtkContextView> view  = vtkSmartPointer<vtkContextView>::New();
vtkSmartPointer<vtkChartXYZ>    chart = vtkSmartPointer<vtkChartXYZ>::New();
vtkSmartPointer<vtkTable> surface = vtkSmartPointer<vtkTable>::New();
// ... fill surface with some data ...
view->SetRenderWindow(vtkWidget.GetRenderWindow());
chart->SetGeometry(vtkRectf(0.0, 0.0, 300, 300));
view->GetScene()->AddItem(chart.GetPointer());
vtkSmartPointer<vtkPlotSurface> plot = vtkSmartPointer<vtkPlotSurface>::New();
// ... set up plot ...
plot->SetInputData(surface.GetPointer());
chart->AddPlot(plot.GetPointer());
view->GetRenderWindow()->SetMultiSamples(0);
view->GetRenderWindow()->Render();

关于缩放,我遇到了同样的问题,我通过导出vtkInteractorStyleImage类来解决,该类用于与QVTKWidget中的图像交互。

基本上,该类允许使用鼠标滚轮进行缩放,事实上,它有(以及其他)方法OnMouseWheelForward()OnMouseWheelBackward();但它们是CCD_ 4。在派生该类时,我将这些方法(OnMouseWheelForward()OnMouseWheelBackward())重新定义为public。让我们用"myInteractorStyle"来指示派生类的实例。

这样,一旦图像在QVTKWidget中渲染(并且myInteractorStyle已分配给交互程序),我就做了这样的事情(假设你想增加缩放):

for (int i = 0; i < zoomLevel; ++i){
myInteractorStyle->OnMouseWheelForward();
//Or OnMouseWheelBackward(), if you want to reduce the zoom
}

因此,从交互开始,您的缩放级别就满足了。我认为,以同样的方式,你也可以解决你的其他问题。