一、编译VTK库
编译教程
https://10sxj.com/post/42.html
编译好的VTK库
https://10sxj.com/post/49.html
二、搭建基础项目目录结构
建立如下目录结构,可加入include、lib等,这里为保障我的其他环境,我目录结构比较复杂。
三、建立工程
这里我给一下我的pro配置,主要是vtk库引入问题
QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets BUILDOUT = $$PWD/../bin/ BUILDTMP = $$PWD/../tmp/ CONFIG += c++17 # You can make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ main.cpp \ VTKDemoWidget.cpp HEADERS += \ VTKDemoWidget.h # Add VTK Include CONFIG(debug, debug|release){ INCLUDEPATH += /data/home/shuchengyang/SoftWare/VTK/Qt5-Debug/include/vtk-9.2/ }else{ INCLUDEPATH += /data/home/shuchengyang/SoftWare/VTK/Qt5-Release/include/vtk-9.2/ } # Add VTK Library Path CONFIG(debug, debug|release){ LIBS += -L/data/home/shuchengyang/SoftWare/VTK/Qt5-Debug/lib/ \ -lvtkcgns-9.2 \ -lvtkChartsCore-9.2 \ -lvtkCommonColor-9.2 \ -lvtkCommonComputationalGeometry-9.2 \ -lvtkCommonCore-9.2 \ -lvtkCommonDataModel-9.2 \ -lvtkCommonExecutionModel-9.2 \ -lvtkCommonMath-9.2 \ -lvtkCommonMisc-9.2 \ #-lvtkCommonPython-9.2 \ -lvtkCommonSystem-9.2 \ -lvtkCommonTransforms-9.2 \ -lvtkDICOMParser-9.2 \ -lvtkDomainsChemistry-9.2 \ -lvtkDomainsChemistryOpenGL2-9.2 \ -lvtkDomainsParallelChemistry-9.2 \ -lvtkdoubleconversion-9.2 \ -lvtkexodusII-9.2 \ -lvtkexpat-9.2 \ -lvtkFiltersAMR-9.2 \ -lvtkFiltersCore-9.2 \ -lvtkFiltersExtraction-9.2 \ -lvtkFiltersFlowPaths-9.2 \ -lvtkFiltersGeneral-9.2 \ -lvtkFiltersGeneric-9.2 \ -lvtkFiltersGeometry-9.2 \ -lvtkFiltersHybrid-9.2 \ -lvtkFiltersHyperTree-9.2 \ -lvtkFiltersImaging-9.2 \ -lvtkFiltersModeling-9.2 \ -lvtkFiltersParallel-9.2 \ -lvtkFiltersParallelDIY2-9.2 \ -lvtkFiltersParallelGeometry-9.2 \ -lvtkFiltersParallelImaging-9.2 \ -lvtkFiltersParallelMPI-9.2 \ -lvtkFiltersParallelVerdict-9.2 \ -lvtkFiltersPoints-9.2 \ -lvtkFiltersProgrammable-9.2 \ #-lvtkFiltersPython-9.2 \ -lvtkFiltersSelection-9.2 \ -lvtkFiltersSMP-9.2 \ -lvtkFiltersSources-9.2 \ -lvtkFiltersStatistics-9.2 \ -lvtkFiltersTexture-9.2 \ -lvtkFiltersTopology-9.2 \ -lvtkFiltersVerdict-9.2 \ -lvtkfmt-9.2 \ -lvtkfreetype-9.2 \ -lvtkGeovisCore-9.2 \ -lvtkgl2ps-9.2 \ -lvtkglew-9.2 \ -lvtkGUISupportQt-9.2 \ -lvtkGUISupportQtQuick-9.2 \ -lvtkGUISupportQtSQL-9.2 \ -lvtkhdf5-9.2 \ -lvtkhdf5_hl-9.2 \ -lvtkImagingColor-9.2 \ -lvtkImagingCore-9.2 \ -lvtkImagingFourier-9.2 \ -lvtkImagingGeneral-9.2 \ -lvtkImagingHybrid-9.2 \ -lvtkImagingMath-9.2 \ -lvtkImagingMorphological-9.2 \ -lvtkImagingSources-9.2 \ -lvtkImagingStatistics-9.2 \ -lvtkImagingStencil-9.2 \ -lvtkInfovisCore-9.2 \ -lvtkInfovisLayout-9.2 \ -lvtkInteractionImage-9.2 \ -lvtkInteractionStyle-9.2 \ -lvtkInteractionWidgets-9.2 \ -lvtkIOAMR-9.2 \ -lvtkIOAsynchronous-9.2 \ -lvtkIOCesium3DTiles-9.2 \ -lvtkIOCGNSReader-9.2 \ -lvtkIOChemistry-9.2 \ -lvtkIOCityGML-9.2 \ -lvtkIOCONVERGECFD-9.2 \ -lvtkIOCore-9.2 \ -lvtkIOEnSight-9.2 \ -lvtkIOExodus-9.2 \ -lvtkIOExport-9.2 \ -lvtkIOExportGL2PS-9.2 \ -lvtkIOExportPDF-9.2 \ -lvtkIOGeometry-9.2 \ -lvtkIOHDF-9.2 \ -lvtkIOImage-9.2 \ -lvtkIOImport-9.2 \ -lvtkIOInfovis-9.2 \ -lvtkIOIOSS-9.2 \ -lvtkIOLegacy-9.2 \ -lvtkIOLSDyna-9.2 \ -lvtkIOMINC-9.2 \ -lvtkIOMotionFX-9.2 \ -lvtkIOMovie-9.2 \ -lvtkIOMPIImage-9.2 \ -lvtkIOMPIParallel-9.2 \ -lvtkIONetCDF-9.2 \ -lvtkIOOggTheora-9.2 \ -lvtkIOParallel-9.2 \ -lvtkIOParallelExodus-9.2 \ -lvtkIOParallelNetCDF-9.2 \ -lvtkIOParallelXML-9.2 \ -lvtkIOPLY-9.2 \ -lvtkIOSegY-9.2 \ -lvtkIOSQL-9.2 \ -lvtkioss-9.2 \ -lvtkIOTecplotTable-9.2 \ -lvtkIOVeraOut-9.2 \ -lvtkIOVideo-9.2 \ -lvtkIOXML-9.2 \ -lvtkIOXMLParser-9.2 \ -lvtkjpeg-9.2 \ -lvtkjsoncpp-9.2 \ -lvtkkissfft-9.2 \ -lvtklibharu-9.2 \ -lvtklibproj-9.2 \ -lvtklibxml2-9.2 \ -lvtkloguru-9.2 \ -lvtklz4-9.2 \ -lvtklzma-9.2 \ -lvtkmetaio-9.2 \ -lvtknetcdf-9.2 \ -lvtkogg-9.2 \ -lvtkParallelCore-9.2 \ -lvtkParallelDIY-9.2 \ #-lvtkParallelMPI4Py-9.2 \ -lvtkParallelMPI-9.2 \ -lvtkpng-9.2 \ -lvtkpugixml-9.2 \ #-lvtkPythonContext2D-9.2 \ #-lvtkPythonInterpreter-9.2 \ -lvtkRenderingAnnotation-9.2 \ -lvtkRenderingContext2D-9.2 \ -lvtkRenderingContextOpenGL2-9.2 \ -lvtkRenderingCore-9.2 \ -lvtkRenderingFreeType-9.2 \ -lvtkRenderingGL2PSOpenGL2-9.2 \ -lvtkRenderingHyperTreeGrid-9.2 \ -lvtkRenderingImage-9.2 \ -lvtkRenderingLabel-9.2 \ -lvtkRenderingLICOpenGL2-9.2 \ -lvtkRenderingLOD-9.2 \ -lvtkRenderingOpenGL2-9.2 \ -lvtkRenderingParallel-9.2 \ -lvtkRenderingQt-9.2 \ -lvtkRenderingSceneGraph-9.2 \ -lvtkRenderingUI-9.2 \ -lvtkRenderingVolume-9.2 \ -lvtkRenderingVolumeOpenGL2-9.2 \ -lvtkRenderingVtkJS-9.2 \ -lvtksqlite-9.2 \ -lvtksys-9.2 \ -lvtkTestingDataModel-9.2 \ -lvtkTestingGenericBridge-9.2 \ -lvtkTestingIOSQL-9.2 \ -lvtkTestingRendering-9.2 \ -lvtktheora-9.2 \ -lvtktiff-9.2 \ -lvtkverdict-9.2 \ -lvtkViewsContext2D-9.2 \ -lvtkViewsCore-9.2 \ -lvtkViewsInfovis-9.2 \ -lvtkViewsQt-9.2 \ #-lvtkWebCore-9.2 \ -lvtkWebGLExporter-9.2 \ #-lvtkWrappingPythonCore3.7-9.2 \ -lvtkWrappingTools-9.2 \ -lvtkzlib-9.2 }else{ LIBS += -L/data/home/shuchengyang/SoftWare/VTK/Qt5-Release/lib/ \ -lvtkcgns-9.2 \ -lvtkChartsCore-9.2 \ -lvtkCommonColor-9.2 \ -lvtkCommonComputationalGeometry-9.2 \ -lvtkCommonCore-9.2 \ -lvtkCommonDataModel-9.2 \ -lvtkCommonExecutionModel-9.2 \ -lvtkCommonMath-9.2 \ -lvtkCommonMisc-9.2 \ #-lvtkCommonPython-9.2 \ -lvtkCommonSystem-9.2 \ -lvtkCommonTransforms-9.2 \ -lvtkDICOMParser-9.2 \ -lvtkDomainsChemistry-9.2 \ -lvtkDomainsChemistryOpenGL2-9.2 \ -lvtkDomainsParallelChemistry-9.2 \ -lvtkdoubleconversion-9.2 \ -lvtkexodusII-9.2 \ -lvtkexpat-9.2 \ -lvtkFiltersAMR-9.2 \ -lvtkFiltersCore-9.2 \ -lvtkFiltersExtraction-9.2 \ -lvtkFiltersFlowPaths-9.2 \ -lvtkFiltersGeneral-9.2 \ -lvtkFiltersGeneric-9.2 \ -lvtkFiltersGeometry-9.2 \ -lvtkFiltersHybrid-9.2 \ -lvtkFiltersHyperTree-9.2 \ -lvtkFiltersImaging-9.2 \ -lvtkFiltersModeling-9.2 \ -lvtkFiltersParallel-9.2 \ -lvtkFiltersParallelDIY2-9.2 \ -lvtkFiltersParallelGeometry-9.2 \ -lvtkFiltersParallelImaging-9.2 \ -lvtkFiltersParallelMPI-9.2 \ -lvtkFiltersParallelVerdict-9.2 \ -lvtkFiltersPoints-9.2 \ -lvtkFiltersProgrammable-9.2 \ #-lvtkFiltersPython-9.2 \ -lvtkFiltersSelection-9.2 \ -lvtkFiltersSMP-9.2 \ -lvtkFiltersSources-9.2 \ -lvtkFiltersStatistics-9.2 \ -lvtkFiltersTexture-9.2 \ -lvtkFiltersTopology-9.2 \ -lvtkFiltersVerdict-9.2 \ -lvtkfmt-9.2 \ -lvtkfreetype-9.2 \ -lvtkGeovisCore-9.2 \ -lvtkgl2ps-9.2 \ -lvtkglew-9.2 \ -lvtkGUISupportQt-9.2 \ -lvtkGUISupportQtQuick-9.2 \ -lvtkGUISupportQtSQL-9.2 \ -lvtkhdf5-9.2 \ -lvtkhdf5_hl-9.2 \ -lvtkImagingColor-9.2 \ -lvtkImagingCore-9.2 \ -lvtkImagingFourier-9.2 \ -lvtkImagingGeneral-9.2 \ -lvtkImagingHybrid-9.2 \ -lvtkImagingMath-9.2 \ -lvtkImagingMorphological-9.2 \ -lvtkImagingSources-9.2 \ -lvtkImagingStatistics-9.2 \ -lvtkImagingStencil-9.2 \ -lvtkInfovisCore-9.2 \ -lvtkInfovisLayout-9.2 \ -lvtkInteractionImage-9.2 \ -lvtkInteractionStyle-9.2 \ -lvtkInteractionWidgets-9.2 \ -lvtkIOAMR-9.2 \ -lvtkIOAsynchronous-9.2 \ -lvtkIOCesium3DTiles-9.2 \ -lvtkIOCGNSReader-9.2 \ -lvtkIOChemistry-9.2 \ -lvtkIOCityGML-9.2 \ -lvtkIOCONVERGECFD-9.2 \ -lvtkIOCore-9.2 \ -lvtkIOEnSight-9.2 \ -lvtkIOExodus-9.2 \ -lvtkIOExport-9.2 \ -lvtkIOExportGL2PS-9.2 \ -lvtkIOExportPDF-9.2 \ -lvtkIOGeometry-9.2 \ -lvtkIOHDF-9.2 \ -lvtkIOImage-9.2 \ -lvtkIOImport-9.2 \ -lvtkIOInfovis-9.2 \ -lvtkIOIOSS-9.2 \ -lvtkIOLegacy-9.2 \ -lvtkIOLSDyna-9.2 \ -lvtkIOMINC-9.2 \ -lvtkIOMotionFX-9.2 \ -lvtkIOMovie-9.2 \ -lvtkIOMPIImage-9.2 \ -lvtkIOMPIParallel-9.2 \ -lvtkIONetCDF-9.2 \ -lvtkIOOggTheora-9.2 \ -lvtkIOParallel-9.2 \ -lvtkIOParallelExodus-9.2 \ -lvtkIOParallelNetCDF-9.2 \ -lvtkIOParallelXML-9.2 \ -lvtkIOPLY-9.2 \ -lvtkIOSegY-9.2 \ -lvtkIOSQL-9.2 \ -lvtkioss-9.2 \ -lvtkIOTecplotTable-9.2 \ -lvtkIOVeraOut-9.2 \ -lvtkIOVideo-9.2 \ -lvtkIOXML-9.2 \ -lvtkIOXMLParser-9.2 \ -lvtkjpeg-9.2 \ -lvtkjsoncpp-9.2 \ -lvtkkissfft-9.2 \ -lvtklibharu-9.2 \ -lvtklibproj-9.2 \ -lvtklibxml2-9.2 \ -lvtkloguru-9.2 \ -lvtklz4-9.2 \ -lvtklzma-9.2 \ -lvtkmetaio-9.2 \ -lvtknetcdf-9.2 \ -lvtkogg-9.2 \ -lvtkParallelCore-9.2 \ -lvtkParallelDIY-9.2 \ #-lvtkParallelMPI4Py-9.2 \ -lvtkParallelMPI-9.2 \ -lvtkpng-9.2 \ -lvtkpugixml-9.2 \ #-lvtkPythonContext2D-9.2 \ #-lvtkPythonInterpreter-9.2 \ -lvtkRenderingAnnotation-9.2 \ -lvtkRenderingContext2D-9.2 \ -lvtkRenderingContextOpenGL2-9.2 \ -lvtkRenderingCore-9.2 \ -lvtkRenderingFreeType-9.2 \ -lvtkRenderingGL2PSOpenGL2-9.2 \ -lvtkRenderingHyperTreeGrid-9.2 \ -lvtkRenderingImage-9.2 \ -lvtkRenderingLabel-9.2 \ -lvtkRenderingLICOpenGL2-9.2 \ -lvtkRenderingLOD-9.2 \ -lvtkRenderingOpenGL2-9.2 \ -lvtkRenderingParallel-9.2 \ -lvtkRenderingQt-9.2 \ -lvtkRenderingSceneGraph-9.2 \ -lvtkRenderingUI-9.2 \ -lvtkRenderingVolume-9.2 \ -lvtkRenderingVolumeOpenGL2-9.2 \ -lvtkRenderingVtkJS-9.2 \ -lvtksqlite-9.2 \ -lvtksys-9.2 \ -lvtkTestingDataModel-9.2 \ -lvtkTestingGenericBridge-9.2 \ -lvtkTestingIOSQL-9.2 \ -lvtkTestingRendering-9.2 \ -lvtktheora-9.2 \ -lvtktiff-9.2 \ -lvtkverdict-9.2 \ -lvtkViewsContext2D-9.2 \ -lvtkViewsCore-9.2 \ -lvtkViewsInfovis-9.2 \ -lvtkViewsQt-9.2 \ #-lvtkWebCore-9.2 \ -lvtkWebGLExporter-9.2 \ #-lvtkWrappingPythonCore3.7-9.2 \ -lvtkWrappingTools-9.2 \ -lvtkzlib-9.2 } # .o file dir OBJECTS_DIR =$${BUILDTMP} # rcc out dir RCC_DIR = $${BUILDTMP} # moc out dir MOC_DIR = $${BUILDTMP} # MAKEFILE out dir OUT_PWD = $${BUILDTMP} # ui_*.h out dir UI_DIR = $${BUILDTMP} # exe out dir CONFIG(debug, debug|release){ DESTDIR =$${BUILDOUT}debug }else{ DESTDIR =$${BUILDOUT}release }
这里我加入所有vtk库,其中屏蔽的库是Python使用的,在这里引入会引起编译报错。
四、编写源码
main.cpp
#include "VTKDemoWidget.h" #include <QApplication> #include "vtkSmartPointer.h" #include "vtkCylinderSource.h" #include "vtkPolyDataMapper.h" #include "vtkRenderer.h" #include "vtkRenderWindow.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); VTKDemoWidget w; w.show(); vtkSmartPointer<vtkCylinderSource> coneSource = vtkSmartPointer<vtkCylinderSource>::New(); coneSource->Update(); vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New(); polyData = coneSource->GetOutput(); vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); mapper->SetInputData(polyData); vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New(); actor->SetMapper(mapper); vtkSmartPointer<vtkRenderer> render = vtkSmartPointer<vtkRenderer>::New(); render->AddActor(actor); render->SetBackground(0.5, 0.5, 0.5); w.getwidget()->renderWindow()->AddRenderer(render); vtkSmartPointer<vtkRenderWindowInteractor> rwi = vtkSmartPointer<vtkRenderWindowInteractor>::New(); rwi->SetRenderWindow(w.getwidget()->renderWindow()); rwi->ReInitialize(); return a.exec(); }
VTKDemoWidget.h
#ifndef VTKDEMOWIDGET_H #define VTKDEMOWIDGET_H #include <QWidget> #include "QVTKRenderWidget.h" #include "vtkAutoInit.h" #include "vtkRenderingOpenGL2Module.h" #include "vtkInteractionStyleModule.h" #include "vtkRenderingFreeTypeModule.h" VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle); VTK_MODULE_INIT(vtkRenderingFreeType); class VTKDemoWidget : public QWidget { Q_OBJECT public: VTKDemoWidget(QWidget *parent = nullptr); ~VTKDemoWidget(); QVTKOpenGLNativeWidget* getwidget(){ return _renderWidget; } private: QVTKOpenGLNativeWidget* _renderWidget; }; #endif // VTKDEMOWIDGET_H
VTKDemoWidget.cpp
#include "VTKDemoWidget.h" #include <QGridLayout> VTKDemoWidget::VTKDemoWidget(QWidget *parent) : QWidget(parent) { QGridLayout* layout = new QGridLayout(this); _renderWidget = new QVTKOpenGLNativeWidget(this); _renderWidget->setMinimumSize(800,600); layout->addWidget(_renderWidget); this->setLayout(layout); } VTKDemoWidget::~VTKDemoWidget() { }
这里重点关注,main.cpp.
最后编译运行得到:
VTK封装了很多
vtkCylinderSource
类,他们继承关系如图:
还没有评论,来说两句吧...