下载: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&…