Qt 自带数据可视化从文档上看,只能实现三维曲面。
QwtPlot3D在Qt6.6.0上没编译通过。
QCustomPlot 只能搞二维。
VTK~搞起。抄官网demo。
后续需求:
1、对数轴
2、Y轴逆序
3、Z轴值给色带,类似等高线图的色带
期待各位大佬多多指导。
cpp
vtkNew<vtkNamedColors> colors;
// Create the data.
vtkNew<vtkTable> table;
vtkNew<vtkTable> table1;
vtkNew<vtkFloatArray> arrX0;
arrX0->SetName("X");
table->AddColumn(arrX0);
vtkNew<vtkFloatArray> arrX1;
arrX1->SetName("Y");
table->AddColumn(arrX1);
vtkNew<vtkFloatArray> arrX2;
arrX2->SetName("Z");
table->AddColumn(arrX2);
vtkNew<vtkFloatArray> arrX3;
arrX3->SetName("-Z");
table->AddColumn(arrX3);
vtkNew<vtkFloatArray> arrX4;
arrX4->SetName("-Y");
table->AddColumn(arrX4);
const unsigned int numberOfTimePoints = 128;
table->SetNumberOfRows(numberOfTimePoints);
for (unsigned int ii = 0; ii < numberOfTimePoints; ++ii)
{
double value = ii;
double value1 = rand() % 100;
table->SetValue(ii, 0, ii);
table->SetValue(ii, 1, ii);
table->SetValue(ii, 2, sin(value));
table->SetValue(ii, 3, sin(value) + 10);
table->SetValue(ii, 4, sin(value) + 20);
}
// Set up a 3D scene and add an XYZ chart to it.
vtkNew<vtkContextView> contextView;
contextView->GetRenderWindow()->SetSize(1024, 1024);
contextView->GetRenderWindow()->SetWindowName("PlotLine3D");
vtkNew<vtkChartXYZ> chartXYZ;
chartXYZ->SetGeometry(vtkRectf(5.0, 5.0, 635.0, 475.0));
contextView->GetScene()->AddItem(chartXYZ);
// Add a line plot.
vtkNew<vtkPlotLine3D> plotLine3D;
plotLine3D->SetInputData(table, 0, 1, 2);
contextView->GetRenderWindow()->SetMultiSamples(0);
plotLine3D->GetPen()->SetWidth(1.0);
chartXYZ->AddPlot(plotLine3D);
// Add a line plot.
vtkNew<vtkPlotLine3D> plotLine3D1;
plotLine3D1->SetInputData(table, 0, 1, 3);
plotLine3D1->GetPen()->SetWidth(2.0);
chartXYZ->AddPlot(plotLine3D1);
// Add a line plot.
vtkNew<vtkPlotLine3D> plotLine3D2;
plotLine3D2->SetInputData(table, 0, 1, 4);
plotLine3D2->GetPen()->SetWidth(3.0);
chartXYZ->AddPlot(plotLine3D2);
chartXYZ->SetXAxisLabel("振幅");
chartXYZ->SetVisible(true);
// Finally render the scene.
contextView->GetRenderer()->SetBackground(colors->GetColor3d("DarkOliveGreen").GetData());
contextView->GetRenderWindow()->Render();
contextView->GetInteractor()->Initialize();
contextView->GetInteractor()->Start();