前言
- 如果仅仅是普通的显示,建议使用OCCT自带的AIS来显示,配置方法相对vtk更简单,详见 https://flarum.19970622.xyz/d/4/2
- vtk适合一些对显示有复杂要求的,比如网格,比如颜色等,另外vtk有完整的文档
资料
- OpenCASCADE(OCC)_使用VTK显示(视频):https://www.bilibili.com/video/BV1BL411Y7Ee
- 编译vtk与配置(视频):https://www.youtube.com/watch?v=kZpr4ocnavA
- 编译vtk(文本): https://mp.weixin.qq.com/s/RaQLRVKoAQKY2gf4lHmejw
编译VTK
- 进入https://gitlab.kitware.com/vtk/vtk,下载9.2.0版本源代码,解压,得到
vtk-v9.2.0
文件夹
- 进入https://cmake.org/download/,找到Windows x64 Installer进行下载,然后安装
- 打开cmake, 源代码目录选择 vtk-v9.2.0 文件夹,再新建一个vtk-v9.2.0-bulid目录存放编译内容,点击Configure,弹出一个框,选择VS2019和x64,点击Finish,开始编译
- 弹出一个框,新建vtk-v9.2.0-install目录配置给cmake_install_prefix,然后依次点击Configure---Generate---Open Project,进入VS2019

- 在解决方案中找到INSTALL---右键---生成,时间较长需等待
- 编译完成后在vtk-v9.2.0-install文件夹下有bin/include/lib三个文件夹
编译OCCT
下载occt 7.7.0源码 opencascade-7.7.0.tgz :https://dev.opencascade.org/release,解压得到opencascade-7.7.0
文件夹
进入https://dev.opencascade.org/resources/download/3rd-party-components,
下载 Freeimage, vc14, x64
下载 Freetype, vc14, x64
下载 tcltk,vc12, x64
新建一个OCCT-7.7.0的文件夹,把occt的源码文件夹opencascade-7.7.0
拷贝进去
在OCCT-7.7.0文件夹下面新建opencascade-7.7.0-build
, opencascade-7.7.0-install
和products
三个文件夹,将解压后的Freeimage,Freetype,tcltk文件夹拷贝到products
文件夹内
D:\OCCT-7.7.0
|____opencascade-7.7.0
|____opencascade-7.7.0-build
|____opencascade-7.7.0-install
|____products
|____freeimage-3.17.0-vc14-64
|____freetype-2.5.5-vc14-64
|____tcltk-86-64
- 打开cmake软件,配置好OCCT源码目录与build目录,点击Generate
- 出现一堆红色的内容,开始配置环境,按照之前放置的路径进行配置即可

- 点击Configure会弹出错误,再配置VTK的目录,再点击Configure

- 弹出下面错误,解决方法是取消勾选
BUILD_MODULE_Draw
,再点击Configure
VTK version (9.2.0)
CMake Error at CMakeLists.txt:858 (message):
Could not find headers of used third-party products:
3RDPARTY_TCL_INCLUDE_DIR 3RDPARTY_TK_INCLUDE_DIR
- 点击Generate---Open Project,进入VS2019
- 在解决方案右键---生成解决方案---耐心等待
- 在解决方案中找到INSTALL---右键---生成
- 编译完成后,在opencascade-7.7.0-install文件夹就会有occt的inc, bind, libd文件夹,d是因为采用的debug模式
在OCCT项目中使用VTK
打开VS2019,新建一个c++项目
右键---属性,开始配置 occ 与 vtk
改成 Dedug x64 平台
调试---环境---增加occ的bin目录,vtk的bin目录和freetype的bin目录: PATH=%PATH%;D:\OCCT-7.7.0\opencascade-7.7.0-install\win64\vc14\bind;D:\vtk-v9.2.0-install\bin;D:\OCCT-7.7.0\products\freetype-2.5.5-vc14-64\bin;
C/C++
---常规---附加包含目录---增加occ, vtk头文件目录:D:\OCCT-7.7.0\opencascade-7.7.0-install\inc;D:\vtk-v9.2.0-install\include\vtk-9.2;
链接器---常规---增加occ, vtk的lib所在目录:D:\OCCT-7.7.0\opencascade-7.7.0-install\win64\vc14\libd;D:\vtk-v9.2.0-install\lib;
链接器---输入---附加依赖项目,增加occ, vtk的lib文件名称
DRAWEXE.lib
ExpToCasExe.lib
TKBin.lib
TKBinL.lib
TKBinTObj.lib
TKBinXCAF.lib
TKBO.lib
TKBool.lib
TKBRep.lib
TKCAF.lib
TKCDF.lib
TKD3DHost.lib
TKD3DHostTest.lib
TKDCAF.lib
TKDFBrowser.lib
TKDraw.lib
TKernel.lib
TKExpress.lib
TKFeat.lib
TKFillet.lib
TKG2d.lib
TKG3d.lib
TKGeomAlgo.lib
TKGeomBase.lib
TKHLR.lib
TKIGES.lib
TKIVtk.lib
TKIVtkDraw.lib
TKLCAF.lib
TKMath.lib
TKMesh.lib
TKMeshVS.lib
TKMessageModel.lib
TKMessageView.lib
TKOffset.lib
TKOpenGl.lib
TKOpenGles.lib
TKOpenGlesTest.lib
TKOpenGlTest.lib
TKPrim.lib
TKQADraw.lib
TKRWMesh.lib
TKService.lib
TKShapeView.lib
TKShHealing.lib
TKStd.lib
TKStdL.lib
TKSTEP.lib
TKSTEP209.lib
TKSTEPAttr.lib
TKSTEPBase.lib
TKSTL.lib
TKTInspector.lib
TKTInspectorAPI.lib
TKTObj.lib
TKTObjDRAW.lib
TKToolsDraw.lib
TKTopAlgo.lib
TKTopTest.lib
TKTreeModel.lib
TKV3d.lib
TKVCAF.lib
TKView.lib
TKViewerTest.lib
TKVInspector.lib
TKVRML.lib
TKXCAF.lib
TKXDE.lib
TKXDECascade.lib
TKXDEDRAW.lib
TKXDEIGES.lib
TKXDESTEP.lib
TKXMesh.lib
TKXml.lib
TKXmlL.lib
TKXmlTObj.lib
TKXmlXCAF.lib
TKXSBase.lib
TKXSDRAW.lib
vtkInteractionStyle-9.2d.lib
vtkRenderingOpenGL2-9.2d.lib
vtkCommonCore-9.2d.lib
vtkRenderingCore-9.2d.lib
vtkCommonExecutionModel-9.2d.lib
vtksys-9.2d.lib
TKMath.lib
TKV3d.lib
TKIVtk.lib
TKernel.lib
TKTopAlgo.lib
TKPrim.lib
- 测试代码
#include <BRepPrimAPI_MakeBox.hxx>
#include <IVtkTools_ShapeDataSource.hxx>
#include <vtkAutoInit.h>
#include <vtkRenderer.h>
#include <VtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkPolyDataMapper.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle)
int main() {
BRepPrimAPI_MakeBox box(2, 2, 2);
const TopoDS_Shape& ashape = box.Shape();
//==============================================================================================
// Source->mapper->actor->render
vtkNew<IVtkTools_ShapeDataSource> occSource; //创建一个可以被VTK使用的OCC数据源
occSource->SetShape(new IVtkOCC_Shape(ashape)); //将ashape添加到数据源中
vtkNew<vtkPolyDataMapper> mapper; //创建一个VTK数据类型
mapper->SetInputConnection(occSource->GetOutputPort()); //创建管道,将occ数据导入到VTK
vtkNew<vtkActor> actor; //创建 actor
actor->SetMapper(mapper); //将vtk数据交给actor
vtkNew<vtkRenderWindow> renderWindow; //创建窗口
vtkNew<vtkRenderer> render; //创建渲染器
renderWindow->AddRenderer(render); //在窗口中加入渲染器
render->AddActor(actor); //在渲染器中加入actor
render->SetBackground(0.302, 0.302, 0.302);//设置窗口背景颜色
vtkNew<vtkRenderWindowInteractor> iren; //创建一个vtk交互器
vtkNew<vtkInteractorStyleTrackballCamera> istyle; //创建vtk相机交互器样式
iren->SetRenderWindow(renderWindow); //设置渲染窗口
iren->SetInteractorStyle(istyle); //设置交互器样式
iren->Initialize(); //初始化交互器
iren->Start(); //开始运行交互器
//==============================================================================================
return 0;
}

vtk资料
书籍
《VTK User's Guide》搜 VTK_Users_Guide_v11.pdf
《VTK用户手册--中文翻译版》搜 VTK用户手册--中文翻译版.pdf
《VTK图形图像开发进阶》搜 VTK图形图像开发进阶
《数据可视化技术》林勇 暂无PDF