天天看點

VTK筆記-Qt5.12.11編譯VTK9.0.3-QVTKOpenGLNativeWidget編譯VTKQt下使用VTK參考資料

  在學習VTK的過程中,使用的是控制台的方式來實作VTK的功能。多次調整參數就需要多次的編譯,十分不便。想着使用界面化的方式來學習VTK會事半功倍,且能掌握一門GUI方面的技能。

編譯VTK

  使用VTK最新釋出版本9.0.3,在編譯過程中增加了Qt的配置;

  由于目前機器上沒有VS2019,就使用了VS2017版本;選擇x64;

VTK筆記-Qt5.12.11編譯VTK9.0.3-QVTKOpenGLNativeWidget編譯VTKQt下使用VTK參考資料

  Finsih後,在Search中搜尋Qt,清單中出現和Qt相關的配置項,我這裡将所有的選項設定為“YES”;

VTK筆記-Qt5.12.11編譯VTK9.0.3-QVTKOpenGLNativeWidget編譯VTKQt下使用VTK參考資料

  還可以開啟使用VTK_USE_LARGE_DATA,使用大資料檔案;

  使用CMAKE_INSTALL_PREFIX設定項目INSTALL的輸出目錄;

  Configure後,出現Error提示框,需要配置Qt5的路徑;

VTK筆記-Qt5.12.11編譯VTK9.0.3-QVTKOpenGLNativeWidget編譯VTKQt下使用VTK參考資料
VTK筆記-Qt5.12.11編譯VTK9.0.3-QVTKOpenGLNativeWidget編譯VTKQt下使用VTK參考資料

  Qt5_DIR是Qt5環境的編譯lib的cmake所在檔案夾位置;

  我的Qt5_DIR位置是:C:/Qt/5.12.11/msvc2017_64/lib/cmake/Qt5;

VTK筆記-Qt5.12.11編譯VTK9.0.3-QVTKOpenGLNativeWidget編譯VTKQt下使用VTK參考資料

  再次Configure後,出現紅色選項:

VTK筆記-Qt5.12.11編譯VTK9.0.3-QVTKOpenGLNativeWidget編譯VTKQt下使用VTK參考資料

  确認位置是否正确,一般不用管都是對的,直接Configure;

  後面的步驟都和其他Cmake的步驟是一樣的,批生成等等。

Qt下使用VTK

Qt如何使用VTK

  之前版本中,官方僅提供QVTKWidget,需要手動将QVTKWidgetPlugin.dll和QVTKWidgetPlugin.lib放到qt design下的plugin裡。

  在Qt版本為5.4之後時,在VTK8.2之前的版本,一般是使用QVTKOpenGLWidget;在VTK8.2及之後的版本裡,引入了QVTKOpenGLNativeWidget;

pro配置VTK

  在pro項目檔案中增加VTK庫的使用,引入VTK頭檔案路徑和lib庫檔案路徑以及檔案名清單;

  編寫一個.bat檔案,放在lib檔案下,運作後,就把所有lib檔案寫入src.txt檔案中,友善以後使用;

dir /a-d /b *.lib>src.txt
           

  我現在使用的配置,以供參考:

INCLUDEPATH+="G:/code/VTK-out/x64/Debug/include/vtk-9.0/"
LIBS+= -L$$quote("G:/code/VTK-out/x64/Debug/lib/")
LIBS+=vtkChartsCore-9.0d.lib\
vtkCommonColor-9.0d.lib\
vtkCommonComputationalGeometry-9.0d.lib\
vtkCommonCore-9.0d.lib\
vtkCommonDataModel-9.0d.lib\
vtkCommonExecutionModel-9.0d.lib\
vtkCommonMath-9.0d.lib\
vtkCommonMisc-9.0d.lib\
vtkCommonSystem-9.0d.lib\
vtkCommonTransforms-9.0d.lib\
vtkDICOMParser-9.0d.lib\
vtkDomainsChemistry-9.0d.lib\
vtkDomainsChemistryOpenGL2-9.0d.lib\
vtkdoubleconversion-9.0d.lib\
vtkexodusII-9.0d.lib\
vtkexpat-9.0d.lib\
vtkFiltersAMR-9.0d.lib\
vtkFiltersCore-9.0d.lib\
vtkFiltersExtraction-9.0d.lib\
vtkFiltersFlowPaths-9.0d.lib\
vtkFiltersGeneral-9.0d.lib\
vtkFiltersGeneric-9.0d.lib\
vtkFiltersGeometry-9.0d.lib\
vtkFiltersHybrid-9.0d.lib\
vtkFiltersHyperTree-9.0d.lib\
vtkFiltersImaging-9.0d.lib\
vtkFiltersModeling-9.0d.lib\
vtkFiltersParallel-9.0d.lib\
vtkFiltersParallelImaging-9.0d.lib\
vtkFiltersPoints-9.0d.lib\
vtkFiltersProgrammable-9.0d.lib\
vtkFiltersSelection-9.0d.lib\
vtkFiltersSMP-9.0d.lib\
vtkFiltersSources-9.0d.lib\
vtkFiltersStatistics-9.0d.lib\
vtkFiltersTexture-9.0d.lib\
vtkFiltersTopology-9.0d.lib\
vtkFiltersVerdict-9.0d.lib\
vtkfreetype-9.0d.lib\
vtkGeovisCore-9.0d.lib\
vtkgl2ps-9.0d.lib\
vtkglew-9.0d.lib\
vtkGUISupportQt-9.0d.lib\
vtkGUISupportQtSQL-9.0d.lib\
vtkhdf5-9.0d.lib\
vtkhdf5_hl-9.0d.lib\
vtkImagingColor-9.0d.lib\
vtkImagingCore-9.0d.lib\
vtkImagingFourier-9.0d.lib\
vtkImagingGeneral-9.0d.lib\
vtkImagingHybrid-9.0d.lib\
vtkImagingMath-9.0d.lib\
vtkImagingMorphological-9.0d.lib\
vtkImagingSources-9.0d.lib\
vtkImagingStatistics-9.0d.lib\
vtkImagingStencil-9.0d.lib\
vtkInfovisCore-9.0d.lib\
vtkInfovisLayout-9.0d.lib\
vtkInteractionImage-9.0d.lib\
vtkInteractionStyle-9.0d.lib\
vtkInteractionWidgets-9.0d.lib\
vtkIOAMR-9.0d.lib\
vtkIOAsynchronous-9.0d.lib\
vtkIOCityGML-9.0d.lib\
vtkIOCore-9.0d.lib\
vtkIOEnSight-9.0d.lib\
vtkIOExodus-9.0d.lib\
vtkIOExport-9.0d.lib\
vtkIOExportGL2PS-9.0d.lib\
vtkIOExportPDF-9.0d.lib\
vtkIOGeometry-9.0d.lib\
vtkIOImage-9.0d.lib\
vtkIOImport-9.0d.lib\
vtkIOInfovis-9.0d.lib\
vtkIOLegacy-9.0d.lib\
vtkIOLSDyna-9.0d.lib\
vtkIOMINC-9.0d.lib\
vtkIOMotionFX-9.0d.lib\
vtkIOMovie-9.0d.lib\
vtkIONetCDF-9.0d.lib\
vtkIOOggTheora-9.0d.lib\
vtkIOParallel-9.0d.lib\
vtkIOParallelXML-9.0d.lib\
vtkIOPLY-9.0d.lib\
vtkIOSegY-9.0d.lib\
vtkIOSQL-9.0d.lib\
vtkIOTecplotTable-9.0d.lib\
vtkIOVeraOut-9.0d.lib\
vtkIOVideo-9.0d.lib\
vtkIOXML-9.0d.lib\
vtkIOXMLParser-9.0d.lib\
vtkjpeg-9.0d.lib\
vtkjsoncpp-9.0d.lib\
vtklibharu-9.0d.lib\
vtklibproj-9.0d.lib\
vtklibxml2-9.0d.lib\
vtkloguru-9.0d.lib\
vtklz4-9.0d.lib\
vtklzma-9.0d.lib\
vtkmetaio-9.0d.lib\
vtknetcdf-9.0d.lib\
vtkogg-9.0d.lib\
vtkParallelCore-9.0d.lib\
vtkParallelDIY-9.0d.lib\
vtkpng-9.0d.lib\
vtkpugixml-9.0d.lib\
vtkRenderingAnnotation-9.0d.lib\
vtkRenderingContext2D-9.0d.lib\
vtkRenderingContextOpenGL2-9.0d.lib\
vtkRenderingCore-9.0d.lib\
vtkRenderingFreeType-9.0d.lib\
vtkRenderingGL2PSOpenGL2-9.0d.lib\
vtkRenderingImage-9.0d.lib\
vtkRenderingLabel-9.0d.lib\
vtkRenderingLOD-9.0d.lib\
vtkRenderingOpenGL2-9.0d.lib\
vtkRenderingQt-9.0d.lib\
vtkRenderingSceneGraph-9.0d.lib\
vtkRenderingUI-9.0d.lib\
vtkRenderingVolume-9.0d.lib\
vtkRenderingVolumeOpenGL2-9.0d.lib\
vtkRenderingVtkJS-9.0d.lib\
vtksqlite-9.0d.lib\
vtksys-9.0d.lib\
vtkTestingRendering-9.0d.lib\
vtktheora-9.0d.lib\
vtktiff-9.0d.lib\
vtkverdict-9.0d.lib\
vtkViewsContext2D-9.0d.lib\
vtkViewsCore-9.0d.lib\
vtkViewsInfovis-9.0d.lib\
vtkViewsQt-9.0d.lib\
vtkWrappingTools-9.0d.lib\
vtkzlib-9.0d.lib
           

提升法使用VTK

  在UI設計師界面,拖入"OpenGL Widget"控件;在控件上右鍵,選擇“提升為”;

VTK筆記-Qt5.12.11編譯VTK9.0.3-QVTKOpenGLNativeWidget編譯VTKQt下使用VTK參考資料

  在使用該UI的類中增加代碼,寫一個渲染圓球的VTK例子;

#include <QSurfaceFormat>
#include <QVTKOpenGLNativeWidget.h>
#include <vtkSphereSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkGenericOpenGLRenderWindow.h>
#include <vtkNamedColors.h>
#include <vtkProperty.h>
#include <vtkSmartPointer.h>

#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);

MyVtk::MyVtk(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MyVtk){
    ui->setupUi(this);
    
    QSurfaceFormat::setDefaultFormat(QVTKOpenGLNativeWidget::defaultFormat());
    vtkNew<vtkNamedColors> colors;
    vtkNew<vtkSphereSource> sphereSource;
    vtkNew<vtkPolyDataMapper> sphereMapper;
    sphereMapper->SetInputConnection(sphereSource->GetOutputPort());
    vtkNew<vtkActor> sphereActor;
    sphereActor->SetMapper(sphereMapper);
    sphereActor->GetProperty()->SetColor(colors->GetColor4d("Tomato").GetData());
    vtkNew<vtkRenderer> renderer;
    renderer->AddActor(sphereActor);
    renderer->SetBackground(colors->GetColor3d("SteelBlue").GetData());
    vtkNew<vtkGenericOpenGLRenderWindow> renderWindow;
    renderWindow->AddRenderer(renderer);
    renderWindow->SetWindowName("RenderWindowNoUIFile");
    setCentralWidget(ui->vtkRenderWidget);
    ui->vtkRenderWidget->setRenderWindow(renderWindow);
}
           
VTK筆記-Qt5.12.11編譯VTK9.0.3-QVTKOpenGLNativeWidget編譯VTKQt下使用VTK參考資料

  注意:生成成功後,将vtk的輸出目錄下的bin目錄下所有dll拷貝到Qt的debug目錄下;

VTK筆記-Qt5.12.11編譯VTK9.0.3-QVTKOpenGLNativeWidget編譯VTKQt下使用VTK參考資料

參考資料

1.QVTKWidget、QVTKOpenGLWidget等該使用哪一個?

2.Study-VTK:QVTKWidget、QVTKOpenGLWidget、QVTKOpenGLNativeWidget、QVTKWidget2 差別

3.QVTKOpenGLNativeWidget在Qt中的用法

上一篇: JDK代理

繼續閱讀