我正在开发一个Qt(4.7.4)项目,需要绘制二维和三维坐标系统中的数据。我一直在研究vtk 6.1,因为它看起来非常强大,而且我还需要在稍后的时间将图像数据可视化。我基本上得到了二维地块的工作,但我卡在三维数据绘图。vtk 6.x,Qt:3D(线,曲面,散射)绘图
以下是我尝试过的:我正在使用从vtk的测试(图表/核心/测试/ Cxx/TestSurfacePlot.cxx)中选取的以下一段代码。我说的唯一的事情是,我在GUI及其相互作用物使用QVTKWidget:
QVTKWidget vtkWidget;
vtkNew<vtkChartXYZ> chart;
vtkNew<vtkPlotSurface> plot;
vtkNew<vtkContextView> view;
view->GetRenderWindow()->SetSize(400, 300);
vtkWidget.SetRenderWindow(view->GetRenderWindow());
view->GetScene()->AddItem(chart.GetPointer());
chart->SetGeometry(vtkRectf(75.0, 20.0, 250, 260));
// Create a surface
vtkNew<vtkTable> table;
float numPoints = 70;
float inc = 9.424778/(numPoints - 1);
for (float i = 0; i < numPoints; ++i)
{
vtkNew<vtkFloatArray> arr;
table->AddColumn(arr.GetPointer());
}
table->SetNumberOfRows(numPoints);
for (float i = 0; i < numPoints; ++i)
{
float x = i * inc;
for (float j = 0; j < numPoints; ++j)
{
float y = j * inc;
table->SetValue(i, j, sin(sqrt(x*x + y*y)));
}
}
// Set up the surface plot we wish to visualize and add it to the chart.
plot->SetXRange(0, 9.424778);
plot->SetYRange(0, 9.424778);
plot->SetInputData(table.GetPointer());
chart->AddPlot(plot.GetPointer());
view->GetRenderWindow()->SetMultiSamples(0);
view->SetInteractor(vtkWidget.GetInteractor());
view->GetInteractor()->Initialize();
view->GetRenderWindow()->Render();
现在,这将产生一个情节,我既不能交互与它不是它看起来3D。我想做一些基本的东西,如缩放,平移,或关于枢轴旋转。我想到的几个问题是:
- 将QVTKWidget交互器分配给底部第三行视图是否正确?
- 在测试中,vtkChartXYZ被添加到vtkContextView中。根据文档,vtkContextView用于显示2D场景,但是这里使用了3D图表(XYZ)。这是如何融合在一起的?
详细描述看一看在VTK例子如http://www.vtk.org/Wiki/VTK/Examples/Cxx/GeometricObjects/Cube了解'vtkRenderWindowInteractor'。 – Jakob