向vtkChartXY添加vtkPlot类及其子类崩溃的问题解决

vtk提供了vtkChart模块,可以显示二维散点图和曲线图等。实际开发中,向vtkChart添加vtkPlot类及其子类对象时,程序运行会奔溃,如下代码向vtkChart添加vtkPlotLine类对象,则崩溃:

#include<vtkTable.h>
#include<vtkRenderer.h>
#include<vtkRenderWindow.h>
#include<vtkRenderWindowInteractor.h>
#include<vtkPlotLine.h>
#include<vtkFloatArray.h>
#include<vtkChartXY.h>
#include<vtkContextActor.h>
#include<vtkActor.h>
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle)
VTK_MODULE_INIT(vtkRenderingFreeType)

int main()
{
    // 新建一个表格
    vtkNew<vtkTable> dataTable;

    // 添加两个列(变量)
    vtkNew <vtkFloatArray> x;
    x->SetName("X");
    dataTable->AddColumn(x);

    vtkNew <vtkFloatArray> y;
    y->SetName("Y");
    dataTable->AddColumn(y);

    // 添加十个行
    for (int i = 0; i < 10; i++)
    {
        // 在表格中插入新行
        dataTable->InsertRow(i);

        // 向每行中添加数据
        double rowData[] = { std::cos(i), std::sin(i)};
        dataTable->SetValue(i, 0, rowData[0]);
        dataTable->SetValue(i, 1, rowData[1]);
    }

    // 可视化表格数据
    vtkNew<vtkPlotLine>line;
    line->SetInputData(dataTable, "X", "Y");

    vtkNew<vtkChartXY> chart;
    chart->AddPlot(line);
    chart->SetAutoSize(false);
    chart->SetSize(vtkRectf(0.0, 0.0, 320, 220));

    vtkNew<vtkContextScene> chartScene;
    vtkNew<vtkContextActor> chartActor;
    vtkNew<vtkRenderWindow> renderWindow;
    vtkNew<vtkRenderWindowInteractor> interactor;
    vtkNew<vtkRenderer>renderer;

    renderWindow->AddRenderer(renderer);
    interactor->SetRenderWindow(renderWindow);

    renderer->AddActor(chartActor);
    chartScene->SetRenderer(renderer);
    chartScene->AddItem(chart);
    chartActor->SetScene(chartScene);
    renderWindow->Render();
    interactor->Initialize();
    interactor->Start();

    return EXIT_SUCCESS;
}

运行奔溃如下:

解决该问题的方法如下:

在代码顶部加入如下一句代码:

VTK_MODULE_INIT(vtkRenderingContextOpenGL2)

 如果上面还不能解决问题,则打开CMake (cmake-gui),找到 VTK_MODULE_ENABLE_VTK_RenderingContextOpenGL2 选项,将默认的default改为YES,如下:

重新 Configure、Generate,编译后,库中就会有 vtkRenderingContextOpenGL2 文件,运行 VTK_MODULE_INIT(vtkRenderingContextOpenGL2) 之后,可以正常跑 Plotting 的例子。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值