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();
相关推荐
legend_jz3 分钟前
【Linux】线程控制
linux·服务器·开发语言·c++·笔记·学习·学习方法
嘿BRE13 分钟前
【C++】几个基本容器的模拟实现(string,vector,list,stack,queue,priority_queue)
c++
ö Constancy1 小时前
c++ 笔记
开发语言·c++
fengbizhe1 小时前
笔试-笔记2
c++·笔记
徐霞客3201 小时前
Qt入门1——认识Qt的几个常用头文件和常用函数
开发语言·c++·笔记·qt
fpcc1 小时前
redis6.0之后的多线程版本的问题
c++·redis
螺旋天光极锐斩空闪壹式!2 小时前
自制游戏:监狱逃亡
c++·游戏
工业3D_大熊3 小时前
3D可视化引擎HOOPS Luminate场景图详解:形状的创建、销毁与管理
java·c++·3d·docker·c#·制造·数据可视化
暮色_年华3 小时前
Modern Effective C++ Item 11:优先考虑使用deleted函数而非使用未定义的私有声明
c++
流星白龙3 小时前
【C++习题】10.反转字符串中的单词 lll
开发语言·c++