首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在QVTKWidget中创建VTK图表

如何在QVTKWidget中创建VTK图表
EN

Stack Overflow用户
提问于 2016-11-30 04:40:11
回答 2查看 1.3K关注 0票数 0

我尝试了2个小时,用vtk创建了一个简单的图表,但没有成功。它不会呈现任何内容,并且我无法调用view->getRenderer () ->render ()函数。它会导致一个异常。

到目前为止我所理解的是:

代码语言:javascript
复制
vtkContextView* view = vtkContextView::New ();
QVTKWidget*  widget = new QVTKWidget (); 
widget->setRenderWindow (view->getRenderWindow ());

创建图表并添加后...视图->getRenderer ()->render ();

我使用的是带有vs15的vtk 7.1,qt 5.7。

我也试图在互联网上找到一个完整的例子,但我没有找到任何完整的例子。

谁能举例说明如何使用qt创建这样的vtk图表?

EN

回答 2

Stack Overflow用户

发布于 2017-03-02 21:11:53

根据this discussion on the vtk mailing list的说法,小部件和视图可以像这样连接:

代码语言:javascript
复制
widget->SetRenderWindow(view->GetRenderWindow());
view->SetInteractor(widget->GetInteractor());

看起来你错过了第二行。请参阅下面的完整示例。

代码语言:javascript
复制
#include <QtWidgets>

#include <QVTKWidget.h>
#include <vtkSmartPointer.h>
#include <vtkDoubleArray.h>
#include <vtkChartXY.h>
#include <vtkTable.h>
#include <vtkPlot.h>
#include <vtkContextView.h>
#include <vtkContextScene.h>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    // Prepare plot data

    auto table = vtkSmartPointer<vtkTable>::New();
    table->AddColumn(vtkSmartPointer<vtkDoubleArray>::New());
    table->AddColumn(vtkSmartPointer<vtkDoubleArray>::New());
    table->GetColumn(0)->SetName("X");
    table->GetColumn(1)->SetName("Y");

    table->SetNumberOfRows(100);
    for(int i = 0; i < 100; ++i)
    {
        table->SetValue(i, 0, i);
        table->SetValue(i, 1, i*i);
    }

    // Create chart, view and widget

    auto chart = vtkSmartPointer<vtkChartXY>::New();
    auto line = chart->AddPlot(vtkChart::LINE);
    line->SetInputData(table, 0, 1);

    auto view = vtkSmartPointer<vtkContextView>::New();
    view->GetScene()->AddItem(chart);

    auto widget = new QVTKWidget();
    view->SetInteractor(widget->GetInteractor());
    widget->SetRenderWindow(view->GetRenderWindow());
    widget->show();

    return app.exec();
}
票数 2
EN

Stack Overflow用户

发布于 2017-11-22 23:29:55

我遇到了完全相同的问题(Qt5.9,VTK7.1),stfnp的解决方案对我不起作用。真正起作用的是与问题的源代码有点相反的方法,即:

代码语言:javascript
复制
view->SetRenderWindow(widget->GetRenderWindow());

而不是

代码语言:javascript
复制
widget->setRenderWindow(view->getRenderWindow ());

这对我来说似乎更自然(要求视图在小部件提供的render窗口中呈现)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40875368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档