VTK Chart坐标轴

本文介绍使用VTK库创建2D图表的过程。通过设置背景颜色、窗口尺寸等参数,并利用vtkChartXY类添加散点图,展示了如何绘制包含余弦、正弦及其组合的数据点。文中还详细介绍了如何为不同数据集配置颜色、宽度和标记样式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vtk绘制出来到坐标轴着实挺清秀的:

#include "mainwindow.h"
#include "QApplication"

#include "vtkAutoInit.h"
#if  VTK_MAJOR_VERSION >=7
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle)
VTK_MODULE_INIT(vtkRenderingFreeType)
VTK_MODULE_INIT(vtkRenderingContextOpenGL2)
#endif

#include "vtkVersion.h"
#include "vtkSmartPointer.h"
#include "vtkChartXY.h"
#include "vtkContextScene.h"
#include "vtkContextView.h"
#include "vtkFloatArray.h"
#include "vtkPlotPoints.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkTable.h"


int main(int argc, char *argv[])
{
    // Set up a 2D scene, add an XY chart to it
     vtkSmartPointer<vtkContextView> view = vtkSmartPointer<vtkContextView>::New();
     view->GetRenderer()->SetBackground(1.0, 1.0, 1.0);
     view->GetRenderWindow()->SetSize(400, 300);
     vtkSmartPointer<vtkChartXY> chart = vtkSmartPointer<vtkChartXY>::New();
     view->GetScene()->AddItem(chart);
     chart->SetShowLegend(true);

     // Create a table with some points in it...
     vtkSmartPointer<vtkTable> table = vtkSmartPointer<vtkTable>::New();

     vtkSmartPointer<vtkFloatArray> arrX = vtkSmartPointer<vtkFloatArray>::New();
     arrX->SetName("X Axis");
     table->AddColumn(arrX);

     vtkSmartPointer<vtkFloatArray> arrC = vtkSmartPointer<vtkFloatArray>::New();
     arrC->SetName("Cosine");
     table->AddColumn(arrC);

     vtkSmartPointer<vtkFloatArray> arrS = vtkSmartPointer<vtkFloatArray>::New();
     arrS->SetName("Sine");
     table->AddColumn(arrS);

     vtkSmartPointer<vtkFloatArray> arrT = vtkSmartPointer<vtkFloatArray>::New();
     arrT->SetName("Sine - Cosine");
     table->AddColumn(arrT);

    // Test charting with a few more points...
    int numPoints = 40;
    float inc = 7.5 / (numPoints-1);
    table->SetNumberOfRows(numPoints);
    for (int i = 0; i < numPoints; ++i)
    {
       table->SetValue(i, 0, i * inc);
       table->SetValue(i, 1, cos(i * inc) + 0.0);
       table->SetValue(i, 2, sin(i * inc) + 0.0);
       table->SetValue(i, 3, sin(i * inc) - cos(i * inc));
    }
     // Add multiple scatter plots, setting the colors etc
     vtkPlot *points = chart->AddPlot(vtkChart::POINTS);
   #if VTK_MAJOR_VERSION <= 5
     points->SetInput(table, 0, 1);
   #else
     points->SetInputData(table, 0, 1);
   #endif
     points->SetColor(0, 0, 0, 255);
     points->SetWidth(1.0);
     vtkPlotPoints::SafeDownCast(points)->SetMarkerStyle(vtkPlotPoints::CROSS);
     points = chart->AddPlot(vtkChart::POINTS);
   #if VTK_MAJOR_VERSION <= 5
     points->SetInput(table, 0, 2);
   #else
     points->SetInputData(table, 0, 2);
   #endif
     points->SetColor(0, 0, 0, 255);
     points->SetWidth(1.0);
     vtkPlotPoints::SafeDownCast(points)->SetMarkerStyle(vtkPlotPoints::PLUS);
     points = chart->AddPlot(vtkChart::POINTS);
   #if VTK_MAJOR_VERSION <= 5
     points->SetInput(table, 0, 3);
   #else
     points->SetInputData(table, 0, 3);
   #endif
     points->SetColor(0, 0, 255, 255);
     points->SetWidth(1.0);
     vtkPlotPoints::SafeDownCast(points)->SetMarkerStyle(vtkPlotPoints::CIRCLE);
     // finally render the scene
     view->GetRenderWindow()->SetMultiSamples(0);
     view->GetInteractor()->Initialize();
     view->GetInteractor()->Start();
     return EXIT_SUCCESS;
}

sleep;gnome-screenshot截图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值