From d372aefa7cb2473b51d3f398bc6866ae59f40732 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patryk=20Skowro=C5=84ski?= Date: Mon, 16 Sep 2024 11:19:25 +0200 Subject: [PATCH 1/4] NavLib integration enabled for MacOS --- cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake | 6 +++--- src/Gui/3Dconnexion/navlib/NavlibNavigation.cpp | 2 ++ src/Gui/3Dconnexion/navlib/NavlibPivot.cpp | 2 ++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake b/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake index e9aa47fd6e30..65711b74f871 100644 --- a/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake +++ b/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake @@ -142,12 +142,12 @@ macro(InitializeFreeCADBuildOptions) option(BUILD_CLOUD "Build the FreeCAD cloud module" OFF) option(ENABLE_DEVELOPER_TESTS "Build the FreeCAD unit tests suit" ON) - if(MSVC) + if(MSVC OR APPLE) set(FREECAD_3DCONNEXION_SUPPORT "NavLib" CACHE STRING "Select version of the 3Dconnexion device integration") set_property(CACHE FREECAD_3DCONNEXION_SUPPORT PROPERTY STRINGS "NavLib" "Raw input") - else(MSVC) + else(MSVC OR APPLE) set(FREECAD_3DCONNEXION_SUPPORT "Raw input") - endif(MSVC) + endif(MSVC OR APPLE) if(MSVC) option(BUILD_FEM_NETGEN "Build the FreeCAD FEM module with the NETGEN mesher" ON) diff --git a/src/Gui/3Dconnexion/navlib/NavlibNavigation.cpp b/src/Gui/3Dconnexion/navlib/NavlibNavigation.cpp index 5acd45cd368c..00e40ba46c69 100644 --- a/src/Gui/3Dconnexion/navlib/NavlibNavigation.cpp +++ b/src/Gui/3Dconnexion/navlib/NavlibNavigation.cpp @@ -122,6 +122,8 @@ CameraType NavlibInterface::getCamera() const return nullptr; } +template SoCamera* NavlibInterface::getCamera() const; + void NavlibInterface::onViewChanged(const Gui::MDIView* view) { if (view == nullptr) diff --git a/src/Gui/3Dconnexion/navlib/NavlibPivot.cpp b/src/Gui/3Dconnexion/navlib/NavlibPivot.cpp index 1b8ed7524b97..716fcdb796cb 100644 --- a/src/Gui/3Dconnexion/navlib/NavlibPivot.cpp +++ b/src/Gui/3Dconnexion/navlib/NavlibPivot.cpp @@ -109,6 +109,8 @@ long NavlibInterface::SetPivotVisible(bool visible) return 0; } +extern template SoCamera* NavlibInterface::getCamera() const; + long NavlibInterface::GetHitLookAt(navlib::point_t& position) const { if (is2DView()) From f0884b1529da67ec914b105b0d8b53435de47eae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patryk=20Skowro=C5=84ski?= Date: Wed, 18 Sep 2024 13:13:08 +0200 Subject: [PATCH 2/4] Fixed detection of startup workbench --- src/Gui/3Dconnexion/navlib/NavlibNavigation.cpp | 3 ++- src/Gui/3Dconnexion/navlib/NavlibPivot.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Gui/3Dconnexion/navlib/NavlibNavigation.cpp b/src/Gui/3Dconnexion/navlib/NavlibNavigation.cpp index 00e40ba46c69..9944cf3bdaad 100644 --- a/src/Gui/3Dconnexion/navlib/NavlibNavigation.cpp +++ b/src/Gui/3Dconnexion/navlib/NavlibNavigation.cpp @@ -182,7 +182,8 @@ void NavlibInterface::enableNavigation() exportCommands(std::string(wb)); }); - exportCommands("StartWorkbench"); + auto activeWorkbench = Gui::WorkbenchManager::instance()->activeName(); + exportCommands(activeWorkbench); initializePivot(); connectActiveTab(); diff --git a/src/Gui/3Dconnexion/navlib/NavlibPivot.cpp b/src/Gui/3Dconnexion/navlib/NavlibPivot.cpp index 716fcdb796cb..87505613b470 100644 --- a/src/Gui/3Dconnexion/navlib/NavlibPivot.cpp +++ b/src/Gui/3Dconnexion/navlib/NavlibPivot.cpp @@ -113,7 +113,7 @@ extern template SoCamera* NavlibInterface::getCamera() const; long NavlibInterface::GetHitLookAt(navlib::point_t& position) const { - if (is2DView()) + if (is2DView() || !is3DView()) return navlib::make_result_code(navlib::navlib_errc::no_data_available); const Gui::View3DInventorViewer* const inventorViewer = currentView.pView3d->getViewer(); From 8bb3d719cf4c50b33e2041013bb94ed6279972f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patryk=20Skowro=C5=84ski?= Date: Fri, 4 Oct 2024 16:02:08 +0200 Subject: [PATCH 3/4] CMake build flag fix --- cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake b/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake index 65711b74f871..76504e0fe758 100644 --- a/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake +++ b/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake @@ -153,7 +153,9 @@ macro(InitializeFreeCADBuildOptions) option(BUILD_FEM_NETGEN "Build the FreeCAD FEM module with the NETGEN mesher" ON) option(FREECAD_USE_PCL "Build the features that use PCL libs" OFF) # 3/5/2021 current LibPack uses non-C++17 FLANN option(FREECAD_USE_3DCONNEXION "Use the 3D connexion SDK to support 3d mouse." ON) - elseif(APPLE) + elseif(APPLE AND FREECAD_3DCONNEXION_SUPPORT STREQUAL "NavLib") + option(FREECAD_USE_3DCONNEXION "Use the 3D connexion SDK to support 3d mouse." ON) + elseif(APPLE AND FREECAD_3DCONNEXION_SUPPORT STREQUAL "Raw input") find_library(3DCONNEXIONCLIENT_FRAMEWORK 3DconnexionClient) if(IS_DIRECTORY ${3DCONNEXIONCLIENT_FRAMEWORK}) option(FREECAD_USE_3DCONNEXION "Use the 3D connexion SDK to support 3d mouse." ON) From f2fb3f6b074cab19bd9536a968eda80bc15418d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patryk=20Skowro=C5=84ski?= Date: Thu, 9 Jan 2025 16:03:51 +0100 Subject: [PATCH 4/4] Fixed CMake files for a runtime switch --- .../InitializeFreeCADBuildOptions.cmake | 28 ++++++++--------- cMake/FreeCAD_Helpers/PrintFinalReport.cmake | 16 ++++------ src/Gui/CMakeLists.txt | 30 +++++++++---------- 3 files changed, 35 insertions(+), 39 deletions(-) diff --git a/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake b/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake index be8e26c16cdc..278e2ef5c50c 100644 --- a/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake +++ b/cMake/FreeCAD_Helpers/InitializeFreeCADBuildOptions.cmake @@ -144,28 +144,28 @@ macro(InitializeFreeCADBuildOptions) if(MSVC OR APPLE) set(FREECAD_3DCONNEXION_SUPPORT "NavLib" CACHE STRING "Select version of the 3Dconnexion device integration") - set_property(CACHE FREECAD_3DCONNEXION_SUPPORT PROPERTY STRINGS "NavLib" "Raw input" "Both") - option(FREECAD_USE_3DCONNEXION "Use the 3D connexion SDK to support 3d mouse." ON) + set_property(CACHE FREECAD_3DCONNEXION_SUPPORT PROPERTY STRINGS "None" "NavLib" "Legacy" "Both") else(MSVC OR APPLE) - set(FREECAD_USE_3DCONNEXION_RAWINPUT ON) - set(FREECAD_USE_3DCONNEXION OFF ) + set(FREECAD_USE_3DCONNEXION_LEGACY ON) endif(MSVC OR APPLE) - if(FREECAD_3DCONNEXION_SUPPORT STREQUAL "NavLib" AND FREECAD_USE_3DCONNEXION) + if(FREECAD_3DCONNEXION_SUPPORT STREQUAL "NavLib") set(FREECAD_USE_3DCONNEXION_NAVLIB ON) - set(FREECAD_USE_3DCONNEXION OFF) - elseif(FREECAD_3DCONNEXION_SUPPORT STREQUAL "Both" AND FREECAD_USE_3DCONNEXION) + elseif(FREECAD_3DCONNEXION_SUPPORT STREQUAL "Both") set(FREECAD_USE_3DCONNEXION_NAVLIB ON) - set(FREECAD_USE_3DCONNEXION_RAWINPUT ON) + set(FREECAD_USE_3DCONNEXION_LEGACY ON) + elseif(FREECAD_3DCONNEXION_SUPPORT STREQUAL "Legacy") + set(FREECAD_USE_3DCONNEXION_LEGACY ON) + elseif(FREECAD_3DCONNEXION_SUPPORT STREQUAL "None") + set(FREECAD_USE_3DCONNEXION_NAVLIB OFF) + set(FREECAD_USE_3DCONNEXION_LEGACY OFF) endif() - if(APPLE AND NOT (FREECAD_3DCONNEXION_SUPPORT STREQUAL "NavLib")) + if(APPLE AND FREECAD_USE_3DCONNEXION_LEGACY) find_library(3DCONNEXIONCLIENT_FRAMEWORK 3DconnexionClient) - if(IS_DIRECTORY ${3DCONNEXIONCLIENT_FRAMEWORK}) - option(FREECAD_USE_3DCONNEXION "Use the 3D connexion SDK to support 3d mouse." ON) - else(IS_DIRECTORY ${3DCONNEXIONCLIENT_FRAMEWORK}) - option(FREECAD_USE_3DCONNEXION "Use the 3D connexion SDK to support 3d mouse." OFF) - endif(IS_DIRECTORY ${3DCONNEXIONCLIENT_FRAMEWORK}) + if(NOT (IS_DIRECTORY ${3DCONNEXIONCLIENT_FRAMEWORK})) + set(FREECAD_USE_3DCONNEXION_LEGACY OFF) + endif() endif() if(MSVC) diff --git a/cMake/FreeCAD_Helpers/PrintFinalReport.cmake b/cMake/FreeCAD_Helpers/PrintFinalReport.cmake index 23b2dca37ac9..dfb8e3d7d4f1 100644 --- a/cMake/FreeCAD_Helpers/PrintFinalReport.cmake +++ b/cMake/FreeCAD_Helpers/PrintFinalReport.cmake @@ -193,20 +193,16 @@ macro(PrintFinalReport) simple(OpenGLU_Incl [${OPENGL_INCLUDE_DIR}]) simple(Coin3D "${COIN3D_VERSION} [${COIN3D_LIBRARIES}] [${COIN3D_INCLUDE_DIRS}]") simple(pivy ${PIVY_VERSION}) - if (WIN32) - if (FREECAD_USE_3DCONNEXION_RAWINPUT AND FREECAD_USE_3DCONNEXION_NAVLIB) - simple(3Dconnexion "Building 3Dconnexion support with raw input and NavLib") - elseif (FREECAD_USE_3DCONNEXION) - simple(3Dconnexion "Building 3Dconnexion support with raw input") + if(WIN32 OR APPLE) + if(FREECAD_USE_3DCONNEXION_LEGACY AND FREECAD_USE_3DCONNEXION_NAVLIB) + simple(3Dconnexion "Building with 3Dconnexion legacy and NavLib support") + elseif(FREECAD_USE_3DCONNEXION_LEGACY) + simple(3Dconnexion "Building with 3Dconnexion legacy support") elseif(FREECAD_USE_3DCONNEXION_NAVLIB) - simple(3Dconnexion "Building 3Dconnexion support with NavLib") + simple(3Dconnexion "Building with 3Dconnexion NavLib support") else() simple(3Dconnexion "Not building 3Dconnexion device support") endif() - elseif(APPLE) - if (FREECAD_USE_3DCONNEXION) - simple(3Dconnexion "Building 3Dconnexion support with raw input") - endif() else() conditional(SPNAV SPNAV_FOUND "not found" "[${SPNAV_LIBRARY}] [${SPNAV_INCLUDE_DIR}]") endif() diff --git a/src/Gui/CMakeLists.txt b/src/Gui/CMakeLists.txt index 3bf6f8d4621a..e55511291f74 100644 --- a/src/Gui/CMakeLists.txt +++ b/src/Gui/CMakeLists.txt @@ -19,21 +19,21 @@ IF(CMAKE_BUILD_TYPE) add_definitions(-DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}") ENDIF(CMAKE_BUILD_TYPE) -if (FREECAD_USE_3DCONNEXION) +if (FREECAD_USE_3DCONNEXION_LEGACY) add_definitions(-D_USE_3DCONNEXION_SDK) if(APPLE) set(3DCONNEXION_LINKFLAGS "-F/Library/Frameworks -weak_framework 3DconnexionClient") - set(3DCONNEXION_INCLUDE_DIR ${3DCONNEXIONCLIENT_FRAMEWORK}/Headers + list(APPEND 3DCONNEXION_INCLUDE_DIR ${3DCONNEXIONCLIENT_FRAMEWORK}/Headers ${3DCONNEXIONCLIENT_FRAMEWORK}/Headers/3DconnexionClient ) endif(APPLE) -endif(FREECAD_USE_3DCONNEXION) +endif(FREECAD_USE_3DCONNEXION_LEGACY) if(FREECAD_USE_3DCONNEXION_NAVLIB AND (MSVC OR APPLE)) add_definitions(-DUSE_3DCONNEXION_NAVLIB) if(APPLE) add_definitions(-D__APPLE__) endif(APPLE) - set(3DCONNEXION_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/src/3rdParty/3Dconnexion/inc) + list(APPEND 3DCONNEXION_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/src/3rdParty/3Dconnexion/inc) endif(FREECAD_USE_3DCONNEXION_NAVLIB AND (MSVC OR APPLE)) if (BUILD_VR) @@ -78,7 +78,7 @@ if(MSVC) ${OPENGL_gl_LIBRARY} ) - if(FREECAD_USE_3DCONNEXION) + if(FREECAD_USE_3DCONNEXION_LEGACY) list(APPEND FreeCADGui_LIBS hid ) @@ -275,7 +275,7 @@ SET(FreeCADGui_XML_SRCS SOURCE_GROUP("XML" FILES ${FreeCADApp_XML_SRCS}) # The 3D Connexion SDK files -if(FREECAD_USE_3DCONNEXION AND MSVC) +if(FREECAD_USE_3DCONNEXION_LEGACY AND MSVC) SET(FreeCADGui_SDK_SRCS 3Dconnexion/I3dMouseParams.h 3Dconnexion/MouseParameters.cpp @@ -294,9 +294,9 @@ if(FREECAD_USE_3DCONNEXION AND MSVC) list(APPEND FreeCADGui_connexion_HDRS ${FreeCADGui_SDK_MOC_HDRS} ) -endif(FREECAD_USE_3DCONNEXION AND MSVC) +endif(FREECAD_USE_3DCONNEXION_LEGACY AND MSVC) -if(FREECAD_USE_3DCONNEXION AND APPLE) +if(FREECAD_USE_3DCONNEXION_LEGACY AND APPLE) SET(FreeCADGui_SDK_SRCS 3Dconnexion/GuiAbstractNativeEvent.cpp 3Dconnexion/GuiNativeEventMac.cpp @@ -312,7 +312,7 @@ if(FREECAD_USE_3DCONNEXION AND APPLE) list(APPEND FreeCADGui_connexion_HDRS ${FreeCADGui_SDK_MOC_HDRS} ) -endif(FREECAD_USE_3DCONNEXION AND APPLE) +endif(FREECAD_USE_3DCONNEXION_LEGACY AND APPLE) if(FREECAD_USE_3DCONNEXION_NAVLIB AND (MSVC OR APPLE)) SET(NAVLIB_STUB_DIR ${CMAKE_SOURCE_DIR}/src/3rdParty/3Dconnexion/src) @@ -414,9 +414,9 @@ SET(Gui_UIC_SRCS VectorListEditor.ui ) -if(FREECAD_USE_3DCONNEXION_RAWINPUT) +if(FREECAD_USE_3DCONNEXION_LEGACY) list(APPEND Gui_UIC_SRCS DlgCustomizeSpNavSettings.ui) -endif(FREECAD_USE_3DCONNEXION_RAWINPUT) +endif(FREECAD_USE_3DCONNEXION_LEGACY) set (FreeCAD_TR_QRC ${CMAKE_CURRENT_BINARY_DIR}/Language/FreeCAD_translation.qrc) qt_find_and_add_translation(QM_SRCS "Language/FreeCAD_*.ts" @@ -605,10 +605,10 @@ SET(Dialog_Customize_HPP_SRCS ListWidgetDragBugFix.h ) -if(FREECAD_USE_3DCONNEXION_RAWINPUT) +if(FREECAD_USE_3DCONNEXION_LEGACY) list(APPEND Dialog_Customize_CPP_SRCS DlgCustomizeSpaceball.cpp DlgCustomizeSpNavSettings.cpp) list(APPEND Dialog_Customize_HPP_SRCS DlgCustomizeSpaceball.h DlgCustomizeSpNavSettings.h) -endif(FREECAD_USE_3DCONNEXION_RAWINPUT) +endif(FREECAD_USE_3DCONNEXION_LEGACY) SET(Dialog_Customize_SRCS ${Dialog_Customize_CPP_SRCS} @@ -619,9 +619,9 @@ SET(Dialog_Customize_SRCS DlgToolbars.ui ) -if(FREECAD_USE_3DCONNEXION_RAWINPUT) +if(FREECAD_USE_3DCONNEXION_LEGACY) list(APPEND Dialog_Customize_SRCS DlgCustomizeSpNavSettings.ui) -endif(FREECAD_USE_3DCONNEXION_RAWINPUT) +endif(FREECAD_USE_3DCONNEXION_LEGACY) SOURCE_GROUP("Dialog\\Customize" FILES ${Dialog_Customize_SRCS})