当前位置: 首页 > news >正文

qt使用camke时,采用vcpkg工具链设置VTK的qt模块QVTKOpenGLNativeWidget

下载:QVTKOpenGLNativeWidget嵌入qt应用中资源-CSDN下载

1.通过vcpkg安装VTK,目前的VTK里面默认为qt6,如果需要安装qt5,需要将端口配置进行修改

笔者的vcpkg的vtk端口路径:D:\vcpkg\ports\vtk

portfile.cmake

修改点:

 #第一处
#file(READ "${CURRENT_INSTALLED_DIR}/share/qtbase/vcpkg_abi_info.txt" qtbase_abi_info)file(READ "${CURRENT_INSTALLED_DIR}/share/qt5-base/vcpkg_abi_info.txt" qtbase_abi_info)#第二处
#if(NOT EXISTS "${CURRENT_HOST_INSTALLED_DIR}/tools/Qt6/bin/qmlplugindump${VCPKG_HOST_EXECUTABLE_SUFFIX}")if(NOT EXISTS "${CURRENT_HOST_INSTALLED_DIR}/tools/qt5/bin/qmlplugindump${VCPKG_HOST_EXECUTABLE_SUFFIX}")#第三处#-DVTK_QT_VERSION=6-DVTK_QT_VERSION=5
set(VTK_SHORT_VERSION 9.3)
if(NOT VCPKG_TARGET_IS_WINDOWS)message(WARNING "You will need to install Xorg dependencies to build vtk:\napt-get install libxt-dev\n")
endif()set(VCPKG_POLICY_SKIP_ABSOLUTE_PATHS_CHECK enabled)# =============================================================================
# Clone & patch
vcpkg_from_github(OUT_SOURCE_PATH SOURCE_PATHREPO Kitware/VTKREF 09a76bc55b37caad94d0d8ebe865caaed1b438af # v9.3.x used by ParaView 5.12.0SHA512 396ee901fafacae8aef860b9c9c17cb92ae8b4969527fd271ad8dd9f6a9e0dc8e3dc807c8d43cc585608ad101a64edcd7aff49e1580c7a61a817c2ea8e2655f5HEAD_REF masterPATCHESFindLZMA.patchFindLZ4.patchlibproj.patchpegtl.patchpythonwrapper.patch # Required by ParaView to Wrap required classesNoUndefDebug.patch # Required to link against correct Python library depending on build type.fix-using-hdf5.patch# CHECK: module-name-mangling.patch# Last patch TODO: Patch out internal loguruFindExpat.patch # The find_library calls are taken care of by vcpkg-cmake-wrapper.cmake of expat# fix-gdal.patch TODO?cgns.patchvtkm.patchafxdll.patchvtkioss.patchjsoncpp.patchiotr.patchfast-float.patchfix-exprtk.patch # just for dbow2 and theiadevendor_exodusII.patchremove-prefix-changes.patchhdf5helper.patchopencascade-7.8.0.patchno-libharu-for-ioexport.patchno-libproj-for-netcdf.patchoctree.patchfix-tbbsmptool.patch #https://gitlab.kitware.com/vtk/vtk/-/merge_requests/11530
)# =============================================================================
#Overwrite outdated modules if they have not been patched:
file(COPY "${CURRENT_PORT_DIR}/FindHDF5.cmake" DESTINATION "${SOURCE_PATH}/CMake/patches/99") # due to usage of targets in netcdf-cfile(REMOVE "${SOURCE_PATH}/CMake/FindOGG.cmake")
vcpkg_replace_string("${SOURCE_PATH}/ThirdParty/ogg/CMakeLists.txt" "OGG::OGG" "Ogg::ogg")
vcpkg_replace_string("${SOURCE_PATH}/ThirdParty/ogg/CMakeLists.txt" "OGG" "Ogg")
vcpkg_replace_string("${SOURCE_PATH}/CMake/vtkInstallCMakePackage.cmake" "FindOGG.cmake\n" "")
vcpkg_replace_string("${SOURCE_PATH}/CMake/FindTHEORA.cmake" "find_dependency(OGG)" "find_dependency(Ogg CONFIG)")
vcpkg_replace_string("${SOURCE_PATH}/CMake/FindTHEORA.cmake" "OGG::OGG" "Ogg::ogg")# =============================================================================# =============================================================================
# Options:
# Collect CMake options for optional components# Strict wiring of features/dependencies to VTK modules
# VTK_MODULE_ENABLE... and VTK_GROUP_ENABLE... do not use ON/OFF but
# VTK's special NO/DONT_WANT/WANT/YES/DEFAULT (cf. vtkModule.cmake).
# This section produces either YES or NO (after postprocessing).
# YES/NO are also okay for regular CMake options instead of ON/OFF,
# so we can consolidate VTK and CMake settings here.
vcpkg_check_features(OUT_FEATURE_OPTIONS VTK_YES_NO_OPTIONSFEATURES"all"         VTK_BUILD_ALL_MODULES"atlmfc"      VTK_MODULE_ENABLE_VTK_GUISupportMFC"cgns"        VCPKG_LOCK_FIND_PACKAGE_CGNS"cuda"        VTK_USE_CUDA"debugleaks"  VTK_DEBUG_LEAKS"libharu"     VCPKG_LOCK_FIND_PACKAGE_LibHaru"libtheora"   VCPKG_LOCK_FIND_PACKAGE_THEORA"netcdf"      VCPKG_LOCK_FIND_PACKAGE_NetCDF"netcdf"      VTK_MODULE_ENABLE_VTK_netcdf"netcdf"      VTK_MODULE_ENABLE_VTK_IOMINC"netcdf"      VTK_MODULE_ENABLE_VTK_IONetCDF"openmp"      VTK_SMP_ENABLE_OPENMP"proj"        VCPKG_LOCK_FIND_PACKAGE_PROJ"proj"        VTK_MODULE_ENABLE_VTK_libproj"proj"        VTK_MODULE_ENABLE_VTK_IOCesium3DTiles"proj"        VTK_MODULE_ENABLE_VTK_GeovisCore"python"      VTK_WRAP_PYTHON"python"      VTK_MODULE_ENABLE_VTK_Python"python"      VTK_MODULE_ENABLE_VTK_PythonInterpreter"seacas"      VCPKG_LOCK_FIND_PACKAGE_SEACASExodus"seacas"      VCPKG_LOCK_FIND_PACKAGE_SEACASIoss"sql"         VCPKG_LOCK_FIND_PACKAGE_SQLite3"sql"         VTK_MODULE_ENABLE_VTK_sqlite"sql"         VTK_MODULE_ENABLE_VTK_IOSQL"tbb"         VTK_SMP_ENABLE_TBB"vtkm"        VTK_MODULE_ENABLE_VTK_vtkm"vtkm"        VTK_MODULE_ENABLE_VTK_AcceleratorsVTKmCore"vtkm"        VTK_MODULE_ENABLE_VTK_AcceleratorsVTKmDataModel"vtkm"        VTK_MODULE_ENABLE_VTK_AcceleratorsVTKmFiltersINVERTED_FEATURES"all"         VTK_FORBID_DOWNLOADS
)
list(TRANSFORM VTK_YES_NO_OPTIONS REPLACE "=ON" "=YES")
list(TRANSFORM VTK_YES_NO_OPTIONS REPLACE "=OFF" "=NO")# TODO:
# - add loguru as a dependency requires #8682
vcpkg_check_features(OUT_FEATURE_OPTIONS VTK_FEATURE_OPTIONSFEATURES"qt"          VTK_GROUP_ENABLE_Qt"qt"          VTK_MODULE_ENABLE_VTK_GUISupportQt"qt"          VTK_MODULE_ENABLE_VTK_GUISupportQtSQL"qt"          VTK_MODULE_ENABLE_VTK_RenderingQt"qt"          VTK_MODULE_ENABLE_VTK_ViewsQt"python"      VTK_MODULE_ENABLE_VTK_Python"python"      VTK_MODULE_ENABLE_VTK_PythonContext2D"python"      VTK_MODULE_ENABLE_VTK_PythonInterpreter"paraview"    VTK_MODULE_ENABLE_VTK_FiltersParallelStatistics"paraview"    VTK_MODULE_ENABLE_VTK_IOParallelExodus"paraview"    VTK_MODULE_ENABLE_VTK_RenderingParallel"paraview"    VTK_MODULE_ENABLE_VTK_RenderingVolumeAMR"paraview"    VTK_MODULE_ENABLE_VTK_IOXdmf2"paraview"    VTK_MODULE_ENABLE_VTK_IOH5part"paraview"    VTK_MODULE_ENABLE_VTK_IOH5Rage"paraview"    VTK_MODULE_ENABLE_VTK_IOParallelLSDyna"paraview"    VTK_MODULE_ENABLE_VTK_IOTRUCHAS"paraview"    VTK_MODULE_ENABLE_VTK_IOVPIC"paraview"    VTK_MODULE_ENABLE_VTK_RenderingAnnotation"paraview"    VTK_MODULE_ENABLE_VTK_DomainsChemistry"paraview"    VTK_MODULE_ENABLE_VTK_FiltersParallelDIY2"paraview"    VTK_MODULE_ENABLE_VTK_cli11"paraview"    VTK_MODULE_ENABLE_VTK_FiltersOpenTURNS"paraview"    VTK_MODULE_ENABLE_VTK_FiltersParallelVerdict"paraview"    VTK_MODULE_ENABLE_VTK_IOOMF"paraview"    VTK_MODULE_ENABLE_VTK_IOPIO"mpi"         VTK_GROUP_ENABLE_MPI"opengl"      VTK_MODULE_ENABLE_VTK_ImagingOpenGL2"opengl"      VTK_MODULE_ENABLE_VTK_RenderingGL2PSOpenGL2"opengl"      VTK_MODULE_ENABLE_VTK_RenderingOpenGL2"opengl"      VTK_MODULE_ENABLE_VTK_RenderingVolumeOpenGL2"opengl"      VTK_MODULE_ENABLE_VTK_opengl"openvr"      VTK_MODULE_ENABLE_VTK_RenderingOpenVR"gdal"        VTK_MODULE_ENABLE_VTK_IOGDAL"geojson"     VTK_MODULE_ENABLE_VTK_IOGeoJSON"ioocct"      VTK_MODULE_ENABLE_VTK_IOOCCT"libtheora"   VTK_MODULE_ENABLE_VTK_IOOggTheora"libharu"     VTK_MODULE_ENABLE_VTK_IOExportPDF"cgns"        VTK_MODULE_ENABLE_VTK_IOCGNSReader"seacas"      VTK_MODULE_ENABLE_VTK_IOIOSS"seacas"      VTK_MODULE_ENABLE_VTK_IOExodus
)
# Replace common value to vtk value
list(TRANSFORM VTK_FEATURE_OPTIONS REPLACE "=ON" "=YES")
list(TRANSFORM VTK_FEATURE_OPTIONS REPLACE "=OFF" "=DONT_WANT")if("qt" IN_LIST FEATURES)#file(READ "${CURRENT_INSTALLED_DIR}/share/qtbase/vcpkg_abi_info.txt" qtbase_abi_info)file(READ "${CURRENT_INSTALLED_DIR}/share/qt5-base/vcpkg_abi_info.txt" qtbase_abi_info)if(qtbase_abi_info MATCHES "(^|;)gles2(;|$)")message(FATAL_ERROR "VTK assumes qt to be build with desktop opengl. As such trying to build vtk with qt using GLES will fail.") # This should really be a configure error but using this approach doesn't require patching. endif()#if(NOT EXISTS "${CURRENT_HOST_INSTALLED_DIR}/tools/Qt6/bin/qmlplugindump${VCPKG_HOST_EXECUTABLE_SUFFIX}")if(NOT EXISTS "${CURRENT_HOST_INSTALLED_DIR}/tools/qt5/bin/qmlplugindump${VCPKG_HOST_EXECUTABLE_SUFFIX}")list(APPEND VTK_FEATURE_OPTIONS -DVTK_MODULE_ENABLE_VTK_GUISupportQtQuick=NO)endif()
endif()if("python" IN_LIST FEATURES)vcpkg_get_vcpkg_installed_python(PYTHON3)list(APPEND ADDITIONAL_OPTIONS-DPython3_FIND_REGISTRY=NEVER"-DPython3_EXECUTABLE:PATH=${PYTHON3}""-DVTK_PYTHON_SITE_PACKAGES_SUFFIX=${PYTHON3_SITE}" # from vcpkg-port-config.cmake)#VTK_PYTHON_SITE_PACKAGES_SUFFIX should be set to the install dir of the site-packages
endif()if ("paraview" IN_LIST FEATURES OR "opengl" IN_LIST FEATURES)list(APPEND ADDITIONAL_OPTIONS-DVTK_MODULE_ENABLE_VTK_RenderingContextOpenGL2=YES-DVTK_MODULE_ENABLE_VTK_RenderingLICOpenGL2=YES-DVTK_MODULE_ENABLE_VTK_RenderingAnnotation=YES-DVTK_MODULE_ENABLE_VTK_DomainsChemistryOpenGL2=YES-DVTK_MODULE_ENABLE_VTK_FiltersParallelDIY2=YES)
endif()if ("paraview" IN_LIST FEATURES AND "python" IN_LIST FEATURES)list(APPEND ADDITIONAL_OPTIONS-DVTK_MODULE_ENABLE_VTK_WebCore=YES-DVTK_MODULE_ENABLE_VTK_WebPython=YES-DVTK_MODULE_ENABLE_VTK_RenderingMatplotlib=YES)
endif()set(use_mpi OFF)
if("mpi" IN_LIST FEATURES)set(use_mpi ON)
elseif(HDF5_WITH_PARALLEL)message(WARNING "${HDF5_WITH_PARALLEL} Enabling VTK MPI.")set(use_mpi ON)
endif()
list(APPEND ADDITIONAL_OPTIONS -DVTK_USE_MPI=${use_mpi})
if(use_mpi)list(APPEND ADDITIONAL_OPTIONS -DVTK_MODULE_ENABLE_VTK_ParallelMPI=YES)if("paraview" IN_LIST FEATURES)list(APPEND ADDITIONAL_OPTIONS-DVTK_MODULE_ENABLE_VTK_FiltersParallelFlowPaths=YES-DVTK_MODULE_ENABLE_VTK_RenderingParallelLIC=YES)endif()if("python" IN_LIST FEATURES)list(APPEND ADDITIONAL_OPTIONS-DVTK_MODULE_USE_EXTERNAL_VTK_mpi4py=OFF)endif()
endif()if("cuda" IN_LIST FEATURES)vcpkg_find_cuda(OUT_CUDA_TOOLKIT_ROOT cuda_toolkit_root)list(APPEND ADDITIONAL_OPTIONS"-DCMAKE_CUDA_COMPILER=${NVCC}""-DCUDAToolkit_ROOT=${cuda_toolkit_root}")
endif()if("utf8" IN_LIST FEATURES)list(APPEND ADDITIONAL_OPTIONS-DKWSYS_ENCODING_DEFAULT_CODEPAGE=CP_UTF8)
endif()if("tbb" IN_LIST FEATURES)list(APPEND ADDITIONAL_OPTIONS-DVTK_SMP_IMPLEMENTATION_TYPE=TBB)
endif()if("openmp" IN_LIST FEATURES)list(APPEND ADDITIONAL_OPTIONS-DVTK_SMP_IMPLEMENTATION_TYPE=OpenMP)
endif()if(VCPKG_CROSSCOMPILING)list(APPEND ADDITIONAL_OPTIONS"-DVTKCompileTools_DIR=${CURRENT_HOST_INSTALLED_DIR}/share/vtk-compile-tools")
endif()# =============================================================================
# Configure & Install# We set all libraries to "system" and explicitly list the ones that should use embedded copies
vcpkg_cmake_configure(SOURCE_PATH "${SOURCE_PATH}"OPTIONS${VTK_FEATURE_OPTIONS}${VTK_YES_NO_OPTIONS}${ADDITIONAL_OPTIONS}-DBUILD_TESTING=OFF-DVTK_BUILD_TESTING=OFF-DVTK_BUILD_EXAMPLES=OFF-DVTK_ENABLE_REMOTE_MODULES=OFF# VTK groups to enable-DVTK_GROUP_ENABLE_StandAlone=YES-DVTK_GROUP_ENABLE_Rendering=YES-DVTK_GROUP_ENABLE_Views=YES# Disable deps not in VCPKG-DVTK_USE_TK=OFF # TCL/TK currently not included in vcpkg# Select modules / groups to install-DVTK_USE_EXTERNAL:BOOL=ON-DVTK_MODULE_USE_EXTERNAL_VTK_token:BOOL=OFF # Not yet in VCPKG#-DVTK_MODULE_ENABLE_VTK_jsoncpp=YES-DVTK_DEBUG_MODULE_ALL=ON-DVTK_DEBUG_MODULE=ON#-DVTK_QT_VERSION=6-DVTK_QT_VERSION=5-DCMAKE_INSTALL_QMLDIR:PATH=qml-DVCPKG_HOST_TRIPLET=${_HOST_TRIPLET}-DCMAKE_FIND_PACKAGE_TARGETS_GLOBAL=ON # Due to Qt6::Platform not being found on Linux platformMAYBE_UNUSED_VARIABLESVTK_MODULE_ENABLE_VTK_PythonContext2D # Guarded by a conditionalVTK_MODULE_ENABLE_VTK_GUISupportMFC # only windowsVTK_MODULE_ENABLE_VTK_vtkmVTK_MODULE_USE_EXTERNAL_VTK_mpi4py# Only with QtCMAKE_INSTALL_QMLDIRVTK_QT_VERSION # Only with Qt# When working properly these should be unusedVCPKG_LOCK_FIND_PACKAGE_CGNSVCPKG_LOCK_FIND_PACKAGE_LibHaruVCPKG_LOCK_FIND_PACKAGE_NetCDFVCPKG_LOCK_FIND_PACKAGE_PROJVCPKG_LOCK_FIND_PACKAGE_SEACASExodusVCPKG_LOCK_FIND_PACKAGE_SEACASIossVCPKG_LOCK_FIND_PACKAGE_SQLite3VCPKG_LOCK_FIND_PACKAGE_THEORA
)vcpkg_cmake_install()
vcpkg_copy_pdbs()# =============================================================================
# Fixup target files
vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/vtk-${VTK_SHORT_VERSION})# =============================================================================
# Clean-up other directories# Delete the debug binary TOOL_NAME that is not required
function(_vtk_remove_debug_tool TOOL_NAME)set(filename "${CURRENT_PACKAGES_DIR}/debug/bin/${TOOL_NAME}${VCPKG_TARGET_EXECUTABLE_SUFFIX}")if(EXISTS "${filename}")file(REMOVE "${filename}")endif()set(filename "${CURRENT_PACKAGES_DIR}/debug/bin/${TOOL_NAME}d${VCPKG_TARGET_EXECUTABLE_SUFFIX}")if(EXISTS "${filename}")file(REMOVE "${filename}")endif()if (NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL debug)# we also have to bend the lines referencing the tools in VTKTargets-debug.cmake# to make them point to the release version of the toolsfile(READ "${CURRENT_PACKAGES_DIR}/share/vtk/VTK-targets-debug.cmake" VTK_TARGETS_CONTENT_DEBUG)string(REPLACE "debug/bin/${TOOL_NAME}" "tools/vtk/${TOOL_NAME}" VTK_TARGETS_CONTENT_DEBUG "${VTK_TARGETS_CONTENT_DEBUG}")string(REPLACE "tools/vtk/${TOOL_NAME}d" "tools/vtk/${TOOL_NAME}" VTK_TARGETS_CONTENT_DEBUG "${VTK_TARGETS_CONTENT_DEBUG}")file(WRITE "${CURRENT_PACKAGES_DIR}/share/vtk/VTK-targets-debug.cmake" "${VTK_TARGETS_CONTENT_DEBUG}")endif()
endfunction()# Move the release binary TOOL_NAME from bin to tools
function(_vtk_move_release_tool TOOL_NAME)set(old_filename "${CURRENT_PACKAGES_DIR}/bin/${TOOL_NAME}${VCPKG_TARGET_EXECUTABLE_SUFFIX}")if(EXISTS "${old_filename}")file(INSTALL "${old_filename}" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/vtk" USE_SOURCE_PERMISSIONS)file(REMOVE "${old_filename}")endif()if (NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL release)# we also have to bend the lines referencing the tools in VTKTargets-release.cmake# to make them point to the tool folderfile(READ "${CURRENT_PACKAGES_DIR}/share/vtk/VTK-targets-release.cmake" VTK_TARGETS_CONTENT_RELEASE)string(REPLACE "bin/${TOOL_NAME}" "tools/vtk/${TOOL_NAME}" VTK_TARGETS_CONTENT_RELEASE "${VTK_TARGETS_CONTENT_RELEASE}")file(WRITE "${CURRENT_PACKAGES_DIR}/share/vtk/VTK-targets-release.cmake" "${VTK_TARGETS_CONTENT_RELEASE}")endif()
endfunction()set(VTK_TOOLSvtkEncodeString-${VTK_SHORT_VERSION}vtkHashSource-${VTK_SHORT_VERSION}vtkWrapTclInit-${VTK_SHORT_VERSION}vtkWrapTcl-${VTK_SHORT_VERSION}vtkWrapPythonInit-${VTK_SHORT_VERSION}vtkWrapPython-${VTK_SHORT_VERSION}vtkWrapJava-${VTK_SHORT_VERSION}vtkWrapHierarchy-${VTK_SHORT_VERSION}vtkParseJava-${VTK_SHORT_VERSION}vtkParseOGLExt-${VTK_SHORT_VERSION}vtkProbeOpenGLVersion-${VTK_SHORT_VERSION}vtkTestOpenGLVersion-${VTK_SHORT_VERSION}vtkpythonpvtkpython
)
# TODO: Replace with vcpkg_copy_tools if known which tools are built with which feature
# or add and option to vcpkg_copy_tools which does not require the tool to be present
foreach(TOOL_NAME IN LISTS VTK_TOOLS)_vtk_remove_debug_tool("${TOOL_NAME}")_vtk_move_release_tool("${TOOL_NAME}")
endforeach()if(EXISTS "${CURRENT_PACKAGES_DIR}/bin/vtktoken-9.3.dll" AND VCPKG_LIBRARY_LINKAGE STREQUAL "static")# vendored "token" library can be only build as a shared libraryset(VCPKG_POLICY_DLLS_IN_STATIC_LIBRARY enabled)
elseif(VCPKG_LIBRARY_LINKAGE STREQUAL "static")file(REMOVE_RECURSE"${CURRENT_PACKAGES_DIR}/bin""${CURRENT_PACKAGES_DIR}/debug/bin")
endif()file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share")vcpkg_copy_tool_dependencies("${CURRENT_PACKAGES_DIR}/tools/vtk")if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")if(EXISTS "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/CMakeFiles/vtkpythonmodules/static_python") #python headersfile(GLOB_RECURSE STATIC_PYTHON_FILES "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/CMakeFiles/*/static_python/*.h")file(INSTALL ${STATIC_PYTHON_FILES} DESTINATION "${CURRENT_PACKAGES_DIR}/include/vtk-${VTK_SHORT_VERSION}")endif()
endif()#remove one get_filename_component(_vtk_module_import_prefix "${_vtk_module_import_prefix}" DIRECTORY) from vtk-prefix.cmake and VTK-vtk-module-properties and vtk-python.cmake
set(filenames_fix_prefix vtk-prefix VTK-vtk-module-properties vtk-python)
foreach(name IN LISTS filenames_fix_prefix)
if(EXISTS "${CURRENT_PACKAGES_DIR}/share/vtk/${name}.cmake")file(READ "${CURRENT_PACKAGES_DIR}/share/vtk/${name}.cmake" _contents)string(REPLACE
[[set(_vtk_module_import_prefix "${CMAKE_CURRENT_LIST_DIR}")
get_filename_component(_vtk_module_import_prefix "${_vtk_module_import_prefix}" DIRECTORY)]]
[[set(_vtk_module_import_prefix "${CMAKE_CURRENT_LIST_DIR}")]] _contents "${_contents}")file(WRITE "${CURRENT_PACKAGES_DIR}/share/vtk/${name}.cmake" "${_contents}")
else()debug_message("FILE:${CURRENT_PACKAGES_DIR}/share/vtk/${name}.cmake does not exist! No prefix correction!")
endif()
endforeach()# Use vcpkg provided find method
file(REMOVE "${CURRENT_PACKAGES_DIR}/share/${PORT}/FindEXPAT.cmake")if(EXISTS "${CURRENT_PACKAGES_DIR}/include/vtk-${VTK_SHORT_VERSION}/vtkChemistryConfigure.h")vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/vtk-${VTK_SHORT_VERSION}/vtkChemistryConfigure.h" "${SOURCE_PATH}" "not/existing" IGNORE_UNCHANGED)
endif()vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/share/vtk/VTK-vtk-module-properties.cmake" "_vtk_module_import_prefix}/lib/vtk-9.3/hierarchy" "_vtk_module_import_prefix}$<$<CONFIG:Debug>:/debug>/lib/vtk-9.3/hierarchy")file(COPY "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")file(RENAME "${CURRENT_PACKAGES_DIR}/share/licenses" "${CURRENT_PACKAGES_DIR}/share/${PORT}/licenses")
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/Copyright.txt" COMMENT [[
This file presents the top-level Copyright.txt.
Additional licenses and notes are located in the licenses directory.
]])

vcpkg.json文件

将qt的配置修改

原来的qt6配置:"qt": {"description": "Qt functionality for VTK","dependencies": [{"name": "qtbase","default-features": false,"features": ["gui","opengl","sql-sqlite","widgets"]},"qtdeclarative",{"name": "vtk","default-features": false,"features": ["sql"]}]},新的的qt5配置:"qt": {"description": "Qt functionality for VTK","dependencies": ["qt5","qt5-declarative",{"name": "vtk","default-features": false,"features": ["sql"]}]},

{"name": "vtk","version-semver": "9.3.0-pv5.12.1","port-version": 11,"description": "Software system for 3D computer graphics, image processing, and visualization","homepage": "https://github.com/Kitware/VTK","license": null,"dependencies": ["double-conversion","eigen3","expat","exprtk","fast-float","fmt",{"name": "freetype","default-features": false,"features": ["zlib"]},"gl2ps","glew",{"name": "hdf5","default-features": false,"features": ["zlib"]},"jsoncpp","libjpeg-turbo","liblzma","libpng",{"name": "libxml2","default-features": false,"features": ["zlib"]},"lz4","nlohmann-json","pegtl","pugixml",{"name": "tiff","default-features": false},"utfcpp",{"name": "vcpkg-cmake","host": true},{"name": "vcpkg-cmake-config","host": true},"verdict",{"name": "vtk-compile-tools","host": true,"platform": "!native"},"zlib"],"default-features": ["cgns","libharu","libtheora","netcdf","proj","seacas","sql"],"features": {"all": {"description": "Build all vtk modules","dependencies": ["ffmpeg","libmysql",{"name": "vtk","default-features": false,"features": ["cgns","gdal","geojson","libharu","libtheora","mpi","netcdf","proj","python","qt","seacas","sql"]},{"name": "vtk","default-features": false,"features": ["atlmfc","utf8"],"platform": "windows"}]},"atlmfc": {"description": "Mfc functionality for vtk on Windows","dependencies": [{"name": "atlmfc","platform": "windows"}]},"cgns": {"description": "CGNS functionality for VTK","dependencies": [{"name": "cgns","default-features": false}]},"cuda": {"description": "Support CUDA compilation","dependencies": ["cuda"]},"debugleaks": {"description": "Enables vtk debug leaks detection"},"gdal": {"description": "Support GDAL compilation","dependencies": [{"name": "gdal","default-features": false}]},"geojson": {"description": "Convert Geo JSON format to vtkPolyData"},"ioocct": {"description": "Build with IOOCCT module","dependencies": [{"name": "opencascade","default-features": false}]},"libharu": {"description": "PDF functionality for VTK","dependencies": [{"name": "libharu","version>=": "2.4.3"}]},"libtheora": {"description": "Compressed ogg functionality for VTK","dependencies": ["libtheora"]},"mpi": {"description": "MPI functionality for VTK","dependencies": [{"name": "hdf5","default-features": false,"features": ["parallel"]},"mpi",{"name": "seacas","default-features": false,"features": ["mpi"]},{"name": "vtk","default-features": false,"features": ["seacas","vtkm"]},{"name": "vtk-m","default-features": false,"features": ["mpi"]}]},"netcdf": {"description": "NetCDF functionality for VTK","dependencies": [{"name": "netcdf-c","default-features": false,"features": ["netcdf-4"]}]},"opengl": {"description": "All opengl related modules"},"openmp": {"description": "Use openmp multithreading parallel implementation"},"openvr": {"description": "OpenVR functionality for VTK","dependencies": ["openvr","sdl2"]},"paraview": {"description": "Build vtk modules required by paraview","dependencies": ["cli11","openturns",{"name": "vtk","default-features": false,"features": ["qt"]},{"name": "vtk","default-features": false,"features": ["atlmfc","libtheora","seacas"],"platform": "windows"}]},"proj": {"description": "Geographic projection functionality for VTK","dependencies": [{"name": "proj","default-features": false}]},"python": {"description": "Python functionality for VTK","dependencies": ["python3"]},"qt": {"description": "Qt functionality for VTK","dependencies": ["qt5","qt5-declarative",{"name": "vtk","default-features": false,"features": ["sql"]}]},"seacas": {"description": "Exodus and IOSS functionality for VTK","dependencies": [{"name": "seacas","default-features": false},{"name": "vtk","default-features": false,"features": ["cgns","netcdf"]}]},"sql": {"description": "SQL functionality for VTK","dependencies": ["sqlite3"]},"tbb": {"description": "Use TBB multithreading parallel implementation","dependencies": ["tbb"]},"utf8": {"description": "Enables vtk reader/writer with utf-8 path support"},"vtkm": {"description": "Build with vtk-m accelerator and module.","dependencies": [{"name": "vtk-m","default-features": false}]}}
}

2.安装VTK

.\vcpkg install vtk[ioocct,qt]也可以省事
.\vcpkg install vtk[all]

会连带基础模块及需要的模块一起安装.

3.在vs中的配置

cmake配置

# CMakeList.txt: CMakeProject1 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
# 设置版本要求
cmake_minimum_required(VERSION 3.16)
# 设置项目名set(DemoName VTKTest001)
project(${DemoName} LANGUAGES CXX)#设置C++版本
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
find_package(Qt${QT_VERSION_MAJOR}COMPONENTSCoreGuiWidgets#opengl
)# 检查是否找到 VTK
find_package(VTK REQUIRED)
if(VTK_FOUND)message(VTK_FOUND=${VTK_FOUND}, Qt${VTK_QT_VERSION}, ${VTK_AUTOINIT_INCLUDE}, ${VTK_LIBRARIES})
else()message(FATAL_ERROR "VTK not found!")
endif()# 自动调用MOC来转换文件
set(CMAKE_AUTOMOC ON) 
# 自动调用UIC来转换文件
set(CMAKE_AUTOUIC ON) 
# 自动调用RCC来转换文件
set(CMAKE_AUTORCC ON) set(PROJECT_SOURCESmain.cppQtMainWindowClass.uiQtMainWindowClass.hQtMainWindowClass.cpp
)add_executable(${DemoName} ${PROJECT_SOURCES})set_target_properties(${DemoName}PROPERTIESWIN32_EXECUTABLE TRUE
)target_link_libraries(${DemoName}PUBLICQt::CoreQt::GuiQt::Widgets#Qt::OpenGL
)target_link_libraries(${DemoName} PRIVATE${VTK_LIBRARIES} 
)# TODO: 如有需要,请添加测试并安装目标。

头文件:

#pragma once#include <QMainWindow>
#include "ui_QtMainWindowClass.h"
#include <QSurfaceFormat> // Qt 表面格式类,用于设置 OpenGL 格式#include <QVTKOpenGLNativeWidget.h>#include <vtkSphereSource.h>
#include <vtkPolyData.h>
#include <vtkPolyDataCollection.h>
#include <vtkPolyDataMapper.h> // VTK 数据映射器,将几何数据映射到图形管线
#include <vtkActor.h>  // VTK Actor 类,用于表示场景中的对象
#include <vtkActorCollection.h>  // VTK Actor 类,用于表示场景中的对象#include <vtkRenderer.h>  // VTK 渲染器,负责场景的渲染
#include <vtkGenericOpenGLRenderWindow.h> // VTK 渲染窗口,用于显示渲染内容
#include <vtkNamedColors.h>
#include <vtkProperty.h>
#include <vtkNew.h>
#include <vtkSmartPointer.h>
#include <vtkSTLReader.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkConeSource.h> // VTK 圆锥体源,用于生成圆锥几何体#include <vtkAutoInit.h>class QtMainWindowClass : public QMainWindow
{Q_OBJECTpublic:QtMainWindowClass(QWidget *parent = nullptr);~QtMainWindowClass();void setFile(const QString& sFilename);protected slots:void initWindow();void on_action_Open_triggered();private:QVTKOpenGLNativeWidget* m_qVtkWidget{};vtkSmartPointer<vtkGenericOpenGLRenderWindow> m_RenderWindow{};// 创建一个数据映射器,将几何体数据映射到渲染管线//vtkNew<vtkPolyDataMapper> m_Mapper{};// 创建一个 Actor, 用于表示场景中的对象//vtkNew<vtkActor> m_Actor{};// 创建一个渲染器,负责渲染场景vtkSmartPointer<vtkRenderer> m_Renderer{};vtkSmartPointer<vtkInteractorStyleTrackballCamera> m_OpStyle;//0为轨迹球模式,1为飞行模式,2为自定义模式int m_iOpMode{ 0 };private:Ui::QtMainWindowClass ui;void SetOpMode(int iMode=0);
};

cpp

#include "QtMainWindowClass.h"
#include <QBoxLayout>
#include <QFileDialog>
#include <QDebug>QtMainWindowClass::QtMainWindowClass(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);QVBoxLayout* pLayout = new QVBoxLayout(ui.widget_OsgShow);// 统一 Qt 和 VTK 的 OpenGL 上下文配置,解决因 OpenGL 参数不匹配导致的渲染问题。// 通过 QVTKOpenGLNativeWidget::defaultFormat() 获取 VTK 推荐的 OpenGL 配置// 用 QSurfaceFormat::setDefaultFormat() 将其设为 Qt 全局默认格式QSurfaceFormat::setDefaultFormat(QVTKOpenGLNativeWidget::defaultFormat());//初始化VTK窗口,命名为qvtkWidget(原理和QPushButton这种QT自带的控件一样,只是该控件由VTK提供,用法跟QPushButton是一样的)m_qVtkWidget = new QVTKOpenGLNativeWidget();//初始化VTK的渲染器,平时用的比较多是vtkRenderWindow,但是在QT中要改用vtkGenericOpenGLRenderWindow,实质上与vtkRenderWindow功能一致m_RenderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();//将渲染器加入到VTK窗口中。可以先写这一行,后续再将准备好的vtkRenderer加入到renderWindow中也是可以同步数据的m_qVtkWidget->setRenderWindow(m_RenderWindow.Get());// 设置渲染器的背景颜色(RGB 值)m_Renderer = vtkSmartPointer<vtkRenderer>::New();m_Renderer->SetBackground(0.2, 0.3, 0.4);// 将渲染器添加到渲染窗口小部件m_RenderWindow->AddRenderer(m_Renderer);pLayout->addWidget(m_qVtkWidget);// 设置交互样式(如 TrackballCamera)m_OpStyle = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();m_qVtkWidget->interactor()->SetInteractorStyle(m_OpStyle);
}QtMainWindowClass::~QtMainWindowClass()
{}void QtMainWindowClass::setFile(const QString& sFilename)
{}void QtMainWindowClass::initWindow()
{}void QtMainWindowClass::on_action_Open_triggered()
{//加载模型到group数组中QStringList fileNames = QFileDialog::getOpenFileNames(this,"choice files",QDir::currentPath(),"file (*.stl)");if (!fileNames.isEmpty()) {qDebug() << "choice files:" << fileNames;// 遍历处理每个文件}//vtkNew<vtkPolyDataCollection> vPolyData;//vtkNew<vtkActorCollection> vActor;// 添加新模型for (auto& dir : fileNames){// 创建 STL 读取器vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New();vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();reader->SetFileName(dir.toUtf8().data());reader->Update();mapper->SetInputConnection(reader->GetOutputPort());actor->SetMapper(mapper);m_Renderer->AddActor(actor);}//加载完成数据后,需要重新设置相机,才能显示对应模型//SetOpMode(m_iOpMode);m_RenderWindow->Render();
}void QtMainWindowClass::SetOpMode(int iMode)
{}

http://www.dtcms.com/a/388716.html

相关文章:

  • 【Linux网络编程】传输层协议-----TCP协议
  • 英莱科技焊缝跟踪系统亮相德国埃森焊接展,激光视觉点亮世界舞台
  • 【提示工程】向AI发出高质量的指令(实战篇)
  • LG P5127 子异和 Solution
  • 从位运算角度重新理解树状数组
  • 从零开始构建Kubernetes Operator:一个完整的深度学习训练任务管理方案
  • 关于CAS的ABA问题的原因以及解决?
  • C语言(长期更新)第16讲:字符和字符串函数
  • c过渡c++应知应会(2)
  • 分析下kernel6.6中如何获取下一次的cpu频率
  • 22.4 单卡训练T5-Large!DeepSpeed ZeRO-2让12GB显存hold住770M参数模型
  • 《Linux 常用 C 函数参考手册》更新 2.0 版本啦!适合 C 语言开发者、Linux 系统程序员、嵌入式开发者使用
  • str.maketrans() 方法
  • 漫谈:C语言 C++ 声明和定义的区别是什么
  • Java企业级开发中的对象类型深度解析:PO、Entity、BO、DTO、VO、POJO 使用场景、功能介绍、是否必须、总结对比
  • 从弱 AI 到通用人工智能(AGI):核心技术壁垒与人类社会的适配挑战
  • 数据序列化语言---YAML
  • Dify: Step2 Dify模型配置 Dify, Docker,ollama是什么关系
  • SSH连接排故排查
  • 【DMA】DMA架构解析
  • STM32HAL库-移植mbedtls开源库示例(一)
  • MAP的具体实现
  • 排序不等式的推广,对于任意两个数列的推广
  • 9.7.3 损失函数
  • Java Web开发的基石:深入理解Servlet与JSP​
  • pyOCD发布V0.39版本(2025-09-17)
  • kernel侧CPU是怎样判断共享的?
  • pcl案例六 基于配准的无序抓取
  • 动态库和静态库的链接加载
  • 离线安装docker镜像