VTK系列文章目录

文章目录

  • VTK系列文章目录
  • 前言
  • 一、创建工程
    • 1.工程配置
    • 2.编写代码
  • 运行效果
  • 源码下载

前言

在上一节中主要记录了vtk的编译
下面说说我的第一个VTK示例:使用VTK(The Visualization Toolkit)加载stl模型

一、创建工程

1.工程配置

1.使用vs2019新建一个新的空项目
2.配置头文件,说实话,这里是最麻烦的,因为vtk他的头文件和三方头文件都是分开放的,我只有把这些头文件夹一个一个的复制到工程中,不像有些库直接一个include就搞定了。目前用到的头文件模块就是:
1.Common
2.Filters
3.Interaction
4.IO
5.Rendering
6.Utilities
另外有个问题:官方下的vtk9.2.0版本源码中的头文件不全,需要编译vtk9.2.0源码后会生成一些头文件,估计跟CMakeList配置相关,可是CMakeList语法我又看不懂,请大佬指定一下哈。所有我把编译后生成的头文件命名为:build_include,



3.配置lib路径

配置lib附加依赖项

我这里偷懒了,一股脑的把vtk所有的lib都配置进来了,其实只用配置那些用到的lib

vtkCommonCore-9.2d.lib
vtkCommonSystem-9.2d.lib
vtksys-9.2d.lib
port.lib
vtkChartsCore-9.2d.lib
vtkCommonColor-9.2d.lib
vtkCommonComputationalGeometry-9.2d.lib
vtkCommonDataModel-9.2d.lib
vtkCommonExecutionModel-9.2d.lib
vtkCommonMath-9.2d.lib
vtkCommonMisc-9.2d.lib
vtkCommonTransforms-9.2d.lib
vtkDICOMParser-9.2d.lib
vtkDomainsChemistry-9.2d.lib
vtkDomainsChemistryOpenGL2-9.2d.lib
vtkdoubleconversion-9.2d.lib
vtkexodusII-9.2d.lib
vtkexpat-9.2d.lib
vtkFiltersAMR-9.2d.lib
vtkFiltersCore-9.2d.lib
vtkFiltersExtraction-9.2d.lib
vtkFiltersFlowPaths-9.2d.lib
vtkFiltersGeneral-9.2d.lib
vtkFiltersGeneric-9.2d.lib
vtkFiltersGeometry-9.2d.lib
vtkFiltersHybrid-9.2d.lib
vtkFiltersHyperTree-9.2d.lib
vtkFiltersImaging-9.2d.lib
vtkFiltersModeling-9.2d.lib
vtkFiltersParallel-9.2d.lib
vtkFiltersParallelImaging-9.2d.lib
vtkFiltersPoints-9.2d.lib
vtkFiltersProgrammable-9.2d.lib
vtkFiltersSelection-9.2d.lib
vtkFiltersSMP-9.2d.lib
vtkFiltersSources-9.2d.lib
vtkFiltersStatistics-9.2d.lib
vtkFiltersTexture-9.2d.lib
vtkFiltersTopology-9.2d.lib
vtkFiltersVerdict-9.2d.lib
vtkfreetype-9.2d.lib
vtkGeovisCore-9.2d.lib
vtkgl2ps-9.2d.lib
vtkglew-9.2d.lib
vtkhdf5-9.2d.lib
vtkhdf5_hl-9.2d.lib
vtkImagingColor-9.2d.lib
vtkImagingCore-9.2d.lib
vtkImagingFourier-9.2d.lib
vtkImagingGeneral-9.2d.lib
vtkImagingHybrid-9.2d.lib
vtkImagingMath-9.2d.lib
vtkImagingMorphological-9.2d.lib
vtkImagingSources-9.2d.lib
vtkImagingStatistics-9.2d.lib
vtkImagingStencil-9.2d.lib
vtkInfovisCore-9.2d.lib
vtkInfovisLayout-9.2d.lib
vtkInteractionImage-9.2d.lib
vtkInteractionStyle-9.2d.lib
vtkInteractionWidgets-9.2d.lib
vtkIOAMR-9.2d.lib
vtkIOAsynchronous-9.2d.lib
vtkIOCityGML-9.2d.lib
vtkIOCore-9.2d.lib
vtkIOEnSight-9.2d.lib
vtkIOExodus-9.2d.lib
vtkIOExport-9.2d.lib
vtkIOExportPDF-9.2d.lib
vtkIOGeometry-9.2d.lib
vtkIOImage-9.2d.lib
vtkIOImport-9.2d.lib
vtkIOInfovis-9.2d.lib
vtkIOLegacy-9.2d.lib
vtkIOLSDyna-9.2d.lib
vtkIOMINC-9.2d.lib
vtkIOMovie-9.2d.lib
vtkIONetCDF-9.2d.lib
vtkIOParallel-9.2d.lib
vtkIOParallelXML-9.2d.lib
vtkIOPLY-9.2d.lib
vtkIOSegY-9.2d.lib
vtkIOSQL-9.2d.lib
vtkIOTecplotTable-9.2d.lib
vtkIOVeraOut-9.2d.lib
vtkIOVideo-9.2d.lib
vtkIOXML-9.2d.lib
vtkIOXMLParser-9.2d.lib
vtkjpeg-9.2d.lib
vtkjsoncpp-9.2d.lib
vtklibharu-9.2d.lib
vtklibxml2-9.2d.lib
vtklz4-9.2d.lib
vtklzma-9.2d.lib
vtkmetaio-9.2d.lib
vtkNetCDF-9.2d.lib
vtkogg-9.2d.lib
vtkParallelCore-9.2d.lib
vtkpng-9.2d.lib
vtkpugixml-9.2d.lib
vtkRenderingAnnotation-9.2d.lib
vtkRenderingContext2D-9.2d.lib
vtkRenderingContextOpenGL2-9.2d.lib
vtkRenderingCore-9.2d.lib
vtkRenderingFreeType-9.2d.lib
vtkRenderingGL2PSOpenGL2-9.2d.lib
vtkRenderingImage-9.2d.lib
vtkRenderingLabel-9.2d.lib
vtkRenderingLOD-9.2d.lib
vtkRenderingOpenGL2-9.2d.lib
vtkRenderingVolume-9.2d.lib
vtkRenderingVolumeOpenGL2-9.2d.lib
vtksqlite-9.2d.lib
vtktheora-9.2d.lib
vtktiff-9.2d.lib
vtkverdict-9.2d.lib
vtkViewsContext2D-9.2d.lib
vtkViewsCore-9.2d.lib
vtkViewsInfovis-9.2d.lib
vtkzlib-9.2d.lib
vtkIOExportGL2PS-9.2d.lib


4.配置dll库,放在exe同级目录下

2.编写代码


#include "vtkPolyDataMapper.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkSmartPointer.h"
#include "vtkVectorText.h"
#include "vtkAxesActor.h"
#include "vtkPlane.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkPlaneSource.h"
#include "vtkProperty.h"
#include "vtkCaptionActor2D.h"
#include "vtkSTLReader.h"
#include "vtkInteractorStyleTrackballCamera.h"#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);void loadFileWhitSTL(vtkSmartPointer<vtkRenderer> renderer)
{/*const char* path = "/home/tiger/project/YDMS/YdMedicalSystem/NailSTL/NailType01/45mm/M4.5x45_11.65.STL";*/const char* path = "Williams F1_dwg.stl";vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New();reader->SetFileName(path);reader->Update();vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputConnection(reader->GetOutputPort());vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);renderer->AddActor(actor);
}void createText(vtkSmartPointer<vtkRenderer> renderer)
{vtkSmartPointer<vtkVectorText> text = vtkSmartPointer<vtkVectorText>::New();text->SetText("21530311");text->Update();vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputConnection(text->GetOutputPort());vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);actor->SetPosition(5.0, 5.0, 30.0);actor->SetScale(10.0);actor->GetProperty()->SetPointSize(48);actor->GetProperty()->SetColor(1.0, 0.0, 0.0);renderer->AddActor(actor);
}void createAxes(vtkSmartPointer<vtkRenderer> renderer)
{//轴vtkSmartPointer<vtkAxesActor> axes = vtkSmartPointer<vtkAxesActor>::New();axes->SetTotalLength(150.0, 100.0, 50.0);axes->SetShaftType(vtkAxesActor::CYLINDER_SHAFT);//设置轴类型圆柱形状axes->SetCylinderRadius(0.01);axes->SetConeRadius(0.2);axes->GetXAxisCaptionActor2D()->SetWidth(0.02);axes->GetYAxisCaptionActor2D()->SetWidth(0.04);axes->GetZAxisCaptionActor2D()->SetWidth(0.08);renderer->AddActor(axes);
}//底板
void createGround(vtkSmartPointer<vtkRenderer> renderer)
{vtkSmartPointer<vtkPlaneSource> plane = vtkSmartPointer<vtkPlaneSource>::New();plane->SetXResolution(50);plane->SetYResolution(50);plane->SetCenter(0, 0, 0);plane->SetNormal(0, 0, 1);vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputConnection(plane->GetOutputPort());vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);actor->SetScale(300.0, 300.0, 1.0);actor->GetProperty()->SetRepresentationToWireframe();renderer->AddActor(actor);
}int main(int, char* [])
{vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();renderWindowInteractor->SetRenderWindow(renderWindow);vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();renderWindowInteractor->SetInteractorStyle(style);loadFileWhitSTL(renderer);createText(renderer);createAxes(renderer);createGround(renderer);renderer->SetBackground(0.2, 0.2, 0.2);renderer->ResetCameraClippingRange();renderWindow->Render();renderWindowInteractor->Initialize();renderWindowInteractor->Start();return EXIT_SUCCESS;
}

运行效果

源码下载

源码下载地址

VTK(The Visualization Toolkit)加载stl模型相关推荐

  1. Three.js加载.stl格式模型

    .stl格式模型加载 本文是Three.js电子书的14.2节 基本所有的三维软件都支持导出.stl格式的三维模型文件,.stl格式的三维模型不包含材质Material信息,只包含几何体顶点数据的信息 ...

  2. threejs加载obj模型_Vulkan编程指南(章节31-载入模型)

    章节31 载入模型 介绍 本章节我们将会渲染一个带有纹理的三维模型. 库 我们使用tinyobjloader库来从OBJ文件加载顶点数据.tinyobjloader库是一个简单易用的单文件OBJ加载器 ...

  3. Android加载3D模型的学习笔记

    篇章目标要点 3D模型的使用最早是在游戏领域广泛使用的,随着技术的发展,其他工业领域也在逐步引入3D相关的技术设计.本文是结合初学3D模型的读取和显示总结的心得,本文作为序列的第一篇介绍,重点会阐述3 ...

  4. 在C++中加载TorchScript模型

    在C++中加载TorchScript模型 本教程已更新为可与PyTorch 1.2一起使用 顾名思义,PyTorch的主要接口是Python编程语言.尽管Python是合适于许多需要动态性和易于迭代的 ...

  5. xBIM 实战01 在浏览器中加载IFC模型文件

    系列目录    [已更新最新开发文章,点击查看详细]  一.创建Web项目 打开VS,新建Web项目,选择 .NET Framework 4.5  选择一个空的项目 新建完成后,项目结构如下: 二.添 ...

  6. Python时间序列模型推理预测实战:时序推理数据预处理(特征生成、lstm输入结构组织)、模型加载、模型预测结果保存、条件判断模型循环运行

    Python时间序列模型推理预测实战:时序推理数据预处理(特征生成.lstm输入结构组织).模型加载.模型预测结果保存.条件判断模型循环运行 目录

  7. PaddleOCR加载chinese_ocr_db_crnn_modile模型进行中英文混合预测(Http服务)实践

    1. 环境搭建 参考:<PaddleOCR加载chinese_ocr_db_crnn_server模型进行中英文混合预测(命令行)实践> 2. 服务端部署 hub serving star ...

  8. threejs加载3D模型例子

    加载3D模型 首先要引入ColladaLoader加载器,Collada是一个3D模型交换方案,即不同的3D模型可以通过Collada进行相互转换,言外之意,threejs可以使用Collada将3D ...

  9. 加载tf模型 正确率很低_深度学习模型训练全流程!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:黄星源.奉现,Datawhale优秀学习者 本文从构建数据验证集. ...

最新文章

  1. 一文全面解析 Postman 工具
  2. 多视图立体几何PatchMatchStereo:DSI与Cost Volume
  3. 字节跳动Java高级工程师:java队列实现停车场出入
  4. docker 删除默认连接_Net Core 中 Docker应用
  5. GPU 加速下的图像处理
  6. caffe修改hdf5的datalayer
  7. android 去掉蓝牙传输文件功能_iPhone还在用蓝牙传输照片?这个功能更好用还快哟,了解一下...
  8. 基于深度卷积神经网络的目标检测研究综述
  9. Hadoop节点热拔插
  10. python中df占位符_PYTHON 中的%s %占位符用法
  11. Struts2框架学习之一:Hello World程序
  12. SparkSQL Catalog的作用和访问Hive元数据信息
  13. Linux下Openssl的安装
  14. MySQL 09 流程控制、自定义函数
  15. 第十六届“振兴杯”计算机网络管理员赛项理论参考题库(2)多选
  16. 经典爱情诗《四月的纪念》 刘擎/王嫣、乔榛/丁建华双版朗诵
  17. Linux之IFS间隔符、C编程、gdb调试
  18. android 读写文件 简书,Android写入txt文件并读取
  19. KSO-.NET 6 中的新增功能
  20. strip指令——减小文件的大小(给文件脱衣服)

热门文章

  1. html设计动画小黄人,【二次元的CSS】—— 用 DIV + LESS 做一个小黄人构造器
  2. linux 模拟arm,拒绝开发板, 用 SkyEye 就可以模拟 ARM Linux!
  3. PHP最好的语言的梗的笑话
  4. 基于C#实现的《勇士返乡》游戏设计
  5. laravel中guard是什么
  6. tkinter 利器--------pmw模块,里面有很多造好的轮子,有详细的demo
  7. 相册里的WEB3 Festivals香港记忆
  8. Mysql 8.0 安装详细教程、问题处理、卸载(亲测可用)
  9. android 自定义文件夹管理器
  10. 图片处理 毛玻璃效果