在本程序中,定义了一个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. 用xshell连接l自己的inux

    有时候连接会提示失败(当然确保账号密码没错),这里需要安装一个服务,ssh服务器 1)ubuntu安装ssh服务器 sudo apt-get install openssh-server 2)出现问题 ...

  2. 在table中加入<hr />标签为什么横线会跑到上边?

    这是我今天在写页面的时候发现的一个问题,万能的百度已经帮我找到答案啦!!!在此分享给你们吧 table>[caption|thead>tr|tbody>tr]>[th|td] ...

  3. 【Layui】当Layui数据表格和Layui下拉框组合时发生的问题

    关于Layui数据表格用下拉框显示问题 如图所示 可以看见当点击下拉框时下拉选项被下拉框覆盖 此时你需要在数据表格渲染完成时的回调内添加如下代码即可 $(".sel_scrq"). ...

  4. jquery grid 显示隐藏列

    colModel: [ { label: '列名称', name: 'columnName', width: 100, align: 'left' } ] function showData() { ...

  5. 修改 mvc webapi 默认返回 json 格式

    web api 默认的已 xml 格式返回数据 现在开发一般都是以 json 格式为主 下面配置让 webapi 默认返回 json ,在需要返回 xml 时只需要加一个查询参数 datatype=x ...

  6. Java多线程和并发(十二),Java线程池

    目录 1.利用Executors创建线程的五种不同方式 2.为什么要使用线程池 3.Executor的框架 4.J.U.C的三个Executor接口 5.ThreadPoolExecutor 6.线程 ...

  7. sqli-labs(4)

    sqli-libs(4)通关过程 0x01爱之初体验 首先我们进行注入试探 发现我们的单引号 回显事正常的 双引号回显反而是错误的 查看源码我们发现 多了一个给id赋值的语句 我们在php上面执行一下 ...

  8. [CSP-S模拟测试]:装饰(状压DP)

    题目传送门(内部题114) 输入格式 第一行一个正整数$n$. 接下来一行$n-1$个正整数,第$i$个数为$f_{i+1}$. 接下来一行$n$个数,若第$i$个数为$0$则表示林先森希望$i$号点 ...

  9. @ControllerAdvice 全局异常处理

    使用@ControllerAdvice 定义 全局异常处理 package com.app; import java.io.IOException; import java.io.PrintWrite ...

  10. GC详解

    GC,即就是Java垃圾回收机制.目前主流的JVM(HotSpot)采用的是分代收集算法.与C++不同的是,Java采用的是类似于树形结构的可达性分析法来判断对象是否还存在引用.即:从gcroot开始 ...