VTK的三维模型保存、读取之保存为vtk格式
来源:互联网 发布:好八字是什么 知乎 编辑:程序博客网 时间:2024/06/06 05:33
基于VTK的模型构建以后经常需要对模型进行保存,当然我不想保存为一个二维的图像格式
因为那样重新读取太过复杂,如果能将之进行保存为模型类似的格式那么以后就只需要直接读取即可。
三维模型格式应该较多,百度、谷歌都没有找到较多的范例,不过还是有可使用的,这里只介绍.vtk 格式。
首先介绍一下本文中使用的方法所用到的主要的类:
vtkDataWriter
vtkPolyDataWriter is a source object that writes ASCII or binary polygonal data files in vtk format. See text for format details.
http://www.vtk.org/doc/nightly/html/classvtkPolyDataWriter.html#details
vtkDataReader
http://www.vtk.org/doc/nightly/html/classvtkDataReader.html
具体介绍请看上面链接。
整个源代码如下:
#include "vtkSmartPointer.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkDICOMImageReader.h"
#include "vtkPolyDataWriter.h"
#include "vtkContourFilter.h"
#include "vtkPolyDataReader.h"
#include "vtkPolyDataMapper.h"
#include "vtkCamera.h"
void build3DView()
{
vtkSmartPointer<vtkRenderer> aRenderer =
vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renWin =
vtkSmartPointer<vtkRenderWindow>::New();
renWin->AddRenderer(aRenderer);
vtkSmartPointer<vtkRenderWindowInteractor> iren =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(renWin);
vtkDICOMImageReader *dicomReader = vtkDICOMImageReader::New();
dicomReader->SetDataByteOrderToLittleEndian();
dicomReader->SetDirectoryName("D:\\dcm\\02");
/* vtkSmartPointer<vtkJPEGReader> dicomReader =
vtkSmartPointer<vtkJPEGReader>::New();
dicomReader->SetFilePrefix("D:\\dcm\\new\\00");
dicomReader->SetFilePattern("%s%d.dcm");
*/
dicomReader->SetDataByteOrderToLittleEndian();
//dicomReader->SetDataSpacing(1, 0.925, 1.2);
dicomReader->SetDataSpacing(1, 1, 1.4);
dicomReader->SetFileNameSliceSpacing(1);
//dicomReader->SetDataExtent(0, 209, 0, 209, 0, 83);
dicomReader->SetDataExtent(0, 209, 0, 209, 0, 29);
dicomReader->Update();
vtkSmartPointer<vtkContourFilter> skinExtractor =
vtkSmartPointer<vtkContourFilter>::New();
skinExtractor->SetInputConnection(dicomReader->GetOutputPort());
skinExtractor->SetValue(0, 100); //值越大,保留的部分越少。
// VTK 保存
vtkSmartPointer<vtkPolyDataWriter> vtkWriter = vtkSmartPointer<vtkPolyDataWriter>::New();
vtkWriter->SetInput(skinExtractor->GetOutput());
vtkWriter->SetFileName("test.vtk");
vtkWriter->Write();
// Render
renWin->Render();
// Initialize the event loop and then start it.
iren->Initialize();
iren->Start();
}
void readVTKFile()
{
vtkSmartPointer<vtkRenderer> aRenderer =
vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renWin =
vtkSmartPointer<vtkRenderWindow>::New();
renWin->AddRenderer(aRenderer);
vtkSmartPointer<vtkRenderWindowInteractor> iren =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(renWin);
vtkSmartPointer<vtkPolyDataReader> vtkReader = vtkSmartPointer<vtkPolyDataReader>::New();
vtkReader->SetFileName("test.vtk");
vtkSmartPointer<vtkPolyDataMapper> skinMapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
skinMapper->SetInputConnection(vtkReader->GetOutputPort());
skinMapper->ScalarVisibilityOff(); //这样不会带颜色
vtkSmartPointer<vtkActor> skin =
vtkSmartPointer<vtkActor>::New();
skin->SetMapper(skinMapper);
vtkSmartPointer<vtkCamera> aCamera =
vtkSmartPointer<vtkCamera>::New();
aCamera->SetViewUp (0, 0, -1);
aCamera->SetPosition (0, 1, 0);
aCamera->SetFocalPoint (0, 0, 0);
aCamera->ComputeViewPlaneNormal();
aCamera->Azimuth(30.0);
aCamera->Elevation(30.0);
aCamera->Dolly(1.5);
aRenderer->AddActor(skin);
aRenderer->SetActiveCamera(aCamera);
aRenderer->ResetCamera ();
aRenderer->SetBackground(.2, .3, .4);
aRenderer->ResetCameraClippingRange ();
renWin->Render();
iren->Initialize();
iren->Start();
}
void main() //PS: 由于本人是使用分开的独立两个函数因此需要先调用build函数构建模型待生成了vtk格式文件后再读取。
{
//build3DView();//读入序列图像提取轮廓构建模型并保存
readVTKFile();//读取文件,读入以后也需要做构建平面之类的基本工作,以便显示
}
- VTK的三维模型保存、读取之保存为vtk格式
- VTK读取序列的Dicom医学图片,用Marchingcube进行重建,并保存为obj文件
- VTK生成分布在球内部或者表面的三维点云坐标,将点云坐标保存为txt文本文档
- Vtk读取并显示保存图像
- VTK:读取obj文件,使用vtkMassProperties计算obj三维模型的体积和面积
- VTK读取三维点云图并显示
- VTK中迭代器的使用,并将指针中的图像保存
- 【VTK】VTK中设置默认的三维切片方向
- VTK之基于Qt的VTK应用程序
- VTK序列图像的读取
- VTK序列图像的读取
- VTK .gml文件的读取
- VTK序列图像的读取
- VTK序列图像的读取
- VTK 三维轮廓等值面的提取
- VTK生成球并将其导出为obj三维格式,可在Meshlab中提取三维点云
- PCL Save VTK File With Texture Coordinates 使用PCL库来保存带纹理坐标的VTK文件
- VTK三维测量
- leetcode 113: Jump Game
- 智遥工作代理问题解析
- js Html页面控件的获取值
- 给IT新人的15个建议:苦逼程序员的辛酸反省与总结 - 博客 - 伯乐在线
- PowerDesigner 学习系列 导出表到word
- VTK的三维模型保存、读取之保存为vtk格式
- iOS实现截屏 并合适保存
- [转载]获取html绝对坐标 屏蔽Ctrl+V 按回车键直接登录 js代码 .
- JavaScript中关于绑定事件句柄问题
- 净(负)荷概念,osi封装
- 九度OJ 清华12真题之广度优先搜索之《玛雅密码》
- 协同过滤介绍和简单推荐系统的实现
- linux minicom配置
- 自动取款机