vtk9.3 配置 visual studio 2019 运行环境 和运行实例详解
(1)包含文件配置:
项目--属性--VC++目录,在包含目录中把include文件夹的地址加进去,一直要到下一级 vtk-9.3目录下,

小知识: 在Visual Studio 2019中运行项目时,如果项目中使用了第三方库,需要配置VC++目录中的包含目录,将第三方库的include文件夹地址加入其中。这是因为第三方库通常包含了一些头文件,这些头文件包含了库的声明和定义,如果不将其包含在项目中,编译器将无法找到这些头文件,导致编译错误。
通过在项目属性中配置VC++目录,将第三方库的include文件夹地址加入其中,可以告诉编译器在编译项目时去哪里查找这些头文件,从而解决编译错误并成功使用第三方库。这样配置可以确保项目能够正确地引用和使用第三方库的功能,使得项目的开发和运行更加顺利和高效。
(2) 在库目录中,把lib文件夹的地址加进去:
小知识:
在Visual Studio 2019中运行项目时,如果项目中使用了第三方库,需要配置VC++目录中的库目录,将第三方库的lib文件夹地址加入其中。这是因为第三方库通常包含了编译后的库文件(.lib文件),这些库文件包含了库的实现代码和函数定义。
通过在项目属性中配置VC++目录,将第三方库的lib文件夹地址加入其中,可以告诉链接器在链接项目时去哪里查找这些库文件,从而成功地将第三方库的功能链接到项目中。如果不将库目录配置正确,链接器将无法找到相应的库文件,导致链接错误和无法正常运行项目。
因此,配置库目录是确保项目能够正确链接并使用第三方库的关键步骤,使得项目的开发和运行更加顺利和高效。
(3) 然后在 链接器--输入--附加依赖项中加入静态库 lib的依赖项:

小知识:
在Visual Studio 2019中运行项目时,如果项目中使用了第三方库的静态库(.lib文件),需要在链接器的输入中添加这些静态库的依赖项。这是因为静态库包含了库的实现代码和函数定义,而在链接阶段需要将这些代码和函数链接到项目中。
通过在项目属性中配置链接器的输入,添加静态库的依赖项,可以告诉链接器在链接项目时需要使用哪些静态库,从而成功地将第三方库的功能链接到项目中。如果不添加静态库的依赖项,链接器将无法找到相应的静态库,导致链接错误和无法正常运行项目。
因此,配置静态库的依赖项是确保项目能够正确链接并使用第三方库的关键步骤,使得项目的开发和运行更加顺利和高效。
小知识:
那么为什么?: 配置了:项目--属性--VC++目录,还要配置:链接器--输入--附加依赖项中加入静态库 lib的依赖项
回答: 配置了项目属性中的VC++目录,将库目录中的lib文件夹的地址加入后,可以让编译器在编译时找到第三方库的头文件(.h文件),以便正确识别和编译项目中对第三方库的引用。
然而,仅仅配置了VC++目录并不能告诉链接器在链接时需要使用哪些静态库。因此,需要在链接器的输入中添加静态库的依赖项,以告诉链接器在链接项目时需要使用哪些静态库,从而成功地将第三方库的功能链接到项目中。
总结而言,配置VC++目录可以让编译器找到第三方库的头文件,而配置链接器的输入可以告诉链接器在链接时需要使用哪些静态库。这两个步骤结合起来,能够确保项目能够正确链接并使用第三方库的功能。
(4)copy 一份例子看是否可以运行
#include "cylinderExaple.h"#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);#include <vtkSmartPointer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkCylinderSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
int main(int argc, char* argv) {/**(1) vtkCylinderSource该类派生自 vtkPolyDataAlgorithm。顾名思义,vtkCylinderSource 生成的数据类型就是vtkPolyData,它主要是生成一个中心在渲染场景原点的柱体,柱体的长轴沿着Y轴,柱体的高度、截面半径等都可以任意指定。vtkCylinderSource::SetHeight():设置柱体的高。vtkCylinderSource:SetRadius():设置柱体横截面的半径。vtkCylinderSource::SetResolution(): 设置柱体横截面的等边多边形的边数。转动一下柱体,然后数一数柱体横截面有多少条边,应该就能明白这个参数所表示的意思。**/vtkSmartPointer<vtkCylinderSource> cylinder = vtkSmartPointer<vtkCylinderSource>::New();cylinder->SetHeight(3.0);cylinder->SetRadius(1.0);cylinder->SetResolution(10);/**(2)vtkPolyDataMapper该类用于渲染多边形几何数据 (vtkPolyData),派生自类vtkMapper,将输入的数据转换为几何图元(点、线、多边形)进行染。vtkPolyDataMapper::SetInputConnection();VTK可视化管线的输入数据接口,对应的可视化管线的输出数据接口为 GetOutputPort();VTK 5.0之前的版本使用 SetInput0和 GetOutput0)作为输入输出接口,VTK5X版本保留了对这两个接口的支持。**/vtkSmartPointer<vtkPolyDataMapper> cylinderMapper = vtkSmartPointer<vtkPolyDataMapper>::New();cylinderMapper->SetInputConnection(cylinder->GetOutputPort());/**(3) vtkActor该类派生自 vtkProp 类,渲染场景中数据的可视化表达通过 vtkProp 的子类负责。比如该示例要渲染一个柱体,柱体的数据类型是 vtkPolyData,数据要在场景中渲染时,不是直接把数据加入渲染场景,而是以 vtkProp 的形式存在于染场景中。三维空间中渲染对象最常用的vtkProp 子类有 vtkActor (表达场景中的几何数据)和 vtkVolume(表达场景中的体数据);二维空间中的数据则是用 vtkActor2D 表达:vtkProp 子类负责确定染场景中对象的位置、大小和方向等信息;Prop 依赖于两个对象:一个是 Mapper (vtkMapper)对象,负责存放数据和渲染信息;另一个是属性(vtkProperty)对象,负责控制颜色、不透明度等参数。另外vtkActor 中还可以设置纹理(vtkTexture)对象,用于纹理贴图。VTK 定义了大量的 Prop 类,如 vtkImageActor (负责图像显示)和vtkPieChartActor (用于创建数组数据的饼图可视化表达形式)。其中有些 Prop 内部直接包括了控制显示的参数和待渲染数据的索引,因此并不需要额外的 Property 和 Mapper 对象,例如 vtkAxisActor。vtkActor 的子类 vtkFollower 可以自动更新方向信息使其始终面向一个特定的相机,这样无论怎样旋转该对象都是可见的,例如三维场景中的广告板或者文本。vtkActor 的子类vtkLODActor 可以自动改变自身的几何表达形式来实现所需的交互帧率。vtkAssembly建立了各个Actor 的层次结构以便在整个结构平移、旋转或缩放等变换时能够更合理地进行控制。vtkActor::SetMapper(): 该方法用于设置生成几何图元的 Mapper,即连接一个Actor 到可视化管线的末端 (Mapper 是可视化管线的末端)。关于可视化管线的内容可参考 2.4.2 节的内容**/vtkSmartPointer<vtkActor> cylinderActor = vtkSmartPointer<vtkActor>::New();cylinderActor->SetMapper(cylinderMapper);/**(5) vtkRenderer 负责管理场景的渲染过程。组成场景的对象包括 Prop,照相机 (kCamera)和光照(vtkLight)都被整合到一个 vtkRenderer 对象中。一个 vtkRenderWindow 中可以有多个vtkRenderer对象,而这些 vtkRenderer 可以染在窗口不同的矩形区域中(即视口)或者覆盖整个窗口区域。vtkRenderer::AddActor(): 该方法用于将 vtkProp 类型的对象添加到渲染场景中。vtkRenderer::SetBackground(): 该方法是从 vtkRenderer 的父类 vtkViewport 继承的,用于设置渲染场景的背景颜色,用R、G、B 的格式设置,三个分量的取值为 0.0~1.0。 (0.0,0.0.0.0)为黑色,(1.0,1.0,1.0)为白色。除了可以设置单一的背景颜色之外,还可以设置渐变的背景颜色,vtkViewport::SetBackground2()用于设置渐变的另外一种颜色,但是要使背景颜色渐变生效或者关闭,必须调用以下的方法。vtkViewport::SetGradientBackground(bool):参数为0时,关闭,反之,打开。vtkViewport::GradientBackgroundOn():该方法用于打开背景颜色渐变效果,相当于调用方法SetGradientBackground(1)。vtkViewport::GradientBackgroundOff(0): 该方法用于关闭背景颜色渐变效果。相当于调用方法 SetGradientBackground(0)。**/vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();renderer->AddActor(cylinderActor);renderer->SetBackground(0.1, 0.2, 0.4);/**(4)vtkRenderWindow将操作系统与VTK渲染引擎连接到一起不同平台下的vtkRenderWindow子类负责管理本地计算机系统中窗口创建和渲染过程。当使用VTK 开发应用程序时,只需要使用平台无关的vtkRendererWindow类,运行时,系统会自动替换为平台相关的 vtkRendererWindow 子类比如,Windows 下运行上述的 VTK 程序,实际创建的是 vtkWin320penGLRenderWindow(vtkRenderWindow 的子类)对象。vtkRenderWindow 中包含了 vtkRenderer 集合、渲染参数如立体显示(Stereo)、反走样、运动模糊(Motion Blur)和焦点深度 (Focal Depth)等。vtkRenderWindow::AddRenderer():该方法用于加入 vtkRenderer 对象。vtkRenderWindow::SetSize0: 该方法是从 vtkRenderWindow 的父类vtkWindow 继承过来的,用于设置窗口的大小,以像素为单位。**/vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();renWin->AddRenderer(renderer);renWin->SetSize(300, 300);/**6)vtkRenderWindowInteractor 提供平台独立的响应鼠标、键盘和时钟事件的交互机制,通过 VTK 的观察者/命令模式(请参考本书第 8 章内容)将监听到的特定平台的鼠标、键盘和时钟事件交由vtkInteractorObserver 或其子类,如 vtkInteractorStyle 进行处理。vtkInteractorStyle 等监听这些消息并进行处理以完成旋转、拉伸和缩放等运动控制。vtkRenderWindowInteractor 会自动建立一个默认的3D 场景交互器样式(Interactor Style):vtkInteractorStyleSwitch,当然也可以选择其他交互器样式或者创建自己的交互器样式,如本例中使用的 vtkInteractorStyleTrackballCamera。vtkRenderWindowInteractor:SetRenderWindow(): 该方法用于设置染窗口,消息是通过渲染窗口捕获到的,所以必须给交互器对象设置渲染窗口。vtkRenderWindowInteractor::SetInteractorStyle0): 该方法用于定义交互器样式,默认的交瓦器样式为vtkInteractorStyleSwitch。vtkRenderWindowInteractor::Initialize():该方法表示为处理窗口事件做准备,交互器工作之前必须先调用这个方法进行初始化。vtkRenderWindowInteractor::Start();该方法表示开始进入事件响应循环,交互器处于等待状态,等待用户交互事件的发生。进入事件响应循环之前必须先调用 Initialize0方法。**/vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();iren->SetRenderWindow(renWin);/**(7)vtkInteractorStyleTrackballCamera交互器样式的一种。该样式下,用户通过控制相机对物体作旋转、放大、缩小等操作。打个比方,在照相时如果要想物体拍起来显得大一些,可以采取两种做法:第一种做法是相机不动,让要拍的物体靠近相机;第二种做法是物体不动,让相机靠近物体。第二种做法就是 vtkInteractorStyleTrackballCamera 的风格。其父类为 vtkInteractorStyle,除了 vtkInteractorStyleTrackballCamera之外,VTK 还定义了其他多种交互器样式,如vtkInteractorStylelmage,主要用于显示二维图像时的交五**/vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera> ::New();iren->SetInteractorStyle(style);iren->Initialize();iren->Start();return 0;}
运行结果:

送鸡汤:无论你有多笨,只要肯坚持,都能达到你的目标。
相关文章:
vtk9.3 配置 visual studio 2019 运行环境 和运行实例详解
(1)包含文件配置: 项目--属性--VC目录,在包含目录中把include文件夹的地址加进去,一直要到下一级 vtk-9.3目录下, 小知识: 在Visual Studio 2019中运行项目时,如果项目中使用了第三…...
腾讯云添加SSL证书
一、进入腾讯云SSL证书: ssl证书控制台地址 选择“我的证书”,点击"申请免费证书" 2、填写域名和邮箱,点击“提交申请” 在此页面中会出现主机记录和记录值。 2、进入云解析 DNS:云解析DNS地址 进入我的解析-记录…...
CentOS下用rpm安装软件时报错error: Failed dependencies
在CentOS下用rpm安装软件时会报如下错误: 1、安装时提示: [rootdb software]# rpm -ivh ksh-20120801-254.el8.x86_64.rpm warning: ksh-20120801-254.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY error: Failed depende…...
Vue3+Vite连接高德地图JS API——地图显示、输入搜索
1 开通高德地图Web端JS API服务 1、进入高德地图API官网(https://lbs.amap.com/): 2、注册登录。 3、进入控制台。 4、点击“应用管理”,点击“我的应用”,创建新应用。 5、添加Key,服务平台选择“Web端&…...
一台java服务器可以跑多少个线程?
一台java服务器可以跑多少个线程? 一台java服务器能跑多少个线程?这个问题来自一次线上报警如下图,超过了我们的配置阈值。 打出jstack文件,通过IBM Thread and Monitor Dump Analyzer for Java工具查看如下: 共计166…...
【Python 千题 —— 基础篇】猜数字小游戏
题目描述 题目描述 猜数字。利用 random 函数随机生成一个1~100之间的数并存储在变量中,然后使用条件判断以及循环方式编写一个猜数字的环节: 如果输入的数字大于随机生成的数字,则输出“猜大了”如果输入的数字小于随机生成的数字&#x…...
Android Media3 ExoPlayer 如何正确设置缓存大小
在播放音视频时,如何开启 Android Media3 ExoPlayer 缓存,请参考笔者另外一篇文章: Android Media3 Exoplayer 开启缓存功能 笔者在设置 ExoPlayer 的缓存大小时,遇到一个非常奇怪的问题,例如,设置最大缓存…...
WPF实现右键选定TreeViewItem
在WPF中,TreeView默认情况是不支持右键选定的,也就是说,当右键点击某节点时,是无法选中该节点的。当我们想在TreeViewItem中实现右键菜单时,往往希望在弹出菜单的同时选中该节点,以使得菜单针对选中的节点生…...
蓝桥杯 java 重复字符串
题目描述 * 如果一个字符串S恰好可以由某个字符串重复K次得到,我们就称S是K次重复字符串。 * 例如 abcabcabc 可以看作是 abc重复3次得到,所以 abcabcabc 是3次重复字符串。 * 同理 aaaaaa 既是2次重复字符串、又是3次重复字符串和6次重复字符串。 * 现在…...
Vue实战:两种方式创建Vue项目
文章目录 一、实战概述二、实战步骤(一)安装Vue CLI脚手架1、从Node.js官网下载LTS版本2、安装Node.js到指定目录3、配置Node.js环境变量4、查看node版本5、查看npm版本6、安装Vue Cli脚手架7、查看Vue Cli版本 (二)命令行方式构建…...
不同打包工具下的环境变量配置方式对比
本文作者为 360 奇舞团前端开发工程师 天明 前言 在现代的JavaScript应用程序开发中,环境变量的配置是至关重要的。不同的应用场景和部署环境可能需要不同的配置,例如开发、测试和生产环境。最常见的需求是根据不同的环境,配置如是否开启sour…...
5个99%的人可能不知道的实用程序库!
前言 作为一名前端开发者,这些 JavaScript 库极大地提高了我的工作效率,如格式化日期、处理 URL 参数和调试移动网页。朋友们,我想和你们分享这些库。 1. 使用 “Day.js” 来格式化日期和时间 链接 作为开发者,我已经厌倦了在 JavaScript 中操作日期和时间,因为它太麻烦了。…...
shell脚本,ADB
Linux命令行命令是系统内置的命令或用户自定义的脚本(shell 脚本,.sh扩展名结尾),可以通过终端输入命令来执行。这些命令通常存储在Linux系统的/bin、/usr/bin、/sbin、/usr/sbin等目录下,也可以在$PATH环境变量中指定…...
微服务治理:微服务安全详解
微服务安全旨在保护微服务架构中每一个独立的服务。与传统单体应用程序不同,它们在单点应用安全措施,微服务由于其独立性,需要分布式安全方法。 为何关注微服务安全? 攻击面扩大: 更多服务暴露在外,意味着攻击者拥有…...
迅为RK3588开发板编译 Buildroot单独编译图形化界面三
第三步:编译 Recovery 首先在 linux 源码目录下输入以下命令进入编译的 UI 界面,进入之后如下所示: ./build.sh 然后将光标移动到第四个 recovery,点击回车即可开始 recovery 的编译,编译过程如下所示: 编…...
yum仓库及NFS共享
目录 一.yum仓库的基本原理 1.Yum概述: 2.Yum实现过程: 二. yum配置文件及命令: 1. 主配置文件: 2. 仓库设置文件: 3 .日志文件: 编辑4.yum命令详解: 三. 搭建仓库的方式: …...
【Web】CTFSHOW PHP特性刷题记录(全)
知其然知其所以然,尽量把每种特性都详细讲明白。 目录 web89 web90 web91 web92 web93 web94 web95 web96 web97 web98 web99 web100 web101 web102 web103 web104 web105 web106 web107 web108 web109 web110 web111 web112 web113 web…...
[Docker] Docker为什么出现
Docker为什么出现 一款产品: 开发–上线 -->两套环境 | 应用配置 开发即运维! 环境配置十分麻烦,每一个机器都要部署环境(Redis, ES, Hadoop) 费时费力 项目带上配置环境安装打包。 传统: 开发jar&…...
小程序基础学习(页面跳转传参)
目录 正向传参 原理:直接在url里面拼接参数即可 接受参数 编辑 已经跳转到的页面用onLoad函数来接受即可然后写回页面展示即可 逆向传参 原理:通过使用 getCurrentPages()这个方法来获取返回页面列表,然后再用页面.setDataÿ…...
面试经典150题(85-87)
leetcode 150道题 计划花两个月时候刷完,今天(第四十三天)完成了3道(85-87)150: 85.(77. 组合)题目描述: 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...

