在本程序中,定义了一个imread()函数,用于读取“.vts”文件,第一个参数为文件路径,第二个参数为输出对象,可以输出为tkStructuredGrid型对象,也可以输出为vtkActor型对象。

同时还定义了Window类,该类可以直接添加并显示actor对象。

下面是imread()函数的定义:

/**********************【定义数据读入函数imread,begin】*********************/
/**1.1、读取.vts型文件,输出vtkStructuredGrid型对象sgrid**/
void imread(const char* path_buffer,vtkSmartPointer<vtkStructuredGrid> sgrid)
{
/*将文件路径分解为:‘盘符(drive)’,‘路径(dir)’,‘文件名(fname)’,‘扩展名(ext)’*/
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
_splitpath( path_buffer, drive, dir, fname, ext ); string extName=ext;
string className=sgrid->GetClassName();
vtkSmartPointer<vtkXMLStructuredGridReader> reader=vtkSmartPointer<vtkXMLStructuredGridReader>::New();
if(className=="vtkStructuredGrid"&&extName==".vts")
{
reader->SetFileName(path_buffer);
reader->Update();
sgrid->ShallowCopy(reader->GetOutput()) ;
}
else
{
cout<<"The file format is different from the output type!";
}
} /**1.2、读取.vts型文件,输出vtkActor型对象actor**/
void imread(const char* path_buffer,vtkSmartPointer<vtkActor> actor)
{
/*将文件路径分解为:‘盘符(drive)’,‘路径(dir)’,‘文件名(fname)’,‘扩展名(ext)’*/
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
_splitpath( path_buffer, drive, dir, fname, ext ); string extName=ext;
string className=actor->GetClassName();
vtkSmartPointer<vtkXMLStructuredGridReader> reader=vtkSmartPointer<vtkXMLStructuredGridReader>::New(); if((className=="vtkOpenGLActor"||className=="vtkActor")&&extName==".vts")
{
reader->SetFileName(path_buffer);
/*由于我们是用VTK的pipeline处理数据,所以每次加载都要更新;
在此读入文件,reader的输出将是一个有效的 structured grid data.*/
reader->Update();
vtkSmartPointer<vtkStructuredGridGeometryFilter> geometryFilter =
vtkSmartPointer<vtkStructuredGridGeometryFilter>::New();
geometryFilter->SetInputConnection(reader->GetOutputPort());
geometryFilter->Update(); // Visualize
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(geometryFilter->GetOutputPort());
actor->SetMapper(mapper);
}
else
{
cout<<"The file format is different from the output type!";
}
} /**********************【定义数据读入函数imread,end】*********************/

下面是Window函数的定义:

/************************【Window begin】********************************/
Window::Window()
{
ren1=vtkSmartPointer<vtkRenderer>::New();
ren1->SetBackground( ., ., . ); renWin=vtkSmartPointer<vtkRenderWindow>::New();
renWin->AddRenderer( ren1);
renWin->SetSize( , );
renWin->SetMultiSamples( ); iren=vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow( renWin ); camera=vtkSmartPointer<vtkCamera>::New();
// camera->SetClippingRange( 0.576398, 28.8199 );
// camera->SetFocalPoint( 0.0463079, -0.0356571, 1.01993 );
// camera->SetPosition( -2.47044, 2.39516, -3.56066 );
// camera->SetViewUp( 0.607296, -0.513537, -0.606195 );
// ren1->SetActiveCamera( camera );
}
void Window::addActor(vtkSmartPointer<vtkActor> actor)
{
ren1->AddActor(actor);
}
void Window::setBackgroundColor(float color[])
{
this->ren1->SetBackground(color[],color[],color[]);
} /************************【Window end】********************************/

下面是测试程序:

#ifndef INITIAL_OPENGL
#define INITIAL_OPENGL
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL)
VTK_MODULE_INIT(vtkInteractionStyle)
#endif #include <iostream>
using namespace std; #include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkXMLStructuredGridReader.h>
#include <vtkStructuredGridGeometryFilter.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <shape.h>
int main(int argc, char* argv[])
{
// Verify input arguments
std::string inputFilename = "D:/Qt/QtVtk/Testing/Data/multicomb_2.vts";
vtkSmartPointer<vtkActor> actor=vtkSmartPointer<vtkActor>::New();
imread(inputFilename.c_str(),actor); Window win;
win.addActor(actor);
float color[]={0.3,.,.};
win.setBackgroundColor(color);
win.show();
return ;
}

下面是程序运行结果:

从测试程序来看,主程序得到了极大的简化。

VTK中,定义imread()函数,读取“.vts"文件的更多相关文章

  1. CUDA常见问题之无法在c文件中调用cu文件中定义的函数

    当在C源文件中调用cu文件中定义的函数时,会出现undefined reference的问题,而在C++源文件中调用cu文件中定义的函数时则不会出现这个问题. 出现上述问题的原因是,nvcc编译器采用 ...

  2. 使用imread()函数读取图片的六种正确姿势

    OpenCV实践之路——使用imread()函数读取图片的六种正确姿势 opencv里的argv[1]指向的文件在哪里 测试 #include "opencv2/highgui/highgu ...

  3. js高级程序设计书中,有一句话在全局作用域中定义的函数实际上只 能被某个对象调用???

    js没有块级作用域(题外话:函数可以作为一个块级),所以我们经常使用闭包来模拟块级作用域,以避免变量或者函数因为名称相同而产生的冲突. 重点来了: 所以,如果我们把哪个变量或者函数放在全局作用域中,那 ...

  4. 在系统中使用read函数读取文件内容

    read函数(读取文件) read函数可以读取文件.读取文件指从某一个已打开地文件中,读取一定数量地字符,然后将这些读取的字符放入某一个预存的缓冲区内,供以后使用. 使用格式如下: number = ...

  5. Python连载43-current中的map函数、xml文件

    一.current中的map函数 1.map(fn,*iterable,timeout=None) (1)跟map函数相类似(2)函数需要异步执行(3)timeout代表超时时间 (4)map和sub ...

  6. php使用file函数、fseek函数读取大文件效率分析

    php读取大文件可以使用file函数和fseek函数,但是二者之间效率可能存在差异,本文章向大家介绍php file函数与fseek函数实现大文件读取效率对比分析,需要的朋友可以参考一下. 1. 直接 ...

  7. [获取行数]php读取大文件提供性能的方法,PHP的stream_get_line函数读取大文件获取文件的行数的方...

    背景: 下面是获取文件的行数的方法: 一个文件如果知道有几行的话,就可以控制获取一定的行数的数据,然后放入数据库.这样不管的读取大文件的性能,还是写入数据库的性能,都能得到很大的提高了. 下面是获取文 ...

  8. [Python Study Notes]pd.read_csv()函数读取csv文件绘图

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  9. python中os.listdir( )函数读取文件夹

    编写pytohn脚本时通常需要批处理. 列出指定目录下的所有文件/文件夹 os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表,但有个很明显的缺点,它的默认顺序不是有序的或 ...

随机推荐

  1. Linux如何将pycharm添加到桌面

    使用Ubuntu编辑器,在/usr/share/applications 目录下创建一个 Pycharm.destop的文件. sudo vim /usr/share/applications/Pyc ...

  2. mysql 主从 Last_IO_Errno错误代码说明

    Last_IO_Errno错误代码说明:  1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件 ...

  3. HDU - 6087 Rikka with Sequence (可持久化treap+倍增+重构)

    题目链接 感谢Dream_Lolita的题解,经过无数次失败的尝试之后终于AC了... 线段树是维护区间信息的强大工具,但它的形态是固定的,只支持修改和删除操作,不支持插入.反转.复制.分裂合并等操作 ...

  4. P1081 [NOIP2012]开车旅行[倍增]

    P1081 开车旅行    题面较为啰嗦.大概概括:一个数列,只能从一个点向后走,两种方案:A.走到和自己差的绝对值次小的点B.走到和自己差的绝对值最小点:花费为此差绝对值:若干询问从规定点向后最多花 ...

  5. selenium相关导入By、Keys、WebDriverWait、ActionChains,显示等待与隐式等待

    # -*- coding: utf-8 -*- """ @author: Dell Created on Tue Dec 24 12:33:56 2019 "& ...

  6. 记Springcloud Config Service整合gitlab一坑

    spring.cloud.config.server.git.uri=http://ip/***/configserver.git必须加上.git

  7. 【Winfrom-DataTable填充ListView】ListView与DataTable相互转换 .net

    1.DataTable转成ListView: 先遍历DataTable的列,把DataTable列名添加到listView列头. 然后外循环添加行,内循环添加列 跟这篇文章是一样的 http://ww ...

  8. C#定时任务之FluentScheduler

    一.业务需求 平台首页,有几个指标统计,产品不要求实时性,觉得一天更新一次可以接受. 最后决定用FluentScheduler定时执行统计,redis缓存结果. 每天晚上1点进行定时任务统计,将统计结 ...

  9. PHP基础回顾

    变量:声明变量以$开始,变量名可以用中文但是不要用:不能使用特殊字符,比如@,下划线除外:变量名区分大小写.可变变量 $a = b; $b = c; => $$a = c;  理论上$可以无限使 ...

  10. [JZOJ6244]【NOI2019模拟2019.7.1】islands【计数】【图论】

    Description n<=1e9,M,K<=100 Solution 显然任选m个港口的答案是一样的,乘个组合数即可. 考虑枚举m个港口的度数之和D 可以DP计算 记\(F_{m,D} ...