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();
相关推荐
会编程的小孩8 小时前
C++ qt的安装
c++
小成2023032026513 小时前
C++~07补充
开发语言·c++
hold?fish:palm14 小时前
40 二叉树的直径
c++·leetcode
解决小子14 小时前
【虚幻引擎】【C++】【GAS框架】构建角色基类、属性集、数值钳制
c++·笔记·游戏引擎·虚幻·gas·能力系统
lunar_coder15 小时前
【C++】如何解决智能指针的析构函数,如何实现shared_ptr的引用计数以及解决shared_ptr的循环引用
c++·1024程序员节
白白白小纯16 小时前
C++进阶.多态
c++
凯瑟琳.奥古斯特17 小时前
力扣1016高效解法:剪枝优化技巧
开发语言·c++·算法·leetcode·职场和发展
xiangyun6117 小时前
C++ priority_queue 底层:手撕二叉堆与 Top K 问题
c++·算法·面试·stl·1024程序员节
坤坤子吖18 小时前
C++继承:友元、静态成员、多继承与组合
开发语言·c++·笔记·学习·1024程序员节
qz_Serene18 小时前
练习算法题:双指针 -cpp
c++·算法·leetcode·1024程序员节