diff --git a/README.md b/README.md index c461fc2e..6f8e1268 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Cybervision is a 3D reconstruction software for Scanning Electron Microscope images. It's an abandoned project, but can be useful as a working example for many, many technologies, such as: -* [Qt 5.15](https://doc.qt.io/qt-5.15/) (including threads, vectors, graphics and 3D rendering) +* [Qt 6.2](https://doc.qt.io/qt-6.2/) (including threads, vectors, graphics and 3D rendering) * [Eigen library](http://eigen.tuxfamily.org/) * [libsift library](https://sourceforge.net/projects/libsift/) * [OpenCL](https://www.khronos.org/registry/OpenCL/) diff --git a/cybervision/.gitignore b/cybervision/.gitignore index 7d64ad4f..01e00f3a 100644 --- a/cybervision/.gitignore +++ b/cybervision/.gitignore @@ -1 +1 @@ -/cybervision.pro.user +CMakeLists.txt.user diff --git a/cybervision/CMakeLists.txt b/cybervision/CMakeLists.txt new file mode 100644 index 00000000..399a7181 --- /dev/null +++ b/cybervision/CMakeLists.txt @@ -0,0 +1,43 @@ +cmake_minimum_required(VERSION 3.21) + +project(cybervision LANGUAGES CXX) + +if (NOT DEFINED CYBERVISION_OPENCL) + set(CYBERVISION_OPENCL ON CACHE BOOL "Enable OpenCL") +endif() +if (NOT DEFINED CYBERVISION_SSE) + set(CYBERVISION_SSE ON CACHE BOOL "Enable SSE") +endif() +if (NOT DEFINED CYBERVISION_OPENMP) + set(CYBERVISION_OPENMP ON CACHE BOOL "Enable OpenMP") +endif() +if (NOT DEFINED CYBERVISION_DEMO) + set(CYBERVISION_DEMO OFF CACHE BOOL "Demo mode") +endif() + +if(CYBERVISION_DEMO) + list(APPEND cybervision_features "Demo") +endif() + +if(NOT CYBERVISION_OPENCL) + list(APPEND cybervision_features "noOpenCL") +endif() + +if(NOT CYBERVISION_SSE) + list(APPEND cybervision_features "noSSE") +endif() + +if(NOT CYBERVISION_OPENMP) + list(APPEND cybervision_features "noSSE") +endif() + +if(cybervision_features) + list(JOIN cybervision_features "_" CYBERVISION_SUFFIX) + string(PREPEND CYBERVISION_SUFFIX "_") +endif() + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +add_subdirectory(cybervision-app) +add_subdirectory(libsiftfast) diff --git a/cybervision/cybervision-app/CMakeLists.txt b/cybervision/cybervision-app/CMakeLists.txt new file mode 100644 index 00000000..9e6dcc80 --- /dev/null +++ b/cybervision/cybervision-app/CMakeLists.txt @@ -0,0 +1,108 @@ +cmake_minimum_required(VERSION 3.21) + +project(cybervision-app LANGUAGES CXX) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets 3DCore 3DRender 3DExtras) + +set(PROJECT_SOURCES + main.cpp + UI/mainwindow.cpp + Reconstruction/pointmatcher.cpp + Reconstruction/pointmatch.cpp + Reconstruction/fundamentalmatrix.cpp + Reconstruction/pointtriangulator.cpp + Reconstruction/reconstructor.cpp + Reconstruction/options.cpp + Reconstruction/sculptor.cpp + Reconstruction/surface.cpp + Reconstruction/imageloader.cpp + Reconstruction/pointmatcheropencl.cpp + Reconstruction/crosssection.cpp + KDTree/kdtreegateway.cpp + UI/processthread.cpp + UI/cybervisionviewer.cpp + UI/crosssectionwindow.cpp + UI/aboutwindow.cpp + Reconstruction/pointmatcher.h + Reconstruction/pointmatch.h + Reconstruction/fundamentalmatrix.h + Reconstruction/reconstructor.h + Reconstruction/pointtriangulator.h + Reconstruction/options.h + Reconstruction/sculptor.h + Reconstruction/surface.h + Reconstruction/imageloader.h + Reconstruction/pointmatcheropencl.h + Reconstruction/crosssection.h + Reconstruction/config.h + KDTree/kdtreegateway.h + UI/mainwindow.h + UI/processthread.h + UI/cybervisionviewer.h + UI/crosssectionwindow.h + UI/aboutwindow.h + UI/mainwindow.ui + UI/crosssectionwindow.ui + UI/aboutwindow.ui + ReconstructionResources.qrc + UI/translations/cybervision-app_ru.ts +) + +qt_add_executable(cybervision-app + MANUAL_FINALIZATION + ${PROJECT_SOURCES} +) + +target_link_libraries(cybervision-app PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets Qt6::3DCore Qt6::3DRender Qt6::3DExtras) +target_link_libraries(cybervision-app PRIVATE libsiftfast) + +if(CYBERVISION_OPENCL) + target_compile_definitions(cybervision-app PRIVATE + CYBERVISION_OPENCL + ) + target_link_libraries(cybervision-app PRIVATE + OpenCL + ) +endif() + +if(CYBERVISION_OPENMP) + target_link_libraries(cybervision-app PUBLIC + gomp + pthread + ) + target_compile_options(cybervision-app PRIVATE + -fopenmp + ) +endif() + +if(CYBERVISION_SSE) + target_compile_options(cybervision-app PRIVATE + -msse3 + ) +endif() + +if(CYBERVISION_DEMO) + target_compile_definitions(cybervision-app PRIVATE + CYBERVISION_DEMO + ) +endif() + +target_compile_options(cybervision-app PRIVATE + $<$:-Wa,-mbig-obj> +) + +set_target_properties(cybervision-app PROPERTIES + WIN32_EXECUTABLE TRUE + OUTPUT_NAME "cybervision${CYBERVISION_SUFFIX}" +) + +qt_finalize_executable(cybervision-app) diff --git a/cybervision/cybervision-app/cybervision-app.pro b/cybervision/cybervision-app/cybervision-app.pro deleted file mode 100644 index 052a0430..00000000 --- a/cybervision/cybervision-app/cybervision-app.pro +++ /dev/null @@ -1,137 +0,0 @@ -include( ../cybervision-options.pri ) - -QT += core gui widgets 3dcore 3drender 3dextras -TARGET = cybervision$${CYBERVISION_SUFFIX} -TEMPLATE = app - -CONFIG += exceptions - -SOURCES += main.cpp \ - UI/mainwindow.cpp \ - Reconstruction/pointmatcher.cpp \ - Reconstruction/pointmatch.cpp \ - Reconstruction/fundamentalmatrix.cpp \ - Reconstruction/pointtriangulator.cpp \ - Reconstruction/reconstructor.cpp \ - Reconstruction/options.cpp \ - Reconstruction/sculptor.cpp \ - Reconstruction/surface.cpp \ - Reconstruction/imageloader.cpp \ - Reconstruction/pointmatcheropencl.cpp \ - Reconstruction/crosssection.cpp \ - KDTree/kdtreegateway.cpp \ - UI/processthread.cpp \ - UI/cybervisionviewer.cpp \ - UI/crosssectionwindow.cpp \ - UI/aboutwindow.cpp - -HEADERS += \ - Reconstruction/pointmatcher.h \ - Reconstruction/pointmatch.h \ - Reconstruction/fundamentalmatrix.h \ - Reconstruction/reconstructor.h \ - Reconstruction/pointtriangulator.h \ - Reconstruction/options.h \ - Reconstruction/sculptor.h \ - Reconstruction/surface.h \ - Reconstruction/imageloader.h \ - Reconstruction/pointmatcheropencl.h \ - Reconstruction/crosssection.h \ - Reconstruction/config.h \ - KDTree/kdtreegateway.h \ - UI/mainwindow.h \ - UI/processthread.h \ - UI/cybervisionviewer.h \ - UI/crosssectionwindow.h \ - UI/aboutwindow.h - -FORMS += UI/mainwindow.ui \ - UI/crosssectionwindow.ui \ - UI/aboutwindow.ui - -RESOURCES += \ - ReconstructionResources.qrc - -OTHER_FILES += \ - Reconstruction/ColladaTemplate.xml \ - Reconstruction/PointMatcherKernel.cl \ - Reconstruction/SceneJSTemplate.js \ - UI/cybervision.rc \ - UI/translations/cybervision-app_ru.ts - -DISTFILES += \ - UI/icons/cybervision.png \ - UI/icons/cybervision.ico \ - UI/icons/cybervision-large.svg \ - UI/icons/arrow-repeat.svg \ - UI/icons/arrows-move.svg \ - UI/icons/back.svg \ - UI/icons/badge-3d.svg \ - UI/icons/collection.svg \ - UI/icons/easel.svg \ - UI/icons/file-earmark-easel.svg \ - UI/icons/file-earmark-image.svg \ - UI/icons/file-earmark-minus.svg \ - UI/icons/file-earmark-plus.svg \ - UI/icons/front.svg \ - UI/icons/grid-3x3.svg \ - UI/icons/info-circle.svg \ - UI/icons/rulers.svg \ - UI/icons/save.svg \ - UI/icons/search.svg \ - UI/icons/sliders.svg \ - UI/icons/x-square.svg - -TRANSLATIONS = UI/translations/cybervision-app_ru.ts -CODECFORTR = UTF-8 - -INCLUDEPATH += $$PWD/../libsiftfast -DEPENDPATH += $$PWD/../libsiftfast - -equals(CYBERVISION_OPENCL, true){ - DEFINES += CYBERVISION_OPENCL -} - -equals(CYBERVISION_DEMO, true){ - DEFINES += CYBERVISION_DEMO -} - -win32 { - RC_FILE = UI/cybervision.rc -} -win32-g++ { - equals(CYBERVISION_OPENMP,true){ - QMAKE_CXXFLAGS += -fopenmp - LIBS += -lgomp -lpthread - } - - equals(CYBERVISION_SSE, true): QMAKE_CXXFLAGS += -msse3 - - equals(CYBERVISION_OPENCL, true){ - LIBS += -lOpenCL - } - QMAKE_CXXFLAGS_DEBUG += -Wa,-mbig-obj -} - -unix { - equals(CYBERVISION_OPENMP,true){ - QMAKE_CXXFLAGS += -fopenmp - LIBS += -lgomp -lpthread - } - - equals(CYBERVISION_SSE, true): QMAKE_CXXFLAGS += -msse3 - - equals(CYBERVISION_OPENCL, true){ - INCLUDEPATH += /opt/AMDAPP/include - LIBS += -L/opt/AMDAPP/lib/x86_64 -lOpenCL -lGLU - } -} - -win32-msvc*:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../libsiftfast/release -lsiftfast$${CYBERVISION_SUFFIX} -else:win32-msvc*:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../libsiftfast/debug -lsiftfast$${CYBERVISION_SUFFIX} -else:win32-g++:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../libsiftfast/release -dynamic -lsiftfast$${CYBERVISION_SUFFIX} -else:win32-g++:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../libsiftfast/debug -dynamic -lsiftfast$${CYBERVISION_SUFFIX} -else:win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../libsiftfast/release -lsiftfast$${CYBERVISION_SUFFIX} -else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../libsiftfast/debug -lsiftfast$${CYBERVISION_SUFFIX} -else:symbian: LIBS += -lsiftfast$${CYBERVISION_SUFFIX} -else:unix: LIBS += -L$$OUT_PWD/../libsiftfast -dynamic -lsiftfast$${CYBERVISION_SUFFIX} diff --git a/cybervision/cybervision-options.pri b/cybervision/cybervision-options.pri deleted file mode 100644 index 210f028a..00000000 --- a/cybervision/cybervision-options.pri +++ /dev/null @@ -1,41 +0,0 @@ -CYBERVISION_BUILD_OPTIONS = -#CYBERVISION_BUILD_OPTIONS = noOpenCL -#CYBERVISION_BUILD_OPTIONS = noOpenCL noSSE -#CYBERVISION_BUILD_OPTIONS = Demo -#CYBERVISION_BUILD_OPTIONS = Demo noOpenCL -#CYBERVISION_BUILD_OPTIONS = Demo noOpenCL noSSE - -CYBERVISION_SSE = false -CYBERVISION_OPENCL = false -CYBERVISION_DEMO = false - -CYBERVISION_SUFFIX= $$join(CYBERVISION_BUILD_OPTIONS,"_","_") -#message("CYBERVISION_SUFFIX= $${CYBERVISION_SUFFIX}") - -contains(CYBERVISION_BUILD_OPTIONS,"Demo"){ - #message("Demo mode enabled in qmake") - CYBERVISION_DEMO = true -}else{ - #message("Demo mode disabled in qmake") -} - -contains(CYBERVISION_BUILD_OPTIONS,"noOpenCL"){ - #message("OpenCL disabled in qmake") -}else{ - #message("OpenCL enabled in qmake") - CYBERVISION_OPENCL = true -} - -contains(CYBERVISION_BUILD_OPTIONS,"noSSE"){ - #message("SSE disabled in qmake") -}else{ - #message("SSE enabled in qmake") - CYBERVISION_SSE = true -} - -contains(CYBERVISION_BUILD_OPTIONS,"noOpenMP"){ - #message("OpenMP disabled in qmake") -}else{ - #message("OpenMP enabled in qmake") - CYBERVISION_OPENMP = true -} diff --git a/cybervision/cybervision.pro b/cybervision/cybervision.pro deleted file mode 100644 index dfd8acbc..00000000 --- a/cybervision/cybervision.pro +++ /dev/null @@ -1,14 +0,0 @@ -TEMPLATE = subdirs - -CONFIG += ordered - -DEPENDPATH += libsiftfast - -OTHER_FILES += \ - cybervision-options.pri - -SUBDIRS = \ - libsiftfast \ - cybervision-app - -cybervision-app.depends = libsiftfast diff --git a/cybervision/libsiftfast/CMakeLists.txt b/cybervision/libsiftfast/CMakeLists.txt new file mode 100644 index 00000000..ec814d1c --- /dev/null +++ b/cybervision/libsiftfast/CMakeLists.txt @@ -0,0 +1,46 @@ +cmake_minimum_required(VERSION 3.21) + +project(libsiftfast LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +set(PROJECT_SOURCES + SIFT/siftgateway.h + SIFT/siftfast.h + SIFT/msvc-exports.h + SIFT/siftgateway.cpp + SIFT/libsiftfast.cpp +) + +find_package(Qt6 REQUIRED COMPONENTS Gui) + +add_library(libsiftfast SHARED + ${PROJECT_SOURCES} +) + +target_link_libraries(libsiftfast PRIVATE Qt::Gui) + +set_target_properties(libsiftfast PROPERTIES + OUTPUT_NAME "siftfast${CYBERVISION_SUFFIX}" +) + +target_include_directories(libsiftfast + PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} +) + +if(CYBERVISION_OPENMP) + target_link_libraries(libsiftfast PUBLIC + gomp + pthread + ) + target_compile_options(libsiftfast PRIVATE + -fopenmp + ) +endif() + +if(CYBERVISION_SSE) + target_compile_options(libsiftfast PRIVATE + -msse3 + ) +endif() diff --git a/cybervision/libsiftfast/libsiftfast.pro b/cybervision/libsiftfast/libsiftfast.pro deleted file mode 100644 index d50040fd..00000000 --- a/cybervision/libsiftfast/libsiftfast.pro +++ /dev/null @@ -1,32 +0,0 @@ -include( ../cybervision-options.pri ) - -TARGET = siftfast$${CYBERVISION_SUFFIX} - -TEMPLATE = lib - -CONFIG += shared - -HEADERS += \ - SIFT/siftgateway.h \ - SIFT/siftfast.h \ - SIFT/msvc-exports.h - -SOURCES += \ - SIFT/siftgateway.cpp \ - SIFT/libsiftfast.cpp - -win32-g++ { - equals(CYBERVISION_OPENMP,true){ - QMAKE_CXXFLAGS += -fopenmp - LIBS += -lgomp -lpthread - } - equals(CYBERVISION_SSE, true): QMAKE_CXXFLAGS += -msse3 -} - -unix { - equals(CYBERVISION_OPENMP,true){ - QMAKE_CXXFLAGS += -fopenmp - LIBS += -lgomp -lpthread - } - equals(CYBERVISION_SSE, true): QMAKE_CXXFLAGS += -msse3 -}