gpt4 book ai didi

c++ - 在 vtk/Qt 中控制绘图外观

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:54:48 24 4
gpt4 key购买 nike

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

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();但它们是私有(private)的。派生该类,我将这些方法(OnMouseWheelForward()OnMouseWheelBackward())重新定义为 public。让我们用“myInteractorStyle”来指示派生类的实例。

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

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

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

关于c++ - 在 vtk/Qt 中控制绘图外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21436776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com