VTK(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和科学计算可视化。VTK是在三维函数库OpenGL 的基础上采用面向对象的设计方法发展起来的,它将我们在可视化开发过程中会经常遇到的细节屏蔽起来,并将一些常用的算法封装起来。它包含一个C++类库,和解释封装层,包括Tcl/Tk、Java、Python等。 采用这种架构的优势是我们能使用C++语言建立高效的算法,用其他的脚本语言(如TCL、Python)可以进行快速的开发。

  VTK中可以导入/导出或读/写多种三维格式的文件,可以参考What 3D file formats can VTK import and export? The following table identifies the file formats that VTK can read and write. Importer and Exporter classes move full scene information into or out of VTK. Reader and Writer classes move just geometry.

File Format Read Write
3D Studio vtk3DSImporter  
AVS "UCD" format vtkAVSucdReader  
Movie BYU vtkBYUReader vtkBYUWriter
Renderman   vtkRIBExporter
Open Inventor 2.0   vtkIVExporter/vtkIVWriter
CAD STL vtkSTLReader vtkSTLWriter
Fluent GAMBIT ASCII vtkGAMBITReader  
Unigraphics Facet Files vtkUGFacetReader  
Marching Cubes vtkMCubesReader vtkMCubesWriter
Wavefront OBJ   vtkOBJExporter
VRML 2.0   vtkVRMLExporter
VTK Structured Grid † vtkStructuredGridReader vtkStructuredWriter
VTK Poly Data † vtkPolyDataReader vtkPolyDataWriter
PLOT3D vtkPLOT3DReader  
CGM   vtkCGMWriter
OBJ vtkOBJReader  
Particle vtkParticleReader  
PDB vtkPDBReader  
PLY vtkPLYReader vtkPLYWriter
Gaussian vtkGaussianCubeReader  
Facet vtkFacetReader vtkFacetWriter
XYZ vtkXYZMolReader  
Ensight ‡ vtkGenericEnSightReader  

  STL格式是一种3D模型文件格式,它采用三角形离散地近似表示三维模型,目前已被工业界认为是快速成形领域的标准描述文件格式。这种文件不包括模型的材质等信息。下面的代码将读入一个STL文件将其显示在窗口中,并可以用鼠标和键盘进行一些简单的交互。

#!/usr/bin/env pythonimport vtkfilename = "myfile.stl"reader = vtk.vtkSTLReader()
reader.SetFileName(filename)mapper = vtk.vtkPolyDataMapper()mapper.SetInputConnection(reader.GetOutputPort())actor = vtk.vtkActor()
actor.SetMapper(mapper)# Create a rendering window and renderer
ren = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)# Create a renderwindowinteractor
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)# Assign actor to the renderer
ren.AddActor(actor)# Enable user interface interactor
iren.Initialize()
renWin.Render()
iren.Start()

C++版代码如下:

#include <vtkPolyData.h>
#include <vtkSTLReader.h>
#include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>int main ( int argc, char *argv[] )
{if ( argc != 2 ){cout << "Required parameters: Filename" << endl;return EXIT_FAILURE;}std::string inputFilename = argv[1];vtkSmartPointer<vtkSTLReader> reader =vtkSmartPointer<vtkSTLReader>::New();reader->SetFileName(inputFilename.c_str());reader->Update();// VisualizevtkSmartPointer<vtkPolyDataMapper> mapper =vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputConnection(reader->GetOutputPort());vtkSmartPointer<vtkActor> actor =vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);vtkSmartPointer<vtkRenderer> renderer =vtkSmartPointer<vtkRenderer>::New();vtkSmartPointer<vtkRenderWindow> renderWindow =vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =vtkSmartPointer<vtkRenderWindowInteractor>::New();renderWindowInteractor->SetRenderWindow(renderWindow);renderer->AddActor(actor);renderer->SetBackground(.3, .6, .3); // Background color green
renderWindow->Render();renderWindowInteractor->Start();return EXIT_SUCCESS;
}

View Code


  3ds文件是是Autodesk 3dsMax使用的一种二进制存储格式,VTK中可以使用vtk3DSImporter类导入3ds文件。

  vtkImporter is an abstract class that specifies the protocol for importing actors, cameras, lights and properties into a vtkRenderWindow. The following takes place: 1) Create a RenderWindow and Renderer if none is provided. 2) Call ImportBegin, if ImportBegin returns False, return 3) Call ReadData, which calls: a) Import the Actors b) Import the cameras c) Import the lights d) Import the Properties 7) Call ImportEnd

  Subclasses optionally implement the ImportActors, ImportCameras, ImportLights and ImportProperties or ReadData methods. An ImportBegin and ImportEnd can optionally be provided to perform Importer-specific initialization and termination. The Read method initiates the import process. If a RenderWindow is provided, its Renderer will contained the imported objects. If the RenderWindow has no Renderer, one is created. If no RenderWindow is provided, both a RenderWindow and Renderer will be created. Both the RenderWindow and Renderer can be accessed using Get methods.

#!/usr/bin/env python# This example demonstrates the use of vtk3DSImporter.
# vtk3DSImporter is used to load 3D Studio files.  Unlike writers,
# importers can load scenes (data as well as lights, cameras, actors
# etc.). Importers will either generate an instance of vtkRenderWindow
# and/or vtkRenderer or will use the ones you specify.import vtk# Create the importer and read a file
importer = vtk.vtk3DSImporter()
importer.ComputeNormalsOn()
importer.SetFileName("myfile.3ds")
importer.Read()# Here we let the importer create a renderer and a render window for
# us. We could have also create and assigned those ourselves like so:
# renWin = vtk.vtkRenderWindow()
# importer.SetRenderWindow(renWin)# Assign an interactor.
# We have to ask the importer for it's render window.
renWin = importer.GetRenderWindow()
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)# Set the render window's size
renWin.SetSize(500, 500)# Set some properties on the renderer.
# We have to ask the importer for it's renderer.
ren = importer.GetRenderer()
ren.SetBackground(0.1, 0.2, 0.4)iren.Initialize()
renWin.Render()
iren.Start()

参考:

VTK/Examples/Python/STLReader

vtk3DSImporter Class Reference

常见三维文件格式之STL, VRML, X3D

3D模型文件--STL,OBJ,3DS

读取3ds文件

Example demonstrates the use of vtk3DSImporter

http://public.kitware.com/pipermail/vtkusers/2011-June/068231.html

http://www.vtk.org/gitweb?p=VTK.git;a=blob;f=Examples/Rendering/Python/CADPart.py

转载于:https://www.cnblogs.com/21207-iHome/p/6429714.html

VTK中导入并显示STL、3DS文件相关推荐

  1. gitlab本地创建空文件,之后关联仓库提交文件,提交成功,但是gitlab网页中不会显示提交的文件

    问题描述: 1.我在gitlab中创建了一个空的仓库. 2.然后我在本地创建了一个空的文件夹,使之与我刚刚创建的gitlab仓库关联,用如下命令关联: $mkdir  test_file $cd te ...

  2. vtk中实现3D模型(读取文件)

    ()VTK 坐标系统及空间变换(窗口-视图分割)_mb5fed73533dfa9的技术博客_51CTO博客 VTK学习(三)VTK读取序列图像 - 灰信网(软件开发博客聚合) 读取stl文件:VTK笔 ...

  3. WINDOWS在jupyter notebook中导入opencv显示报错:most likely due to a circular import

    问题:已有python,在经过下载anacoda后欲导入opencv报错 当时思路:先把电脑中含有有opencv的文件删除,重新安装opencv 然后在CSDN中查解决方案: 经过在anaconda中 ...

  4. IDEA中导入VUE后,JS文件爆红解决办法

    原因:可能是js版本不兼容的问题,修改如下图: 点击File–>settings,搜索:JavaScript,如图修改

  5. eclipse中导入maven项目时pom文件报错

    问题: org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.a ...

  6. Three.js显示stl格式文件,html在线stl文件

    直接上示例: <!DOCTYPE html> <html> <head><meta charset=utf-8><title

  7. vtk读取3ds文件并显示c++版本

    vtk提供了很方便的函数可以读取3ds文件,这种文件是3dmax软件制作的三维物件,之前的别人的文章写了python版本的读取和显示的代码,这里翻译成了c++版本的. VTK imported and ...

  8. oracle ioc图标,如何在PPT中导入ico格式的图标

    如何在PPT中导入ico格式的图标以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如何在PPT中导入ico格式的图标 在 ...

  9. 《精通Android 实例开发》——第1章,第1.15节向Eclipse中导入Android程

    本节书摘来自异步社区<精通Android 实例开发>一书中的第1章,第1.15节向Eclipse中导入Android程,作者 陈强,更多章节内容可以访问云栖社区"异步社区&quo ...

最新文章

  1. Nginx源码分析--字符串处理
  2. 全长转录组之基因和转录本鉴定
  3. 算法设计:UNION-FIND算法实现
  4. linux高编线程-------线程的创建,终止
  5. HTTP长连接、短连接
  6. linux进程的环境变量,LINUX系统学习一(进程、MMU,环境变量、getenv、fork、getpid/ge...
  7. annotation - SuppressWarning
  8. linux命令中cd / 和 cd ~
  9. 今日新出!旷视提出One-Shot模型搜索框架的新变体
  10. php 数组元素 转 变量,php变量与数组相互转换的方法(extract与compact)
  11. Web前端性能优化优秀文章集锦
  12. Python图像处理之图片文字识别(OCR)
  13. Minimum Snap轨迹规划详解(1)轨迹规划入门
  14. 微信中的用户ID(openid和unionid)
  15. utc时间 单位换算_将UTC日期转换为毫秒
  16. AtCoder题解 —— AtCoder Beginner Contest 184 —— E - Third Avenue - BFS
  17. 一本正经的经验帖——如何使用FDM 3D打印机进行批量化生产
  18. Js 限时秒杀【倒计时】【案例】
  19. 疯狂值班表(人员跟日期生成的视图)
  20. 最全解释:Linux操作系统下的软件安装与管理详解(源码安装、rpm/dpkg、yum/apt-get安装)

热门文章

  1. 使用QHttp与C#编写的服务端交互(编译环境mingw)
  2. java 管道流的读写操作 用于两个线程之间的通信
  3. 管理博文Hive大数据-Mysql的安装和启动---大数据之Hive工作笔记0007
  4. AndroidStudio_Gradle介绍以及在androidstudio中的使用---Android原生开发工作笔记76
  5. k8s核心技术-Pod(调度策略)_影响Pod调度(污点和污点容忍)---K8S_Google工作笔记0027
  6. 持续集成部署Jenkins工作笔记0015---编辑SVN钩子程序
  7. springcloud工作笔记104---Spring中的InitializingBean接口以及afterPropertiesSet的使用
  8. STM32工作笔记0099---Pacman常用命令
  9. js工作笔记002---检测当前是不是触摸设备(移动设备)
  10. win7+vs2010+opnet教程