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.pswp.cn/bicheng/98266.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/98266.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/98266.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Axios在鴻蒙應用開發中的使用

目錄一、簡介二、安裝與配置三、axios用法1.axios泛型參數(1).第三個泛型參數-約束data請求參數的類型(2).第二個泛型參數-決定后臺返回數據的類型2.axios攔截器3.請求工具封裝統一處理業務狀態碼錯誤統一處理401或404錯誤一、簡介 Axios 是一個基于 Promise 的網絡請求庫&…

第九周文件上傳

文件上傳漏洞 不同的網站要不同的webshell。我們使用是php開發的網站。 一服務器白名單繞過 服務端白名單(Whitelist)是?種安全機制&#xff0c;它只允許預定義的合法元素通過&#xff08;只有有限的元素進入&#xff09;&#xff0c;其他所有內容默認被拒絕。相比黑名單&am…

計算機視覺必讀論文:從經典到前沿

計算機視覺必讀論文:從經典到前沿 一、前言 二、經典論文解讀? 2.1 圖像分類? 2.1.1 《ImageNet Classification with Deep Convolutional Neural Networks》(AlexNet)? 2.1.2 《Very Deep Convolutional Networks for Large-Scale Image Recognition》(VGGNet)? 2.1.…

對比PowerBI的字段參數,QuickBI的已選字段還有改進的空間

對比PowerBI的字段參數&#xff0c;QuickBI的已選字段還有改進的空間 之前分享過QuickBI的已選字段 vs PowerBI的字段參數&#xff0c;QuickBI可以在表格中實現PowerBI的字段參數效果&#xff0c;甚至比PowerBI實現的過程和使用方式更絲滑。 但如果應用到圖形中會怎么樣呢&am…

飛算JavaAI:Java開發新時代的破曉之光

免責聲明&#xff1a;此文章的所有內容皆是本人實驗測評&#xff0c;并非廣告推廣&#xff0c;并非抄襲。如有侵權&#xff0c;請聯系&#xff0c;謝謝&#xff01;【#飛算JavaAl炫技賽】 【#Java開發】摘要&#xff1a;飛算JavaAI作為全球首款聚焦Java的智能開發助手&#xff…

vulntarget-c靶場內網滲透

1. 環境搭建 2.對ubuntu20的滲透 對其進行端口掃描 訪問80端口 發現是laravel框架。版本是v8.78.1 使用 kaili 自帶的msf 進行滲透 search laravel use exploit/multi/php/ignition_laravel_debug_rce執行利用完成檢測 上傳木馬 先將木馬進行base64編碼 <?php eval($_P…

基于大模型多模態的人體體型評估:從“尺碼測量”到“視覺-感受”范式

基于大模型多模態的人體體型評估&#xff1a;從“尺碼測量”到“視覺-感受”范式摘要&#xff1a;傳統體型識別依賴CV骨架/關鍵點與像素量尺&#xff0c;容易受衣物、發型、姿態、光照影響&#xff0c;且“厘米級數值”與穿衣體驗、審美感受之間存在鴻溝。本文提出一種基于大模…

【docker】——docker國內可用的源

不知道哪里來的&#xff0c;但是可以用。1. 解決方案打開配置文件&#xff08;若文件不存在&#xff0c;會自動創建&#xff09; sudo vim /etc/docker/daemon.json將以下內容粘貼進去{"builder": {"gc": {"defaultKeepStorage": "20GB&quo…

【Windows端口管理】快速查看和釋放被系統保留的TCP端口

問題描述在Windows系統開發時&#xff0c;經常遇到端口無法使用的問題。系統會自動保留一系列TCP/UDP端口范圍&#xff0c;導致應用程序無法綁定這些端口。查看所有被保留的端口范圍查看TCP保留端口# 查看所有TCP端口排除范圍 netsh interface ipv4 show excludedportrange pro…

面經匯總(1)

1.介紹C面向對象的三大特性2.介紹常見的排序算法3.介紹TCP/UDP區別4.TCP三次握手四次揮手5.如果四次揮手第四次客戶端的ACK沒有發出去會有什么結果&#xff1f;6.介紹MYSQL的事務7.介紹線程池8.主要的線程池有哪幾種&#xff1f;9.手撕反轉鏈表10.介紹對象存儲以及常見的對象存…

遙感圖像數字水印系統優化方案

遙感圖像數字水印系統優化方案 1. 引言 遙感圖像在現代地理信息系統、環境監測、軍事偵察等領域發揮著重要作用。為了保護遙感圖像的版權和完整性&#xff0c;數字水印技術被廣泛應用。然而&#xff0c;現有的遙感圖像水印方案往往在不可見性、魯棒性和容量之間存在權衡&#x…

鴻蒙高效數據處理框架全攻略:緩存、并行與流式實戰

摘要 在如今的物聯網和智能設備世界里&#xff0c;數據已經成為最關鍵的資源。無論是可穿戴設備、智能家居&#xff0c;還是車載系統&#xff0c;每一秒都會產生大量數據。如果缺少一套高效的數據處理框架&#xff0c;開發者就可能面臨內存溢出、處理延遲大、設備卡頓等問題。本…

零售企業數字化轉型的道、法、術:基于開源AI大模型AI智能名片S2B2C商城小程序的戰略重構

摘要 在數字經濟與消費升級的雙重驅動下&#xff0c;零售企業正經歷從"流量爭奪"到"用戶時間爭奪"的范式轉變。本文以阿里巴巴、京東、萬達三大巨頭的戰略實踐為樣本&#xff0c;結合開源AI大模型、AI智能名片與S2B2C商城小程序的技術特性&#xff0c;提出…

瑞云渲染為電影《731》提供云渲染技術支持,助力影片全球上映

在“九一八事變”94周年這一莊嚴沉重的紀念時刻&#xff0c;抗戰電影《731》&#xff08;海外名&#xff1a;《EVIL UNBOUND》&#xff09;于世界各地上映&#xff0c;激起廣泛的社會反響與深遠的歷史思考。 瑞云渲染&#xff08;Renderbus&#xff09;作為全球領先的云渲染服…

EasyDSS視頻直播RTMP推流技術如何實現多機型的無人機視頻統一直播

在當今這個瞬息萬變的傳媒時代&#xff0c;無人機與推流直播的結合&#xff0c;正以前所未有的方式重塑著信息傳播的邊界。無人機以其獨特的空中視角和靈活的機動性&#xff0c;為直播行業帶來了革命性的變化&#xff0c;而推流直播技術的成熟&#xff0c;則讓這一變化得以實時…

str.maketrans() 方法

str.maketrans() 方法 功能概述 str.maketrans() 是 Python 中字符串對象的一個靜態方法&#xff0c;用于創建一個字符映射轉換表。這個轉換表本質上是一個字典&#xff0c;它定義了字符之間的替換規則&#xff0c;后續可以被 str.translate() 方法使用&#xff0c;以實現字符串…

敏感詞檢測API平臺推薦

敏感詞檢測API平臺推薦 背景簡介 敏感詞檢測用于識別文本中的違規、涉政、涉黃、辱罵等敏感詞&#xff0c;幫助產品在評論、彈幕、客服對話、運營文案、廣告投放等環節實現自動化質檢與合規攔截。市場上主要有兩類服務商&#xff1a; 專業型廠商&#xff1a;聚焦算法與工程落…

Day25_【深度學習(3)—PyTorch使用(6)—張量拼接操作】

張量的拼接操作在神經網絡搭建過程中是非常常用的方法&#xff0c;例如: 在后面將要學習的注意力機制中都使用到了張量拼接。torch.cat 函數可以將兩個張量根據指定的維度拼接起來&#xff0c;不改變數據維度。前提&#xff1a;除了拼接的維度&#xff0c;其他維度一定要相同。…

機器視覺在PCB制造中的檢測應用

機器視覺在PCB制造中的檢測應用&#x1f3af;機器視覺在PCB制造中的檢測應用&#x1f3af;一、基材預處理階段&#xff1a;基材表面缺陷檢測&#x1f3af;二、線路制作階段&#xff1a;線路精度與缺陷檢測&#x1f3af;三、鉆孔與導通孔加工階段&#xff1a;孔位與孔質量檢測&a…

Python面試題及詳細答案150道(136-150) -- 網絡編程及常見問題篇

《前后端面試題》專欄集合了前后端各個知識模塊的面試題&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…