VTK(The Visualization Toolkit)加载stl模型

VTK系列文章目录

前言

在上一节中主要记录了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;
}



运行效果

在这里插入图片描述

源码下载

源码下载地址

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值