在本程序中,定义了一个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. usb四种传输模式bulk

    当USB插入USB总线时,USB控制器会自动为该USB设备分配一个数字来标示这个设备.另外,在设备的每个端点都有一个数字来表明这个端点.USB设备驱动向USB控制器驱动请求的每次传输被称为一个事务(T ...

  2. 第三次java测验2

    package java3; public class Suiji { public long a=12345L;//定义long类型的a,b,c变量 public long c=12345L; pu ...

  3. poj1830 开关问题[高斯消元]

    其实第一反应是双向BFS或者meet in middle,$2^{14}$的搜索量,多测,应该是可以过的,但是无奈双向BFS我只写过一题,已经不会写了. 发现灯的操作情况顺序不影响结果,因为操作相当于 ...

  4. 胡昊—第6次作业—static关键字、对象

    #题目1:编写一个类Computer,类中含有一个求n的阶乘的方法.将该类打包,并在另一包中的Java文件App.java中引入包,在主类中定义Computer类的对象,调用求n的阶乘的方法(n值由参 ...

  5. 【Linux学习四】Linux下Vim命令操作

    1.Vim介绍 Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性. 第一阶段通过vimtutor的学习,加强vim的熟练度 1.1光标移动 hjkl左 ...

  6. Dubbo配置文件详解

    为新项目练手,把项目中用到的web service.RMI的服务改用Dubbo+Zookeeper+Spring,网上找到几篇不错的配置详解 1.此篇博文主要从以下几种配置方式来讲 XML 配置文件方 ...

  7. QT5 Even 事件

    事件的引入: 实现功能: 1.点击button 文本框两字改变成button被按下;很简单的在button上转到槽对lineEdit->setTest()设置即可; void myWidget: ...

  8. Linux—查看路由

    下面那些命令可以用来查看Linux主机的默认路由() A.route B.ifconfig C.ping D.netstat 分析: A.route命令用来显示目前本机路由表的内容,并且还可以针对路由 ...

  9. (转载)java高并发:CAS无锁原理及广泛应用

    java高并发:CAS无锁原理及广泛应用   版权声明:本文为博主原创文章,未经博主允许不得转载,转载请注明出处. 博主博客地址是 http://blog.csdn.net/liubenlong007 ...

  10. Spring Boot教程(二十五)返回JSON格式

    在上述例子中,通过@ControllerAdvice统一定义不同Exception映射到不同错误处理页面.而当我们要实现RESTful API时,返回的错误是JSON格式的数据,而不是HTML页面,这 ...