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();
}
最终生成曲线图如下: