Windows Qt C++ VTK 绘制三维曲线

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();
相关推荐
_李小白31 分钟前
【C++学习笔记】新特性之inline变量
c++·笔记·学习
桀人1 小时前
C++——模板初阶(收录在专栏C++入门到精通)
开发语言·c++
Lumbrologist1 小时前
【C++】零基础入门 · 第 2 节:变量、基本数据类型与输入输出
java·开发语言·c++
XX風1 小时前
CMake / Make / Ninja / MSVC / GCC / Clang / MSBuild —— 完整体系化理解
c++
Peter·Pan爱编程2 小时前
10. new_delete 不是 malloc_free 的包装
c++·人工智能·算法
故事和你913 小时前
洛谷-【动态规划1】动态规划的引入2
开发语言·数据结构·c++·算法·动态规划·图论
fpcc4 小时前
c++编程实践——历史记录的管理
c++
玖笙&5 小时前
✨WPF编程基础【3.3】:容器控件(附源码)
c++·wpf·visual studio
汉克老师5 小时前
GESP5级C++考试语法知识(十七、二分算法提高篇(二))
c++·算法·二分算法·gesp5级·gesp五级·二分算法易错点
我材不敲代码6 小时前
Python 正则表达式进阶实战:从文本清洗到复杂信息提取
c++·python·正则表达式