使用vtk读取.csv文件生成曲线图

vtk不光能读取仿真计算结果数据,比如openfoam、或者fluent的计算结果,也能读入.csv或者.txt文件,读入.csv或者.txt文件使用的类是vtkDelimitedTextReader;曲线展示使用的类是vtkChartXY,并且可以设置曲线的线宽、线型,以及线的标识等;现使用vtk读入.csv文件,并对读入的结果曲线图进行展示。

具体代码如下:

#include "stdafx.h"

#include "vtkChartXY.h"
#include "vtkContextMouseEvent.h"
#include "vtkContextView.h"
#include "vtkContextScene.h"
#include "vtkFloatArray.h"
#include "vtkDoubleArray.h"
#include "vtkIntArray.h"
#include "vtkNew.h"
#include "vtkPlot.h"
#include "vtkPlotPoints.h"
#include "vtkAxis.h"
#include "vtkPlotLine.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkTable.h"
#include "vtkRegressionTestImage.h"
#include "vtkUnsignedCharArray.h"
#include "vtkVector.h"
#include "vtkDelimitedTextReader.h"
#include <vtkAutoInit.h>

#define VTK_CREATE(type, name) \
  vtkSmartPointer<type> name = vtkSmartPointer<type>::New()

VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkRenderingContextOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);

int main(int, char *[])
{
	VTK_CREATE(vtkDelimitedTextReader, csvReader);//新建读取csv文件指针
	VTK_CREATE(vtkChartXY,chartXY);
	
	VTK_CREATE(vtkContextView,contextView);
	contextView->GetRenderWindow()->SetSize(400, 300);
	contextView->GetScene()->AddItem(chartXY);
	csvReader->SetHaveHeaders(1);
	csvReader->SetMergeConsecutiveDelimiters(0);
	csvReader->SetDetectNumericColumns(1);
	csvReader->SetStringDelimiter(1);
	csvReader->SetFieldDelimiterCharacters(",");//设置分割标识符为,
	csvReader->SetFileName("C://Users//Administrator//Desktop//csvquxian.csv");//设置读取csv文件路径
	csvReader->Update();

	vtkTable* tableData = csvReader->GetOutput();
	int columnNumber = tableData->GetNumberOfColumns();

	vtkPlot *line = chartXY->AddPlot(vtkChart::LINE);//设置添加曲线类型为折线
	
	for (int i = 1; i < columnNumber; ++i)
	{
		line->SetInputData(tableData,0,i);
		vtkPlotPoints* point = vtkPlotPoints::SafeDownCast(line);
		point->SetMarkerStyle(vtkPlotPoints::CIRCLE);//设置曲线为加圆点标识
		line = chartXY->AddPlot(vtkChart::LINE);
	}
	chartXY->SetShowLegend(1);
	chartXY->GetAxis(0)->SetLogScale(1);
	contextView->GetRenderWindow()->Render();

	contextView->GetRenderWindow()->SetMultiSamples(0);
	contextView->GetInteractor()->Initialize();
	contextView->GetInteractor()->Start();

}

最终生成曲线图如下:

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值