diff --git a/.github/workflows/CI_master.yml b/.github/workflows/CI_master.yml index c36304c27b5c..2358903e940a 100644 --- a/.github/workflows/CI_master.yml +++ b/.github/workflows/CI_master.yml @@ -26,7 +26,15 @@ name: FreeCAD master CI -on: [workflow_dispatch, push, pull_request, merge_group] +on: + push: + branches: [ "SimplerBody" ] + pull_request: + branches: [ "SimplerBody" ] + merge_group: + branches: [ "SimplerBody" ] + workflow_dispatch: + concurrency: group: FC-CI-${{ github.head_ref || github.run_id }} diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 3ef1d4873fc9..587d6c2a46db 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -13,9 +13,9 @@ name: "CodeQL Advanced" on: push: - branches: [ "main" ] + branches: [ "SimplerBody" ] pull_request: - branches: [ "main" ] + branches: [ "SimplerBody" ] schedule: - cron: '28 12 * * 6' diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index fb8227448baa..c549479f6405 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -12,7 +12,7 @@ on: schedule: - cron: '20 7 * * 2' push: - branches: ["main"] + branches: ["SimplerBody"] # Declare default permissions as read only. permissions: read-all diff --git a/.github/workflows/sub_weeklyBuild.yml b/.github/workflows/sub_weeklyBuild.yml index fd61db266311..02edd2b48f97 100644 --- a/.github/workflows/sub_weeklyBuild.yml +++ b/.github/workflows/sub_weeklyBuild.yml @@ -63,9 +63,9 @@ jobs: include: - { target: linux-64, os: ubuntu-22.04 } - { target: linux-arm64, os: ubuntu-22.04-arm } - - { target: osx-64, os: macos-13 } - - { target: osx-arm64, os: macos-latest } - { target: win-64, os: windows-latest } +# - { target: osx-64, os: macos-13 } +# - { target: osx-arm64, os: macos-latest } fail-fast: false runs-on: ${{ matrix.os }} diff --git a/aqtinstall.log b/aqtinstall.log new file mode 100644 index 000000000000..a8d584f95a9f --- /dev/null +++ b/aqtinstall.log @@ -0,0 +1,388 @@ +2025-10-27 00:06:41,788 - aqt.main - INFO - installer 140585577065344 aqtinstall(aqt) v3.1.21 on Python 3.11.13 [CPython GCC 13.3.0] +2025-10-27 00:06:41,789 - aqt.helper - DEBUG - helper 140585577065344 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/Updates.xml.sha256 +2025-10-27 00:06:43,298 - aqt.helper - DEBUG - helper 140585577065344 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/extensions/qtwebengine/683/x86_64/Updates.xml.sha256 +2025-10-27 00:06:44,915 - aqt.archives - INFO - archives 140585577065344 Found extension qtwebengine +2025-10-27 00:06:44,916 - aqt.helper - DEBUG - helper 140585577065344 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/extensions/qtpdf/683/x86_64/Updates.xml.sha256 +2025-10-27 00:06:46,470 - aqt.archives - INFO - archives 140585577065344 Found extension qtpdf +2025-10-27 00:06:47,004 - aqt.helper - DEBUG - helper 140227454868352 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtbase-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z.sha256 +2025-10-27 00:06:47,004 - aqt.helper - DEBUG - helper 140531392535424 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtsvg-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z.sha256 +2025-10-27 00:06:47,006 - aqt.helper - DEBUG - helper 139881032870784 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtdeclarative-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z.sha256 +2025-10-27 00:06:47,007 - aqt.helper - DEBUG - helper 139924496116608 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qttools-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z.sha256 +2025-10-27 00:06:47,718 - aqt.helper - INFO - helper 140227454868352 Downloading qtbase... +2025-10-27 00:06:47,718 - aqt.installer - DEBUG - installer 140227454868352 Download URL: https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtbase-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-10-27 00:06:47,731 - aqt.helper - INFO - helper 139924496116608 Downloading qttools... +2025-10-27 00:06:47,731 - aqt.helper - INFO - helper 140531392535424 Downloading qtsvg... +2025-10-27 00:06:47,731 - aqt.installer - DEBUG - installer 139924496116608 Download URL: https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qttools-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-10-27 00:06:47,732 - aqt.installer - DEBUG - installer 140531392535424 Download URL: https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtsvg-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-10-27 00:06:47,785 - aqt.helper - INFO - helper 139881032870784 Downloading qtdeclarative... +2025-10-27 00:06:47,786 - aqt.installer - DEBUG - installer 139881032870784 Download URL: https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtdeclarative-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-10-27 00:06:48,318 - aqt.helper - DEBUG - helper 140531392535424 Asked to redirect(302) to: https://qt.mirror.constant.com/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtsvg-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-10-27 00:06:48,318 - aqt.helper - INFO - helper 140531392535424 Redirected: qt.mirror.constant.com +2025-10-27 00:06:48,374 - aqt.helper - DEBUG - helper 139924496116608 Asked to redirect(302) to: https://qt.mirror.constant.com/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qttools-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-10-27 00:06:48,374 - aqt.helper - INFO - helper 139924496116608 Redirected: qt.mirror.constant.com +2025-10-27 00:06:48,375 - aqt.helper - DEBUG - helper 140227454868352 Asked to redirect(302) to: https://qt.mirror.constant.com/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtbase-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-10-27 00:06:48,375 - aqt.helper - INFO - helper 140227454868352 Redirected: qt.mirror.constant.com +2025-10-27 00:06:48,388 - aqt.helper - DEBUG - helper 139881032870784 Asked to redirect(302) to: https://qt.mirror.constant.com/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtdeclarative-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-10-27 00:06:48,388 - aqt.helper - INFO - helper 139881032870784 Redirected: qt.mirror.constant.com +2025-10-27 00:06:48,843 - aqt.installer - INFO - installer 140531392535424 Finished installation of qtsvg-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z in 1.84162809 +2025-10-27 00:06:48,859 - aqt.helper - DEBUG - helper 140531392535424 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qttranslations-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z.sha256 +2025-10-27 00:06:49,475 - aqt.helper - INFO - helper 140531392535424 Downloading qttranslations... +2025-10-27 00:06:49,476 - aqt.installer - DEBUG - installer 140531392535424 Download URL: https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qttranslations-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-10-27 00:06:50,081 - aqt.helper - DEBUG - helper 140531392535424 Asked to redirect(302) to: https://qt.mirror.constant.com/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qttranslations-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-10-27 00:06:50,082 - aqt.helper - INFO - helper 140531392535424 Redirected: qt.mirror.constant.com +2025-10-27 00:06:50,617 - aqt.installer - INFO - installer 140531392535424 Finished installation of qttranslations-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z in 1.76088553 +2025-10-27 00:06:50,632 - aqt.helper - DEBUG - helper 140531392535424 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtwayland-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z.sha256 +2025-10-27 00:06:51,391 - aqt.helper - INFO - helper 140531392535424 Downloading qtwayland... +2025-10-27 00:06:51,392 - aqt.installer - DEBUG - installer 140531392535424 Download URL: https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtwayland-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-10-27 00:06:51,967 - aqt.installer - INFO - installer 139924496116608 Finished installation of qttools-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z in 4.96244999 +2025-10-27 00:06:51,980 - aqt.helper - DEBUG - helper 139924496116608 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345icu-linux-Rhel8.6-x86_64.7z.sha256 +2025-10-27 00:06:51,988 - aqt.helper - DEBUG - helper 140531392535424 Asked to redirect(302) to: https://qt.mirror.constant.com/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtwayland-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-10-27 00:06:51,988 - aqt.helper - INFO - helper 140531392535424 Redirected: qt.mirror.constant.com +2025-10-27 00:06:52,548 - aqt.installer - INFO - installer 140531392535424 Finished installation of qtwayland-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z in 1.91764746 +2025-10-27 00:06:52,569 - aqt.installer - INFO - installer 140227454868352 Finished installation of qtbase-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z in 5.56750763 +2025-10-27 00:06:52,572 - aqt.helper - INFO - helper 139924496116608 Downloading icu... +2025-10-27 00:06:52,572 - aqt.installer - DEBUG - installer 139924496116608 Download URL: https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345icu-linux-Rhel8.6-x86_64.7z +2025-10-27 00:06:53,152 - aqt.helper - DEBUG - helper 139924496116608 Asked to redirect(302) to: https://qt.mirror.constant.com/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345icu-linux-Rhel8.6-x86_64.7z +2025-10-27 00:06:53,152 - aqt.helper - INFO - helper 139924496116608 Redirected: qt.mirror.constant.com +2025-10-27 00:06:54,164 - aqt.installer - INFO - installer 139924496116608 Finished installation of icu-linux-Rhel8.6-x86_64.7z in 2.18569309 +2025-10-27 00:07:01,558 - aqt.installer - INFO - installer 139881032870784 Finished installation of qtdeclarative-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z in 14.55452933 +2025-10-27 00:07:01,650 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/bin/qmake +2025-10-27 00:07:01,654 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Sql.pc +2025-10-27 00:07:01,655 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Core.pc +2025-10-27 00:07:01,655 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6SvgWidgets.pc +2025-10-27 00:07:01,655 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6DBus.pc +2025-10-27 00:07:01,655 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Platform.pc +2025-10-27 00:07:01,656 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Qml.pc +2025-10-27 00:07:01,656 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6UiPlugin.pc +2025-10-27 00:07:01,656 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2UniversalStyleImpl.pc +2025-10-27 00:07:01,656 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2BasicStyleImpl.pc +2025-10-27 00:07:01,656 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2.pc +2025-10-27 00:07:01,657 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2Fusion.pc +2025-10-27 00:07:01,657 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Network.pc +2025-10-27 00:07:01,657 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Help.pc +2025-10-27 00:07:01,657 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6LabsWavefrontMesh.pc +2025-10-27 00:07:01,657 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickWidgets.pc +2025-10-27 00:07:01,658 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickDialogs2.pc +2025-10-27 00:07:01,658 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2Material.pc +2025-10-27 00:07:01,658 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Xml.pc +2025-10-27 00:07:01,658 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickTemplates2.pc +2025-10-27 00:07:01,658 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6UiTools.pc +2025-10-27 00:07:01,659 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Gui.pc +2025-10-27 00:07:01,659 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2FluentWinUI3StyleImpl.pc +2025-10-27 00:07:01,659 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Designer.pc +2025-10-27 00:07:01,659 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickLayouts.pc +2025-10-27 00:07:01,660 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QmlIntegration.pc +2025-10-27 00:07:01,660 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6PrintSupport.pc +2025-10-27 00:07:01,660 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6LabsAnimation.pc +2025-10-27 00:07:01,660 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6LabsSettings.pc +2025-10-27 00:07:01,660 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2Universal.pc +2025-10-27 00:07:01,661 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Linguist.pc +2025-10-27 00:07:01,661 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QmlNetwork.pc +2025-10-27 00:07:01,661 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6LabsFolderListModel.pc +2025-10-27 00:07:01,661 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QmlAssetDownloader.pc +2025-10-27 00:07:01,662 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QmlXmlListModel.pc +2025-10-27 00:07:01,662 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Concurrent.pc +2025-10-27 00:07:01,662 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6OpenGL.pc +2025-10-27 00:07:01,662 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6LabsQmlModels.pc +2025-10-27 00:07:01,663 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickVectorImage.pc +2025-10-27 00:07:01,663 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2Imagine.pc +2025-10-27 00:07:01,663 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6WaylandClient.pc +2025-10-27 00:07:01,663 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Svg.pc +2025-10-27 00:07:01,663 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2MaterialStyleImpl.pc +2025-10-27 00:07:01,664 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QmlMeta.pc +2025-10-27 00:07:01,664 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Test.pc +2025-10-27 00:07:01,664 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Quick.pc +2025-10-27 00:07:01,664 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6LabsPlatform.pc +2025-10-27 00:07:01,665 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QmlLocalStorage.pc +2025-10-27 00:07:01,665 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Widgets.pc +2025-10-27 00:07:01,665 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QmlCore.pc +2025-10-27 00:07:01,665 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6LabsSharedImage.pc +2025-10-27 00:07:01,666 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6OpenGLWidgets.pc +2025-10-27 00:07:01,666 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2Impl.pc +2025-10-27 00:07:01,666 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QmlCompiler.pc +2025-10-27 00:07:01,666 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickDialogs2Utils.pc +2025-10-27 00:07:01,666 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickDialogs2QuickImpl.pc +2025-10-27 00:07:01,667 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2Basic.pc +2025-10-27 00:07:01,667 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2FusionStyleImpl.pc +2025-10-27 00:07:01,667 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QmlWorkerScript.pc +2025-10-27 00:07:01,667 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickTest.pc +2025-10-27 00:07:01,668 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2ImagineStyleImpl.pc +2025-10-27 00:07:01,668 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QmlModels.pc +2025-10-27 00:07:01,669 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Svg.prl +2025-10-27 00:07:01,669 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6OpenGL.prl +2025-10-27 00:07:01,669 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlLocalStorage.prl +2025-10-27 00:07:01,670 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickEffects.prl +2025-10-27 00:07:01,670 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Gui.prl +2025-10-27 00:07:01,670 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Network.prl +2025-10-27 00:07:01,670 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2FluentWinUI3StyleImpl.prl +2025-10-27 00:07:01,670 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6WaylandEglClientHwIntegration.prl +2025-10-27 00:07:01,671 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Quick.prl +2025-10-27 00:07:01,671 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickVectorImage.prl +2025-10-27 00:07:01,671 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2.prl +2025-10-27 00:07:01,671 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2BasicStyleImpl.prl +2025-10-27 00:07:01,672 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlNetwork.prl +2025-10-27 00:07:01,672 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6ExampleIcons.prl +2025-10-27 00:07:01,672 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6WlShellIntegration.prl +2025-10-27 00:07:01,672 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6LabsQmlModels.prl +2025-10-27 00:07:01,673 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickDialogs2.prl +2025-10-27 00:07:01,673 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickVectorImageGenerator.prl +2025-10-27 00:07:01,673 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6DesignerComponents.prl +2025-10-27 00:07:01,673 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6FbSupport.prl +2025-10-27 00:07:01,673 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6SvgWidgets.prl +2025-10-27 00:07:01,674 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickWidgets.prl +2025-10-27 00:07:01,674 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlMeta.prl +2025-10-27 00:07:01,674 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlWorkerScript.prl +2025-10-27 00:07:01,674 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6LabsFolderListModel.prl +2025-10-27 00:07:01,675 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickDialogs2Utils.prl +2025-10-27 00:07:01,675 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2ImagineStyleImpl.prl +2025-10-27 00:07:01,675 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlToolingSettings.prl +2025-10-27 00:07:01,675 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlLS.prl +2025-10-27 00:07:01,675 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickTest.prl +2025-10-27 00:07:01,676 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControlsTestUtils.prl +2025-10-27 00:07:01,676 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Concurrent.prl +2025-10-27 00:07:01,676 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6KmsSupport.prl +2025-10-27 00:07:01,676 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2MaterialStyleImpl.prl +2025-10-27 00:07:01,677 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Help.prl +2025-10-27 00:07:01,677 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Xml.prl +2025-10-27 00:07:01,677 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6EglFsKmsGbmSupport.prl +2025-10-27 00:07:01,677 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6DBus.prl +2025-10-27 00:07:01,678 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickDialogs2QuickImpl.prl +2025-10-27 00:07:01,678 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6EglFSDeviceIntegration.prl +2025-10-27 00:07:01,678 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6InputSupport.prl +2025-10-27 00:07:01,678 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Widgets.prl +2025-10-27 00:07:01,679 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Sql.prl +2025-10-27 00:07:01,679 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickTestUtils.prl +2025-10-27 00:07:01,679 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlModels.prl +2025-10-27 00:07:01,679 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2Basic.prl +2025-10-27 00:07:01,680 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickTemplates2.prl +2025-10-27 00:07:01,680 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6UiTools.prl +2025-10-27 00:07:01,680 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlDebug.prl +2025-10-27 00:07:01,680 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2Imagine.prl +2025-10-27 00:07:01,680 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6WaylandClient.prl +2025-10-27 00:07:01,681 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6PacketProtocol.prl +2025-10-27 00:07:01,681 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6OpenGLWidgets.prl +2025-10-27 00:07:01,681 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6LabsPlatform.prl +2025-10-27 00:07:01,681 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Core.prl +2025-10-27 00:07:01,682 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2FusionStyleImpl.prl +2025-10-27 00:07:01,682 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6LabsSettings.prl +2025-10-27 00:07:01,682 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlDom.prl +2025-10-27 00:07:01,682 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Qml.prl +2025-10-27 00:07:01,683 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2UniversalStyleImpl.prl +2025-10-27 00:07:01,683 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickLayouts.prl +2025-10-27 00:07:01,683 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2Impl.prl +2025-10-27 00:07:01,683 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6XcbQpa.prl +2025-10-27 00:07:01,684 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickShapes.prl +2025-10-27 00:07:01,684 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6DeviceDiscoverySupport.prl +2025-10-27 00:07:01,684 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlCompiler.prl +2025-10-27 00:07:01,684 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickParticles.prl +2025-10-27 00:07:01,684 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2Universal.prl +2025-10-27 00:07:01,685 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6LabsWavefrontMesh.prl +2025-10-27 00:07:01,685 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlXmlListModel.prl +2025-10-27 00:07:01,685 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6EglFsKmsSupport.prl +2025-10-27 00:07:01,685 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6LabsSharedImage.prl +2025-10-27 00:07:01,686 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6PrintSupport.prl +2025-10-27 00:07:01,686 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2Fusion.prl +2025-10-27 00:07:01,686 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Designer.prl +2025-10-27 00:07:01,686 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6ExamplesAssetDownloader.prl +2025-10-27 00:07:01,687 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlTypeRegistrar.prl +2025-10-27 00:07:01,687 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6LabsAnimation.prl +2025-10-27 00:07:01,687 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2Material.prl +2025-10-27 00:07:01,687 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlCore.prl +2025-10-27 00:07:01,687 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlAssetDownloader.prl +2025-10-27 00:07:01,688 - aqt.updater - INFO - updater 140585577065344 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Test.prl +2025-10-27 00:07:01,688 - aqt.main - INFO - installer 140585577065344 Finished installation +2025-10-27 00:07:01,688 - aqt.main - INFO - installer 140585577065344 Time elapsed: 19.89985827 second +2025-12-01 00:07:30,867 - aqt.main - INFO - installer 140612347665280 aqtinstall(aqt) v3.1.21 on Python 3.11.14 [CPython GCC 13.3.0] +2025-12-01 00:07:30,868 - aqt.helper - DEBUG - helper 140612347665280 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/Updates.xml.sha256 +2025-12-01 00:07:31,886 - aqt.helper - DEBUG - helper 140612347665280 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/extensions/qtwebengine/683/x86_64/Updates.xml.sha256 +2025-12-01 00:07:32,928 - aqt.archives - INFO - archives 140612347665280 Found extension qtwebengine +2025-12-01 00:07:32,929 - aqt.helper - DEBUG - helper 140612347665280 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/extensions/qtpdf/683/x86_64/Updates.xml.sha256 +2025-12-01 00:07:33,986 - aqt.archives - INFO - archives 140612347665280 Found extension qtpdf +2025-12-01 00:07:34,441 - aqt.helper - DEBUG - helper 140124012759936 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtbase-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z.sha256 +2025-12-01 00:07:34,441 - aqt.helper - DEBUG - helper 140231871675264 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtsvg-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z.sha256 +2025-12-01 00:07:34,450 - aqt.helper - DEBUG - helper 140031893318528 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtdeclarative-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z.sha256 +2025-12-01 00:07:34,454 - aqt.helper - DEBUG - helper 139973446044544 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qttools-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z.sha256 +2025-12-01 00:07:34,882 - aqt.helper - INFO - helper 140231871675264 Downloading qtsvg... +2025-12-01 00:07:34,882 - aqt.helper - INFO - helper 140124012759936 Downloading qtbase... +2025-12-01 00:07:34,882 - aqt.installer - DEBUG - installer 140124012759936 Download URL: https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtbase-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-12-01 00:07:34,882 - aqt.installer - DEBUG - installer 140231871675264 Download URL: https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtsvg-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-12-01 00:07:35,217 - aqt.helper - INFO - helper 139973446044544 Downloading qttools... +2025-12-01 00:07:35,217 - aqt.installer - DEBUG - installer 139973446044544 Download URL: https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qttools-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-12-01 00:07:35,286 - aqt.helper - INFO - helper 140031893318528 Downloading qtdeclarative... +2025-12-01 00:07:35,287 - aqt.installer - DEBUG - installer 140031893318528 Download URL: https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtdeclarative-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-12-01 00:07:35,321 - aqt.helper - DEBUG - helper 140231871675264 Asked to redirect(302) to: https://qt.mirror.constant.com/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtsvg-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-12-01 00:07:35,321 - aqt.helper - DEBUG - helper 140124012759936 Asked to redirect(302) to: https://qt.mirror.constant.com/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtbase-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-12-01 00:07:35,321 - aqt.helper - INFO - helper 140231871675264 Redirected: qt.mirror.constant.com +2025-12-01 00:07:35,321 - aqt.helper - INFO - helper 140124012759936 Redirected: qt.mirror.constant.com +2025-12-01 00:07:35,725 - aqt.helper - DEBUG - helper 139973446044544 Asked to redirect(302) to: https://qt.mirror.constant.com/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qttools-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-12-01 00:07:35,725 - aqt.helper - INFO - helper 139973446044544 Redirected: qt.mirror.constant.com +2025-12-01 00:07:35,800 - aqt.installer - INFO - installer 140231871675264 Finished installation of qtsvg-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z in 1.36166064 +2025-12-01 00:07:35,813 - aqt.helper - DEBUG - helper 140231871675264 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qttranslations-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z.sha256 +2025-12-01 00:07:35,902 - aqt.helper - DEBUG - helper 140031893318528 Asked to redirect(302) to: https://qt.mirror.constant.com/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtdeclarative-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-12-01 00:07:35,902 - aqt.helper - INFO - helper 140031893318528 Redirected: qt.mirror.constant.com +2025-12-01 00:07:36,375 - aqt.helper - INFO - helper 140231871675264 Downloading qttranslations... +2025-12-01 00:07:36,376 - aqt.installer - DEBUG - installer 140231871675264 Download URL: https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qttranslations-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-12-01 00:07:36,898 - aqt.helper - DEBUG - helper 140231871675264 Asked to redirect(302) to: https://qt.mirror.constant.com/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qttranslations-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-12-01 00:07:36,898 - aqt.helper - INFO - helper 140231871675264 Redirected: qt.mirror.constant.com +2025-12-01 00:07:37,319 - aqt.installer - INFO - installer 140231871675264 Finished installation of qttranslations-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z in 1.50735574 +2025-12-01 00:07:37,340 - aqt.helper - DEBUG - helper 140231871675264 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtwayland-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z.sha256 +2025-12-01 00:07:38,096 - aqt.helper - INFO - helper 140231871675264 Downloading qtwayland... +2025-12-01 00:07:38,097 - aqt.installer - DEBUG - installer 140231871675264 Download URL: https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtwayland-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-12-01 00:07:38,658 - aqt.helper - DEBUG - helper 140231871675264 Asked to redirect(302) to: https://qt.mirror.constant.com/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345qtwayland-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z +2025-12-01 00:07:38,658 - aqt.helper - INFO - helper 140231871675264 Redirected: qt.mirror.constant.com +2025-12-01 00:07:38,789 - aqt.installer - INFO - installer 140124012759936 Finished installation of qtbase-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z in 4.35023998 +2025-12-01 00:07:38,806 - aqt.helper - DEBUG - helper 140124012759936 Attempt to download checksum at https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345icu-linux-Rhel8.6-x86_64.7z.sha256 +2025-12-01 00:07:38,930 - aqt.installer - INFO - installer 140231871675264 Finished installation of qtwayland-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z in 1.59236802 +2025-12-01 00:07:39,432 - aqt.installer - INFO - installer 139973446044544 Finished installation of qttools-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z in 4.98016206 +2025-12-01 00:07:39,434 - aqt.helper - INFO - helper 140124012759936 Downloading icu... +2025-12-01 00:07:39,434 - aqt.installer - DEBUG - installer 140124012759936 Download URL: https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345icu-linux-Rhel8.6-x86_64.7z +2025-12-01 00:07:39,945 - aqt.helper - DEBUG - helper 140124012759936 Asked to redirect(302) to: https://qt.mirror.constant.com/online/qtsdkrepository/linux_x64/desktop/qt6_683/qt6_683/qt.qt6.683.linux_gcc_64/6.8.3-0-202503201345icu-linux-Rhel8.6-x86_64.7z +2025-12-01 00:07:39,946 - aqt.helper - INFO - helper 140124012759936 Redirected: qt.mirror.constant.com +2025-12-01 00:07:40,795 - aqt.installer - INFO - installer 140124012759936 Finished installation of icu-linux-Rhel8.6-x86_64.7z in 1.99041100 +2025-12-01 00:07:48,432 - aqt.installer - INFO - installer 140031893318528 Finished installation of qtdeclarative-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z in 13.98372347 +2025-12-01 00:07:48,523 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/bin/qmake +2025-12-01 00:07:48,527 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Sql.pc +2025-12-01 00:07:48,527 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Core.pc +2025-12-01 00:07:48,527 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6SvgWidgets.pc +2025-12-01 00:07:48,528 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6DBus.pc +2025-12-01 00:07:48,528 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Platform.pc +2025-12-01 00:07:48,528 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Qml.pc +2025-12-01 00:07:48,528 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6UiPlugin.pc +2025-12-01 00:07:48,528 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2UniversalStyleImpl.pc +2025-12-01 00:07:48,529 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2BasicStyleImpl.pc +2025-12-01 00:07:48,529 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2.pc +2025-12-01 00:07:48,529 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2Fusion.pc +2025-12-01 00:07:48,529 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Network.pc +2025-12-01 00:07:48,530 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Help.pc +2025-12-01 00:07:48,530 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6LabsWavefrontMesh.pc +2025-12-01 00:07:48,530 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickWidgets.pc +2025-12-01 00:07:48,530 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickDialogs2.pc +2025-12-01 00:07:48,531 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2Material.pc +2025-12-01 00:07:48,531 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Xml.pc +2025-12-01 00:07:48,531 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickTemplates2.pc +2025-12-01 00:07:48,531 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6UiTools.pc +2025-12-01 00:07:48,531 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Gui.pc +2025-12-01 00:07:48,532 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2FluentWinUI3StyleImpl.pc +2025-12-01 00:07:48,532 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Designer.pc +2025-12-01 00:07:48,532 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickLayouts.pc +2025-12-01 00:07:48,532 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QmlIntegration.pc +2025-12-01 00:07:48,533 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6PrintSupport.pc +2025-12-01 00:07:48,533 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6LabsAnimation.pc +2025-12-01 00:07:48,533 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6LabsSettings.pc +2025-12-01 00:07:48,533 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2Universal.pc +2025-12-01 00:07:48,534 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Linguist.pc +2025-12-01 00:07:48,534 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QmlNetwork.pc +2025-12-01 00:07:48,534 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6LabsFolderListModel.pc +2025-12-01 00:07:48,534 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QmlAssetDownloader.pc +2025-12-01 00:07:48,534 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QmlXmlListModel.pc +2025-12-01 00:07:48,535 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Concurrent.pc +2025-12-01 00:07:48,535 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6OpenGL.pc +2025-12-01 00:07:48,535 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6LabsQmlModels.pc +2025-12-01 00:07:48,535 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickVectorImage.pc +2025-12-01 00:07:48,536 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2Imagine.pc +2025-12-01 00:07:48,536 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6WaylandClient.pc +2025-12-01 00:07:48,536 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Svg.pc +2025-12-01 00:07:48,536 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2MaterialStyleImpl.pc +2025-12-01 00:07:48,537 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QmlMeta.pc +2025-12-01 00:07:48,537 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Test.pc +2025-12-01 00:07:48,537 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Quick.pc +2025-12-01 00:07:48,537 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6LabsPlatform.pc +2025-12-01 00:07:48,537 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QmlLocalStorage.pc +2025-12-01 00:07:48,538 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6Widgets.pc +2025-12-01 00:07:48,538 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QmlCore.pc +2025-12-01 00:07:48,538 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6LabsSharedImage.pc +2025-12-01 00:07:48,538 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6OpenGLWidgets.pc +2025-12-01 00:07:48,539 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2Impl.pc +2025-12-01 00:07:48,539 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QmlCompiler.pc +2025-12-01 00:07:48,539 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickDialogs2Utils.pc +2025-12-01 00:07:48,539 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickDialogs2QuickImpl.pc +2025-12-01 00:07:48,539 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2Basic.pc +2025-12-01 00:07:48,540 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2FusionStyleImpl.pc +2025-12-01 00:07:48,540 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QmlWorkerScript.pc +2025-12-01 00:07:48,540 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickTest.pc +2025-12-01 00:07:48,540 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QuickControls2ImagineStyleImpl.pc +2025-12-01 00:07:48,541 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/pkgconfig/Qt6QmlModels.pc +2025-12-01 00:07:48,542 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Svg.prl +2025-12-01 00:07:48,542 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6OpenGL.prl +2025-12-01 00:07:48,542 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlLocalStorage.prl +2025-12-01 00:07:48,542 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickEffects.prl +2025-12-01 00:07:48,542 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Gui.prl +2025-12-01 00:07:48,543 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Network.prl +2025-12-01 00:07:48,543 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2FluentWinUI3StyleImpl.prl +2025-12-01 00:07:48,543 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6WaylandEglClientHwIntegration.prl +2025-12-01 00:07:48,543 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Quick.prl +2025-12-01 00:07:48,544 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickVectorImage.prl +2025-12-01 00:07:48,544 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2.prl +2025-12-01 00:07:48,544 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2BasicStyleImpl.prl +2025-12-01 00:07:48,544 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlNetwork.prl +2025-12-01 00:07:48,544 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6ExampleIcons.prl +2025-12-01 00:07:48,545 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6WlShellIntegration.prl +2025-12-01 00:07:48,545 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6LabsQmlModels.prl +2025-12-01 00:07:48,545 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickDialogs2.prl +2025-12-01 00:07:48,545 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickVectorImageGenerator.prl +2025-12-01 00:07:48,546 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6DesignerComponents.prl +2025-12-01 00:07:48,546 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6FbSupport.prl +2025-12-01 00:07:48,546 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6SvgWidgets.prl +2025-12-01 00:07:48,546 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickWidgets.prl +2025-12-01 00:07:48,546 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlMeta.prl +2025-12-01 00:07:48,547 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlWorkerScript.prl +2025-12-01 00:07:48,547 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6LabsFolderListModel.prl +2025-12-01 00:07:48,547 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickDialogs2Utils.prl +2025-12-01 00:07:48,547 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2ImagineStyleImpl.prl +2025-12-01 00:07:48,548 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlToolingSettings.prl +2025-12-01 00:07:48,548 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlLS.prl +2025-12-01 00:07:48,548 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickTest.prl +2025-12-01 00:07:48,548 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControlsTestUtils.prl +2025-12-01 00:07:48,548 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Concurrent.prl +2025-12-01 00:07:48,549 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6KmsSupport.prl +2025-12-01 00:07:48,549 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2MaterialStyleImpl.prl +2025-12-01 00:07:48,549 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Help.prl +2025-12-01 00:07:48,549 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Xml.prl +2025-12-01 00:07:48,550 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6EglFsKmsGbmSupport.prl +2025-12-01 00:07:48,550 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6DBus.prl +2025-12-01 00:07:48,550 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickDialogs2QuickImpl.prl +2025-12-01 00:07:48,550 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6EglFSDeviceIntegration.prl +2025-12-01 00:07:48,550 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6InputSupport.prl +2025-12-01 00:07:48,551 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Widgets.prl +2025-12-01 00:07:48,551 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Sql.prl +2025-12-01 00:07:48,551 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickTestUtils.prl +2025-12-01 00:07:48,551 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlModels.prl +2025-12-01 00:07:48,552 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2Basic.prl +2025-12-01 00:07:48,552 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickTemplates2.prl +2025-12-01 00:07:48,552 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6UiTools.prl +2025-12-01 00:07:48,552 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlDebug.prl +2025-12-01 00:07:48,552 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2Imagine.prl +2025-12-01 00:07:48,553 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6WaylandClient.prl +2025-12-01 00:07:48,553 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6PacketProtocol.prl +2025-12-01 00:07:48,553 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6OpenGLWidgets.prl +2025-12-01 00:07:48,553 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6LabsPlatform.prl +2025-12-01 00:07:48,554 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Core.prl +2025-12-01 00:07:48,554 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2FusionStyleImpl.prl +2025-12-01 00:07:48,554 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6LabsSettings.prl +2025-12-01 00:07:48,554 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlDom.prl +2025-12-01 00:07:48,554 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Qml.prl +2025-12-01 00:07:48,555 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2UniversalStyleImpl.prl +2025-12-01 00:07:48,555 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickLayouts.prl +2025-12-01 00:07:48,555 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2Impl.prl +2025-12-01 00:07:48,555 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6XcbQpa.prl +2025-12-01 00:07:48,556 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickShapes.prl +2025-12-01 00:07:48,556 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6DeviceDiscoverySupport.prl +2025-12-01 00:07:48,556 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlCompiler.prl +2025-12-01 00:07:48,556 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickParticles.prl +2025-12-01 00:07:48,557 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2Universal.prl +2025-12-01 00:07:48,557 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6LabsWavefrontMesh.prl +2025-12-01 00:07:48,557 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlXmlListModel.prl +2025-12-01 00:07:48,557 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6EglFsKmsSupport.prl +2025-12-01 00:07:48,557 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6LabsSharedImage.prl +2025-12-01 00:07:48,558 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6PrintSupport.prl +2025-12-01 00:07:48,558 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2Fusion.prl +2025-12-01 00:07:48,558 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Designer.prl +2025-12-01 00:07:48,558 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6ExamplesAssetDownloader.prl +2025-12-01 00:07:48,559 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlTypeRegistrar.prl +2025-12-01 00:07:48,559 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6LabsAnimation.prl +2025-12-01 00:07:48,559 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QuickControls2Material.prl +2025-12-01 00:07:48,559 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlCore.prl +2025-12-01 00:07:48,560 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6QmlAssetDownloader.prl +2025-12-01 00:07:48,560 - aqt.updater - INFO - updater 140612347665280 Patching /home/runner/work/FreeCAD/Qt/6.8.3/gcc_64/lib/libQt6Test.prl +2025-12-01 00:07:48,560 - aqt.main - INFO - installer 140612347665280 Finished installation +2025-12-01 00:07:48,560 - aqt.main - INFO - installer 140612347665280 Time elapsed: 17.69296932 second diff --git a/src/App/DocumentObject.cpp b/src/App/DocumentObject.cpp index 176f796aee2d..6b7c80535003 100644 --- a/src/App/DocumentObject.cpp +++ b/src/App/DocumentObject.cpp @@ -37,6 +37,7 @@ #include "Application.h" #include "ElementNamingUtils.h" #include "Document.h" +#include "Part.h" #include "DocumentObject.h" #include "DocumentObjectPy.h" #include "DocumentObjectExtension.h" @@ -102,51 +103,22 @@ void DocumentObject::printInvalidLinks() const // Truncate the invalid object list name strings for readability, if they happen to be very // long. std::vector invalid_linkobjs; - std::string objnames, scopenames; GeoFeatureGroupExtension::getInvalidLinkObjects(this, invalid_linkobjs); for (auto& obj : invalid_linkobjs) { - objnames += obj->getNameInDocument(); - objnames += " "; - for (auto& scope : obj->getParents()) { - if (scopenames.length() > 80) { - scopenames += "... "; - break; - } - - scopenames += scope.first->getNameInDocument(); - scopenames += " "; - } - - if (objnames.length() > 80) { - objnames += "... "; - break; - } - } - - if (objnames.empty()) { - objnames = "N/A"; - } - else { - objnames.pop_back(); - } - - if (scopenames.empty()) { - scopenames = "N/A"; - } - else { - scopenames.pop_back(); - } - - Base::Console().warning("%s: Link(s) to object(s) '%s' go out of the allowed scope '%s'. " + std::string objname, scopename; + objname= obj->getNameInDocument(); + if (objname.empty()) objname = "N/A"; + const App::Part* scope = App::Part::getPartOfObject(obj); + scopename = scope ? scope->getNameInDocument() : "N/A"; + if (scopename.empty()) scopename = "N/A"; + Base::Console().warning("%s: Link(s) to object(s) '%s' go out of the allowed scope '%s'. " "Instead, the linked object(s) reside within '%s'.\n", getTypeId().getName(), - objnames.c_str(), + objname.c_str(), getNameInDocument(), - scopenames.c_str()); - } - catch (const Base::Exception& e) { - e.reportException(); - } + scopename.c_str()); + } + } catch (const Base::Exception& e) {e.reportException();} } App::DocumentObjectExecReturn* DocumentObject::recompute() diff --git a/src/App/GeoFeatureGroupExtension.cpp b/src/App/GeoFeatureGroupExtension.cpp index 84e7ac3c59df..5dc8f9c48209 100644 --- a/src/App/GeoFeatureGroupExtension.cpp +++ b/src/App/GeoFeatureGroupExtension.cpp @@ -30,6 +30,8 @@ #include "Datums.h" #include "OriginGroupExtension.h" +#include // for std::strcmp + using namespace App; @@ -108,6 +110,45 @@ DocumentObject* GeoFeatureGroupExtension::getGroupOfObject(const DocumentObject* return nullptr; } + +const App::DocumentObject* GeoFeatureGroupExtension::getBoundaryGroupOfObject(const App::DocumentObject* obj) +{ + if (!obj) return nullptr; + + // nearest GeoFeatureGroup (upstream meaning) + const App::DocumentObject* g = + obj->hasExtension(App::GeoFeatureGroupExtension::getExtensionClassTypeId()) + ? obj + : App::GeoFeatureGroupExtension::getGroupOfObject(obj); + + // Skip groups that opted out as a boundary (actsAsGroupBoundary == false) + while (g) { + auto* ext = g->getExtensionByType(); + if (!ext) break; // not a geofeature group (shouldn’t happen) → stop + if (ext->actsAsGroupBoundary()) // this one is a boundary → stop here + break; + // transparent group → climb to its parent group + g = App::GeoFeatureGroupExtension::getGroupOfObject(g); + } + + return g; // may be nullptr (top level), or the nearest boundary group +} + + +Base::Placement GeoFeatureGroupExtension::globalGroupPlacementInBoundary(const App::DocumentObject* obj) +{ + Base::Placement result; + const App::DocumentObject* boundary = getBoundaryGroupOfObject(obj); + const App::DocumentObject* container = getGroupOfObject(obj); + while (container && container != boundary) { + if (auto* prop = dynamic_cast(container->getPropertyByName("Placement"))) { + result = prop->getValue() * result; + } + container = getGroupOfObject(container); + } + return result; +} + Base::Placement GeoFeatureGroupExtension::globalGroupPlacement() { if (getExtendedObject()->isRecomputing()) { @@ -245,6 +286,19 @@ void GeoFeatureGroupExtension::extensionOnChanged(const Property* p) } } + if (p == &this->placement() && !this->actsAsGroupBoundary() + && !getExtendedObject()->isRestoring() + && !getExtendedObject()->getDocument()->isPerformingTransaction()) { + + for (auto* obj : this->Group.getValues()) { + if (!obj) continue; + + if (auto* prop = obj->getPropertyByName("Placement")) + prop->touch(); + } + } + + App::GroupExtension::extensionOnChanged(p); } @@ -514,13 +568,11 @@ void GeoFeatureGroupExtension::getInvalidLinkObjects(const DocumentObject* obj, return; } - // no cross CS link for local links. + // 1) Local links must not cross the nearest movable group boundary auto result = getScopedObjectsFromLinks(obj, LinkScope::Local); - auto group = obj->hasExtension(App::GeoFeatureGroupExtension::getExtensionClassTypeId()) - ? obj - : getGroupOfObject(obj); + auto group = GeoFeatureGroupExtension::getBoundaryGroupOfObject(obj); for (auto link : result) { - if (getGroupOfObject(link) != group) { + if (GeoFeatureGroupExtension::getBoundaryGroupOfObject(link) != group) { vec.push_back(link); } } diff --git a/src/App/GeoFeatureGroupExtension.h b/src/App/GeoFeatureGroupExtension.h index 411f27b65e52..d35141d3e835 100644 --- a/src/App/GeoFeatureGroupExtension.h +++ b/src/App/GeoFeatureGroupExtension.h @@ -94,6 +94,16 @@ class AppExport GeoFeatureGroupExtension: public App::GroupExtension * system */ Base::Placement globalGroupPlacement(); + static Base::Placement globalGroupPlacementInBoundary(const App::DocumentObject* obj); + + // New: capability flag — does this group act as a link/scope boundary? + // Default: true (current upstream behavior). + bool actsAsGroupBoundary() const noexcept { return m_actsAsGroupBoundary; } + void setActsAsGroupBoundary(bool v) noexcept { m_actsAsGroupBoundary = v; } + + // New: helper used by selection/validation to hop over transparent groups. + // Returns the nearest GeoFeatureGroup that *acts as a boundary*; nullptr = top level. + static const App::DocumentObject* getBoundaryGroupOfObject(const App::DocumentObject* obj); /// Returns true if the given DocumentObject is DocumentObjectGroup but not GeoFeatureGroup static bool isNonGeoGroup(const DocumentObject* obj) @@ -150,6 +160,7 @@ class AppExport GeoFeatureGroupExtension: public App::GroupExtension static void recursiveCSRelevantLinks(const App::DocumentObject* obj, std::vector& vec); + bool m_actsAsGroupBoundary = true; }; using GeoFeatureGroupExtensionPython = diff --git a/src/App/Part.cpp b/src/App/Part.cpp index 79d81cd1e066..974004a2a6f1 100644 --- a/src/App/Part.cpp +++ b/src/App/Part.cpp @@ -57,6 +57,11 @@ Part::Part() ADD_PROPERTY(Color, (1.0, 1.0, 1.0, 0.0)); // set transparent -> not used GroupExtension::initExtension(this); + + if (auto* gext = this->getExtensionByType()) { + gext->setActsAsGroupBoundary(false); // Parts are transparent boundaries + } + } Part::~Part() = default; @@ -108,6 +113,19 @@ PyObject* Part::getPyObject() return Py::new_reference_to(PythonObject); } + +void App::Part::onDocumentRestored() +{ + App::GeoFeature::onDocumentRestored(); + + if (auto* gext = this->getExtensionByType()) { + // imposta a false solo se è "true" (evita di sovrascrivere scelte esplicite salvate) + if (gext->actsAsGroupBoundary()) + gext->setActsAsGroupBoundary(false); + } +} + + void Part::handleChangedPropertyType(Base::XMLReader& reader, const char* TypeName, App::Property* prop) diff --git a/src/App/Part.h b/src/App/Part.h index 312f20b518dd..884f72e47053 100644 --- a/src/App/Part.h +++ b/src/App/Part.h @@ -99,6 +99,8 @@ class AppExport Part: public App::GeoFeature, public App::OriginGroupExtension static App::Part* getPartOfObject(const DocumentObject* obj, bool recursive = true); PyObject* getPyObject() override; + void onDocumentRestored() override; + }; // using PartPython = App::FeaturePythonT; diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index 107329e3e603..2c633aa782e4 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -1603,7 +1603,11 @@ void StdCmdPlacement::activated(int iMsg) bool StdCmdPlacement::isActive() { std::vector sel = Gui::Selection().getObjectsOfType(App::GeoFeature::getClassTypeId()); - return (sel.size() == 1 && ! sel.front()->isFreezed()); + if(sel.size() != 1 || sel.front()->isFreezed()) return false; + App::Property* prop = sel.front()->getPropertyByName("Placement"); + if(!prop) return false; + if (prop->testStatus(App::Property::Hidden)) return false; + return true; } //=========================================================================== diff --git a/src/Mod/Part/App/AttachExtension.cpp b/src/Mod/Part/App/AttachExtension.cpp index 47518e094410..e712ef5ef82b 100644 --- a/src/Mod/Part/App/AttachExtension.cpp +++ b/src/Mod/Part/App/AttachExtension.cpp @@ -26,7 +26,7 @@ #include "AttachExtension.h" #include "AttachExtensionPy.h" - +#include using namespace Part; using namespace Attacher; @@ -137,6 +137,13 @@ AttachExtension::AttachExtension() App::Prop_None, "Extra placement to apply in addition to attachment (in local coordinates)"); + EXTENSION_ADD_PROPERTY_TYPE( + RefPlacement, + (Base::Placement()), + "Attachment", + App::Prop_Transient, + "Cumulative placement of the group hierarchy above the object, up to the boundary"); + // Only show these properties when applicable. Controlled by extensionOnChanged this->MapPathParameter.setStatus(App::Property::Status::Hidden, true); this->MapReversed.setStatus(App::Property::Status::Hidden, true); @@ -300,6 +307,8 @@ bool AttachExtension::changeAttacherType(const char* typeName, bool base) throw AttachEngineException(errMsg.str()); } + + bool AttachExtension::positionBySupport() { _active = 0; @@ -309,6 +318,7 @@ bool AttachExtension::positionBySupport() } updateAttacherVals(); Base::Placement plaOriginal = getPlacement().getValue(); + Base::Placement refPlaOriginal = getRefPlacement().getValue(); try { if (_props.attacher->mapMode == mmDeactivated) { return false; @@ -320,16 +330,21 @@ bool AttachExtension::positionBySupport() Base::Placement basePlacement; if (_baseProps.attacher && _baseProps.attacher->mapMode != mmDeactivated) { basePlacement = - _baseProps.attacher->calculateAttachedPlacement(Base::Placement(), &subChanged); + _baseProps.attacher->calculateAttachedPlacement(Base::Placement(),nullptr,&subChanged); if (subChanged) { _baseProps.attachment->setValues(_baseProps.attachment->getValues(), _baseProps.attacher->getSubValues()); } } - + Base::Placement groupPla; + if (auto* obj = dynamic_cast(getExtendedObject())) { + groupPla=App::GeoFeatureGroupExtension::globalGroupPlacementInBoundary(obj); + } subChanged = false; _props.attacher->setOffset(AttachmentOffset.getValue() * basePlacement.inverse()); - auto placement = _props.attacher->calculateAttachedPlacement(plaOriginal, &subChanged); + Base::Placement refGroupPla; + auto refPla = _props.attacher->calculateAttachedPlacement(refPlaOriginal, &refGroupPla, &subChanged); + Base::Placement placement=groupPla.inverse()*refGroupPla*refPla; if (subChanged) { Base::ObjectStatusLocker guard( App::Property::User3, @@ -337,6 +352,7 @@ bool AttachExtension::positionBySupport() AttachmentSupport.setValues(AttachmentSupport.getValues(), _props.attacher->getSubValues()); } + getRefPlacement().setValue(refPla); getPlacement().setValue(placement); _active = 1; return true; @@ -344,14 +360,17 @@ bool AttachExtension::positionBySupport() catch (ExceptionCancel&) { // disabled, don't do anything getPlacement().setValue(plaOriginal); + getRefPlacement().setValue(refPlaOriginal); return false; } catch (Base::Exception&) { getPlacement().setValue(plaOriginal); + getRefPlacement().setValue(refPlaOriginal); throw; } catch (Standard_Failure&) { getPlacement().setValue(plaOriginal); + getRefPlacement().setValue(refPlaOriginal); throw; } } @@ -580,6 +599,18 @@ App::PropertyPlacement& AttachExtension::getPlacement() const return *pla; } +App::PropertyPlacement& AttachExtension::getRefPlacement() const +{ + auto pla = freecad_cast( + getExtendedObject()->getPropertyByName("RefPlacement")); + if (!pla) { + throw Base::RuntimeError("AttachExtension cannot find placement property"); + } + return *pla; +} + + + PyObject* AttachExtension::getExtensionPyObject() { diff --git a/src/Mod/Part/App/AttachExtension.h b/src/Mod/Part/App/AttachExtension.h index 6107191fe3cb..69f04b51fef7 100644 --- a/src/Mod/Part/App/AttachExtension.h +++ b/src/Mod/Part/App/AttachExtension.h @@ -92,6 +92,7 @@ class PartExport AttachExtension: public App::DocumentObjectExtension App::PropertyEnumeration MapMode; // see AttachEngine::eMapMode App::PropertyBool MapReversed; // inverts Z and X internal axes App::PropertyPlacement AttachmentOffset; + App::PropertyPlacement RefPlacement; /** * @brief MapPathParameter is a parameter value for mmNormalToPath (the @@ -143,6 +144,7 @@ class PartExport AttachExtension: public App::DocumentObjectExtension const char* PropName) override; App::PropertyPlacement& getPlacement() const; + App::PropertyPlacement& getRefPlacement() const; void initBase(bool force); public: diff --git a/src/Mod/Part/App/Attacher.cpp b/src/Mod/Part/App/Attacher.cpp index 22bf0d773401..1a261cf3eb16 100644 --- a/src/Mod/Part/App/Attacher.cpp +++ b/src/Mod/Part/App/Attacher.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (c) 2015 Victor Titov (DeepSOIC) * + * Copyright (c) 2025 Walter Steffè * * * * This file is part of the FreeCAD CAx development system. * * * @@ -63,6 +63,8 @@ #include #include #include +#include + #include #include "Attacher.h" @@ -994,7 +996,10 @@ std::vector AttachEngine::getRefObjects() const return objs; } + + Base::Placement AttachEngine::calculateAttachedPlacement(const Base::Placement& origPlacement, + Base::Placement *groupPlacement, bool* subChanged) { std::map> subChanges; @@ -1059,6 +1064,7 @@ Base::Placement AttachEngine::calculateAttachedPlacement(const Base::Placement& return pla; } } + if(objs.size()>0) if(groupPlacement) *groupPlacement= App::GeoFeatureGroupExtension::globalGroupPlacementInBoundary(objs[0]); return _calculateAttachedPlacement(objs, subnames, origPlacement); } diff --git a/src/Mod/Part/App/Attacher.h b/src/Mod/Part/App/Attacher.h index 113dfccf3875..269a8a38901e 100644 --- a/src/Mod/Part/App/Attacher.h +++ b/src/Mod/Part/App/Attacher.h @@ -234,7 +234,9 @@ class PartExport AttachEngine : public Base::BaseClass virtual AttachEngine* copy() const = 0; Base::Placement calculateAttachedPlacement( - const Base::Placement &origPlacement, bool *subChanged=0); + const Base::Placement &origPlacement, + Base::Placement *origGroupPlacement=nullptr, + bool *subChanged=0); virtual Base::Placement _calculateAttachedPlacement( const std::vector &objs, diff --git a/src/Mod/Part/Gui/Command.cpp b/src/Mod/Part/Gui/Command.cpp index 91c4fb1c134b..6dd6d5f87eba 100644 --- a/src/Mod/Part/Gui/Command.cpp +++ b/src/Mod/Part/Gui/Command.cpp @@ -816,6 +816,24 @@ bool CmdPartCompCompoundTools::isActive() +namespace { + QString getAutoGroupCommandStr() + // Helper function to get the python code to add the newly created object to the active Part/Body object if present + { + App::GeoFeature* activeObj = Gui::Application::Instance->activeView()->getActiveObject(PDBODYKEY); + if (!activeObj) { + activeObj = Gui::Application::Instance->activeView()->getActiveObject(PARTKEY); + } + + if (activeObj) { + QString activeName = QString::fromLatin1(activeObj->getNameInDocument()); + return QStringLiteral("App.ActiveDocument.getObject('%1\').addObject(obj)\n").arg(activeName); + } + + return QStringLiteral("# Object created at document root."); + } +} + //=========================================================================== // Part_Compound //=========================================================================== @@ -860,7 +878,8 @@ void CmdPartCompound::activated(int iMsg) str << "]"; openCommand(QT_TRANSLATE_NOOP("Command", "Compound")); - doCommand(Doc,"App.activeDocument().addObject(\"Part::Compound\",\"%s\")",FeatName.c_str()); + doCommand(Doc,"obj = App.activeDocument().addObject(\"Part::Compound\",\"%s\")",FeatName.c_str()); + doCommand(Doc, getAutoGroupCommandStr().toUtf8()); runCommand(Doc,str.str().c_str()); updateActive(); commitCommand(); @@ -2226,24 +2245,6 @@ bool CmdPartSectionCut::isActive() // Part_CoordinateSystem //=========================================================================== -namespace { - QString getAutoGroupCommandStr() - // Helper function to get the python code to add the newly created object to the active Part/Body object if present - { - App::GeoFeature* activeObj = Gui::Application::Instance->activeView()->getActiveObject(PDBODYKEY); - if (!activeObj) { - activeObj = Gui::Application::Instance->activeView()->getActiveObject(PARTKEY); - } - - if (activeObj) { - QString activeName = QString::fromLatin1(activeObj->getNameInDocument()); - return QStringLiteral("App.ActiveDocument.getObject('%1\').addObject(obj)\n").arg(activeName); - } - - return QStringLiteral("# Object created at document root."); - } -} - DEF_STD_CMD_A(CmdPartCoordinateSystem) CmdPartCoordinateSystem::CmdPartCoordinateSystem() diff --git a/src/Mod/Part/Gui/DlgExtrusion.cpp b/src/Mod/Part/Gui/DlgExtrusion.cpp index dc1350a8107f..eadc5f6b9c3c 100644 --- a/src/Mod/Part/Gui/DlgExtrusion.cpp +++ b/src/Mod/Part/Gui/DlgExtrusion.cpp @@ -46,6 +46,7 @@ #include #include #include +#include #include @@ -446,6 +447,22 @@ void DlgExtrusion::accept() }; } +namespace { +QString getAutoGroupCommandStr(std::string name) +// Helper function to get the python code to add the newly created object to the active Part object if present +{ + App::Part* activePart = Gui::Application::Instance->activeView()->getActiveObject("part"); + if (activePart) { + QString activePartName = QString::fromLatin1(activePart->getNameInDocument()); + QString objName = QString::fromLatin1(name.c_str()); + return QStringLiteral("App.ActiveDocument.getObject('%1\')." + "addObject(App.ActiveDocument.getObject('%2\'))\n") + .arg(activePartName).arg(objName); + } + return QStringLiteral("# Object created at document root."); +} +} + void DlgExtrusion::apply() { try{ @@ -488,6 +505,7 @@ void DlgExtrusion::apply() } FCMD_OBJ_DOC_CMD(sourceObj,"addObject('Part::Extrusion','" << name << "')"); + Gui::Command::runCommand(Gui::Command::Doc, getAutoGroupCommandStr(name).toUtf8()); auto newObj = sourceObj->getDocument()->getObject(name.c_str()); this->writeParametersToFeature(*newObj, sourceObj); diff --git a/src/Mod/PartDesign/App/Body.cpp b/src/Mod/PartDesign/App/Body.cpp index 25cc873a71bc..91dfce1b4714 100644 --- a/src/Mod/PartDesign/App/Body.cpp +++ b/src/Mod/PartDesign/App/Body.cpp @@ -45,6 +45,10 @@ Body::Body() ADD_PROPERTY_TYPE(AllowCompound, (true), "Experimental", App::Prop_None, "Allow multiple solids in Body (experimental)"); _GroupTouched.setStatus(App::Property::Output, true); + + if (auto* gext = this->getExtensionByType()) { + gext->setActsAsGroupBoundary(false); // Bodies are transparent boundaries + } } /* @@ -579,6 +583,9 @@ void Body::onDocumentRestored() if (Tip.getValue()) Tip.touch(); + if (auto* gext = this->getExtensionByType()) { + gext->setActsAsGroupBoundary(false); // Bodies are transparent boundaries + } DocumentObject::onDocumentRestored(); } @@ -592,3 +599,4 @@ bool Body::isSolid() } return false; } + diff --git a/src/Mod/PartDesign/App/FeatureExtrude.cpp b/src/Mod/PartDesign/App/FeatureExtrude.cpp index 8abab453f9dd..4567755c11c1 100644 --- a/src/Mod/PartDesign/App/FeatureExtrude.cpp +++ b/src/Mod/PartDesign/App/FeatureExtrude.cpp @@ -35,10 +35,12 @@ # include #include +#include #include #include #include "Mod/Part/App/TopoShapeOpCode.h" #include +#include #include "FeatureExtrude.h" @@ -752,7 +754,13 @@ TopoShape FeatureExtrude::generateSingleExtrusionSide(const TopoShape& sketchsha if (method == "UpToFirst" || method == "UpToLast" || method == "UpToFace" || method == "UpToShape") { // Note: This will return an unlimited planar face if support is a datum plane TopoShape supportface = getTopoShapeSupportFace(); - auto invObjLoc = getLocation().Inverted(); + auto objLoc=getLocation(); + auto invObjLoc = objLoc.Inverted(); + Base::Placement groupPla=App::GeoFeatureGroupExtension::globalGroupPlacementInBoundary(this); + TopLoc_Location groupLoc=Part::Tools::fromPlacement(groupPla); + auto globalObjLoc=groupLoc*objLoc; + auto invGlobalObjLoc = globalObjLoc.Inverted(); + supportface.move(invObjLoc); if (!supportface.hasSubShape(TopAbs_WIRE)) { @@ -764,11 +772,11 @@ TopoShape FeatureExtrude::generateSingleExtrusionSide(const TopoShape& sketchsha // Find a valid shape, face or datum plane to extrude up to if (method == "UpToFace") { getUpToFaceFromLinkSub(upToShape, upToFacePropHandle); - upToShape.move(invObjLoc); + upToShape.move(invGlobalObjLoc); } else if (method == "UpToShape") { faceCount = getUpToShapeFromLinkSubList(upToShape, upToShapePropHandle); - upToShape.move(invObjLoc); + upToShape.move(invGlobalObjLoc); if (faceCount == 0) { // No shape selected, use the base upToShape = base; diff --git a/src/Mod/PartDesign/App/FeatureSketchBased.cpp b/src/Mod/PartDesign/App/FeatureSketchBased.cpp index 438a548781a4..056b754b0445 100644 --- a/src/Mod/PartDesign/App/FeatureSketchBased.cpp +++ b/src/Mod/PartDesign/App/FeatureSketchBased.cpp @@ -52,10 +52,13 @@ #include #include +#include #include #include +#include #include "FeatureSketchBased.h" +#include "Body.h" #include "DatumLine.h" #include "DatumPlane.h" #include "Mod/Part/App/Geometry.h" @@ -634,6 +637,10 @@ Part::Feature* ProfileBased::getBaseObject(bool silent) const err = "No base set, no sketch support either"; } + PartDesign::Body* body= Feature::getFeatureBody(); + if(body && spt) if(!body->hasObject(spt)) + return nullptr; + if (!silent && err) { throw Base::RuntimeError(err); } @@ -659,6 +666,9 @@ void ProfileBased::getUpToFaceFromLinkSub(TopoShape& upToFace, const App::Proper throw Base::ValueError("SketchBased: No face selected"); } + Base::Placement groupPla; + groupPla=App::GeoFeatureGroupExtension::globalGroupPlacementInBoundary(ref); + if (ref->isDerivedFrom()) { upToFace = makeShapeFromPlane(ref); return; @@ -672,9 +682,16 @@ void ProfileBased::getUpToFaceFromLinkSub(TopoShape& upToFace, const App::Proper | Part::ShapeOption::Transform, subs.empty() ? nullptr : subs[0].c_str()); + if (!upToFace.hasSubShape(TopAbs_FACE)) { throw Base::ValueError("SketchBased: Up to face: Failed to extract face"); } + + if (!groupPla.isIdentity()) { + TopLoc_Location groupLoc=Part::Tools::fromPlacement(groupPla); + upToFace.move(groupLoc); + } + } int ProfileBased::getUpToShapeFromLinkSubList(TopoShape& upToShape, const App::PropertyLinkSubList& refShape) @@ -686,6 +703,9 @@ int ProfileBased::getUpToShapeFromLinkSubList(TopoShape& upToShape, const App::P std::vector faceList; for (auto &subSet : subSets){ auto ref = subSet.first; + Base::Placement groupPla; + groupPla=App::GeoFeatureGroupExtension::globalGroupPlacementInBoundary(ref); + TopLoc_Location groupLoc=Part::Tools::fromPlacement(groupPla); if (ref->isDerivedFrom()) { faceList.push_back(makeTopoShapeFromPlane(ref)); ret ++; @@ -702,6 +722,9 @@ int ProfileBased::getUpToShapeFromLinkSubList(TopoShape& upToShape, const App::P for (auto face : baseShape.getSubTopoShapes(TopAbs_FACE)){ + if (!groupPla.isIdentity()) { + face.move(groupLoc); + } faceList.push_back(face); ret ++; } @@ -720,6 +743,9 @@ int ProfileBased::getUpToShapeFromLinkSubList(TopoShape& upToShape, const App::P if (face.isNull()) { throw Base::ValueError("SketchBased: Failed to extract face"); } + if (!groupPla.isIdentity()) { + face.move(groupLoc); + } faceList.push_back(face); ret ++; } diff --git a/src/Mod/PartDesign/Gui/Command.cpp b/src/Mod/PartDesign/Gui/Command.cpp index c7d06181ca6a..13d29548bc64 100644 --- a/src/Mod/PartDesign/Gui/Command.cpp +++ b/src/Mod/PartDesign/Gui/Command.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -352,33 +353,74 @@ void CmdPartDesignSubShapeBinder::activated(int iMsg) { Q_UNUSED(iMsg); - App::DocumentObject *parent = nullptr; + App::DocumentObject *topParent = nullptr; std::string parentSub; + std::set valueSet; std::map > values; for (auto &sel : Gui::Selection().getCompleteSelection(Gui::ResolveMode::NoResolve)) { if (!sel.pObject) continue; auto &subs = values[sel.pObject]; - if (sel.SubName && sel.SubName[0]) + if (sel.SubName && sel.SubName[0]) { subs.emplace_back(sel.SubName); + valueSet.insert(sel.pObject->getSubObject(sel.SubName)); + } else { + valueSet.insert(sel.pObject); + } } + auto checkContainer = [&](App::DocumentObject *container) { + // Check the potential container to add in the newly created binder. + // We check if the container or any of its parent objects is selected + // (i.e. for binding), and exclude the container to avoid cyclic + // reference. + if (!container) + return false; + if (valueSet.count(container)) { + topParent = nullptr; + parentSub.clear(); + return false; + } + auto inlist = container->getInListEx(true); + for (auto obj : valueSet) { + if (inlist.count(obj)) { + topParent = nullptr; + parentSub.clear(); + return false; + } + } + return true; + }; + std::string FeatName; - PartDesign::Body *pcActiveBody = PartDesignGui::getBody(false,true,true,&parent,&parentSub); - FeatName = getUniqueObjectName("Binder",pcActiveBody); - if (parent) { + Gui::MDIView *activeView = Gui::Application::Instance->activeView(); + PartDesign::Body *pcActiveBody= nullptr; + if (activeView) + pcActiveBody = activeView->getActiveObject(PDBODYKEY, &topParent, &parentSub); + if (!checkContainer(pcActiveBody)) pcActiveBody = nullptr; + + App::Part *pcActivePart = nullptr; + if (!pcActiveBody && activeView) { + pcActivePart = activeView->getActiveObject(PARTKEY, &topParent, &parentSub); + if (!checkContainer(pcActivePart)) + pcActivePart = nullptr; + } + + FeatName = Gui::Command::getUniqueObjectName("Binder", pcActiveBody ? + static_cast(pcActiveBody) : pcActivePart); + + if (topParent) { decltype(values) links; for (auto &v : values) { App::DocumentObject *obj = v.first; - if (obj != parent) { - auto &subs = links[obj]; - subs.insert(subs.end(),v.second.begin(),v.second.end()); + if (v.second.empty()) { + links.emplace(obj, v.second); continue; } for (auto &sub : v.second) { auto link = obj; auto linkSub = parentSub; - parent->resolveRelativeLink(linkSub,link,sub); - if (link && link != pcActiveBody) + topParent->resolveRelativeLink(linkSub,link,sub); + if (link) links[link].push_back(sub); } } @@ -394,8 +436,9 @@ void CmdPartDesignSubShapeBinder::activated(int iMsg) } else { doCommand(Command::Doc, "App.ActiveDocument.addObject('PartDesign::SubShapeBinder','%s')",FeatName.c_str()); - binder = dynamic_cast( - App::GetApplication().getActiveDocument()->getObject(FeatName.c_str())); + binder = dynamic_cast(App::GetApplication().getActiveDocument()->getObject(FeatName.c_str())); + if (pcActivePart) + Gui::cmdAppObject(pcActivePart, std::ostringstream() << "addObject(" << Gui::Command::getObjectCmd(binder) << ")"); } if (!binder) return; @@ -967,9 +1010,7 @@ void prepareProfileBased(PartDesign::Body *pcActiveBody, Gui::Command* cmd, cons //pick task dialog to decide how those are handled bool extReference = std::find_if( status.begin(), status.end(), [] (const PartDesignGui::TaskFeaturePick::featureStatus& s) { - return s == PartDesignGui::TaskFeaturePick::otherBody || - s == PartDesignGui::TaskFeaturePick::otherPart || - s == PartDesignGui::TaskFeaturePick::notInBody; + return s == PartDesignGui::TaskFeaturePick::otherPart; } ) != status.end(); diff --git a/src/Mod/PartDesign/Gui/ReferenceSelection.cpp b/src/Mod/PartDesign/Gui/ReferenceSelection.cpp index 011cf93dd7a3..bbfd4b06d53d 100644 --- a/src/Mod/PartDesign/Gui/ReferenceSelection.cpp +++ b/src/Mod/PartDesign/Gui/ReferenceSelection.cpp @@ -62,8 +62,7 @@ bool ReferenceSelection::allow(App::Document* pDoc, App::DocumentObject* pObj, c if (!pObj) { return false; } - PartDesign::Body *body = getBody(); - App::OriginGroupExtension* originGroup = getOriginGroupExtension(body); + App::OriginGroupExtension* originGroup = getBoundaryOriginGroupExtension(); // Don't allow selection in other document if (support && pDoc != support->getDocument()) { @@ -72,11 +71,11 @@ bool ReferenceSelection::allow(App::Document* pDoc, App::DocumentObject* pObj, c // Enable selection from origin of current part/ if (pObj->isDerivedFrom()) { - return allowOrigin(body, originGroup, pObj); + return allowOrigin(originGroup, pObj); } if (pObj->isDerivedFrom()) { - return allowDatum(body, pObj); + return allowDatum(originGroup, pObj); } // The flag was used to be set. So, this block will never be treated and really doesn't make sense anyway @@ -109,25 +108,22 @@ bool ReferenceSelection::allow(App::Document* pDoc, App::DocumentObject* pObj, c return false; } -PartDesign::Body* ReferenceSelection::getBody() const -{ - auto* body = support ? PartDesign::Body::findBodyOf(support) - : PartDesignGui::getBody(false); - return body; -} -App::OriginGroupExtension* ReferenceSelection::getOriginGroupExtension(PartDesign::Body *body) const +App::OriginGroupExtension* ReferenceSelection::getBoundaryOriginGroupExtension() const { - App::DocumentObject* originGroupObject = nullptr; + const App::DocumentObject* originGroupObject = nullptr; + auto* body = support ? PartDesign::Body::findBodyOf(support) + : PartDesignGui::getBody(false); if (body) { // Search for Part of the body - originGroupObject = App::OriginGroupExtension::getGroupOfObject(body); + originGroupObject = App::OriginGroupExtension::getBoundaryGroupOfObject(body); } else if (support) { // if no body search part for support - originGroupObject = App::OriginGroupExtension::getGroupOfObject(support); + originGroupObject = App::OriginGroupExtension::getBoundaryGroupOfObject(support); } else { // fallback to active part - originGroupObject = PartDesignGui::getActivePart(); + App::DocumentObject* part=PartDesignGui::getActivePart(); + originGroupObject = App::OriginGroupExtension::getBoundaryGroupOfObject(part); } App::OriginGroupExtension* originGroup = nullptr; @@ -137,7 +133,9 @@ App::OriginGroupExtension* ReferenceSelection::getOriginGroupExtension(PartDesig return originGroup; } -bool ReferenceSelection::allowOrigin(PartDesign::Body *body, App::OriginGroupExtension* originGroup, App::DocumentObject* pObj) const + +bool ReferenceSelection::allowOrigin(App::OriginGroupExtension* originGroup, + App::DocumentObject* pObj) const { bool fits = false; if (type.testFlag(AllowSelection::FACE) && pObj->isDerivedFrom()) { @@ -147,41 +145,39 @@ bool ReferenceSelection::allowOrigin(PartDesign::Body *body, App::OriginGroupExt fits = true; } - if (fits) { // check that it actually belongs to the chosen body or part - try { // here are some throwers - if (body) { - if (body->hasObject(pObj, true) ) { - return true; - } + if (fits) { // check that it actually belongs to the chosen group + try { // here are some throwers + if (!originGroup) { + return true; } - else if (originGroup ) { - if (originGroup->hasObject(pObj, true)) { - return true; - } + if (originGroup->hasObject(pObj, true)) { + return true; } } catch (const Base::Exception&) { } } - return false; // The Plane/Axis doesn't fits our needs + return false; // The Plane/Axis doesn't fits our needs } -bool ReferenceSelection::allowDatum(PartDesign::Body *body, App::DocumentObject* pObj) const +bool ReferenceSelection::allowDatum(App::OriginGroupExtension* originGroup, + App::DocumentObject* pObj) const { - if (!body) { // Allow selecting Part::Datum features from the active Body - return false; + if (!originGroup) { + return true; } - else if (!type.testFlag(AllowSelection::OTHERBODY) && !body->hasObject(pObj)) { - return false; + if (originGroup->hasObject(pObj, true)) { + return true; } - - if (type.testFlag(AllowSelection::FACE) && (pObj->isDerivedFrom())) + if (type.testFlag(AllowSelection::FACE) && (pObj->isDerivedFrom())) { return true; - if (type.testFlag(AllowSelection::EDGE) && (pObj->isDerivedFrom())) + } + if (type.testFlag(AllowSelection::EDGE) && (pObj->isDerivedFrom())) { return true; - if (type.testFlag(AllowSelection::POINT) && (pObj->isDerivedFrom())) + } + if (type.testFlag(AllowSelection::POINT) && (pObj->isDerivedFrom())) { return true; - + } return false; } @@ -299,37 +295,6 @@ bool getReferencedSelection(const App::DocumentObject* thisObj, const Gui::Selec std::string subname = msg.pSubName; - //check if the selection is an external reference and ask the user what to do - //of course only if thisObj is in a body, as otherwise the old workflow would not - //be supported - PartDesign::Body* body = PartDesignGui::getBodyFor(thisObj, false); - bool originfeature = selObj->isDerivedFrom(); - if (!originfeature && body) { - PartDesign::Body* selBody = PartDesignGui::getBodyFor(selObj, false); - if (!selBody || body != selBody) { - QDialog dia(Gui::getMainWindow()); - Ui_DlgReference dlg; - dlg.setupUi(&dia); - dia.setModal(true); - int result = dia.exec(); - if (result == QDialog::DialogCode::Rejected) { - selObj = nullptr; - return false; - } - - if (!dlg.radioXRef->isChecked()) { - App::Document* document = thisObj->getDocument(); - document->openTransaction("Make copy"); - auto copy = PartDesignGui::TaskFeaturePick::makeCopy(selObj, subname, dlg.radioIndependent->isChecked()); - body->addObject(copy); - - selObj = copy; - subname.erase(std::remove_if(subname.begin(), subname.end(), &isdigit), subname.end()); - subname.append("1"); - } - } - } - // Remove subname for planes and datum features if (PartDesign::Feature::isDatum(selObj)) { subname = ""; diff --git a/src/Mod/PartDesign/Gui/ReferenceSelection.h b/src/Mod/PartDesign/Gui/ReferenceSelection.h index 6a27bc774d57..2110c6924542 100644 --- a/src/Mod/PartDesign/Gui/ReferenceSelection.h +++ b/src/Mod/PartDesign/Gui/ReferenceSelection.h @@ -55,10 +55,9 @@ class ReferenceSelection : public Gui::SelectionFilterGate bool allow(App::Document* pDoc, App::DocumentObject* pObj, const char* sSubName) override; private: - PartDesign::Body* getBody() const; - App::OriginGroupExtension* getOriginGroupExtension(PartDesign::Body *body) const; - bool allowOrigin(PartDesign::Body *body, App::OriginGroupExtension* originGroup, App::DocumentObject* pObj) const; - bool allowDatum(PartDesign::Body *body, App::DocumentObject* pObj) const; + App::OriginGroupExtension* getBoundaryOriginGroupExtension() const; + bool allowOrigin(App::OriginGroupExtension* originGroup, App::DocumentObject* pObj) const; + bool allowDatum(App::OriginGroupExtension* originGroup, App::DocumentObject* pObj) const; bool allowPartFeature(App::DocumentObject* pObj, const char* sSubName) const; bool isEdge(App::DocumentObject* pObj, const char* sSubName) const; bool isFace(App::DocumentObject* pObj, const char* sSubName) const; diff --git a/src/Mod/PartDesign/Gui/SketchWorkflow.cpp b/src/Mod/PartDesign/Gui/SketchWorkflow.cpp index 074ffea2f82b..0c4db5e1293a 100644 --- a/src/Mod/PartDesign/Gui/SketchWorkflow.cpp +++ b/src/Mod/PartDesign/Gui/SketchWorkflow.cpp @@ -193,6 +193,19 @@ class SupportPlaneValidator mutable Gui::SelectionObject faceSelection; }; +App::GeoFeatureGroupExtension* getBoundaryGroupExtensionOfBody(const PartDesign::Body* activeBody) +{ + App::GeoFeatureGroupExtension *geoGroup{nullptr}; + if (activeBody) { + auto group( App::GeoFeatureGroupExtension::getBoundaryGroupOfObject(activeBody) ); + if (group) { + geoGroup = group->getExtensionByType(); + } + } + + return geoGroup; +} + class SketchPreselection { public: @@ -295,7 +308,8 @@ class SketchPreselection void handleIfSupportOutOfBody(App::DocumentObject* selectedObject) { - if (!activeBody->hasObject(selectedObject)) { + App::GeoFeatureGroupExtension *bodyGroup = getBoundaryGroupExtensionOfBody(activeBody); + if (bodyGroup && !bodyGroup->hasObject(selectedObject,true)) { if ( !selectedObject->isDerivedFrom ( App::Plane::getClassTypeId() ) ) { // TODO check here if the plane associated with right part/body (2015-09-01, Fat-Zer) @@ -403,7 +417,7 @@ class PlaneFinder void findDatumPlanes() { - App::GeoFeatureGroupExtension *geoGroup = getGroupExtensionOfBody(); + App::GeoFeatureGroupExtension *boundaryGroup = getBoundaryGroupExtensionOfBody(activeBody); const std::vector types = { PartDesign::Plane::getClassTypeId(), App::Plane::getClassTypeId() }; auto datumPlanes = appdocument->getObjectsOfType(types); @@ -411,7 +425,11 @@ class PlaneFinder if (std::find(planes.begin(), planes.end(), plane) != planes.end()) { continue; // Skip if already in planes (for base planes) } - + if(App::OriginGroupExtension::getGroupOfObject(plane)) + continue; + if(boundaryGroup) + if(!boundaryGroup->hasObject(plane,true)) + continue; planes.push_back ( plane ); // Check whether this plane belongs to the active body if ( activeBody->hasObject(plane, true) ) { @@ -423,19 +441,21 @@ class PlaneFinder } } else { PartDesign::Body *planeBody = PartDesign::Body::findBodyOf (plane); + App::Part *activePart = PartDesignGui::getActivePart(); + auto planePart = PartDesignGui::getPartFor(plane, false); if ( planeBody ) { - if ( ( geoGroup && geoGroup->hasObject ( planeBody, true ) ) || - !App::GeoFeatureGroupExtension::getGroupOfObject (planeBody) ) { + if ( !activePart || (activePart && activePart->hasObject ( planeBody, true ) )) { status.push_back ( PartDesignGui::TaskFeaturePick::otherBody ); - } else { + } else if (planePart) { status.push_back ( PartDesignGui::TaskFeaturePick::otherPart ); + } else { + status.push_back ( PartDesignGui::TaskFeaturePick::notInBody ); } } else { - if ( ( geoGroup && geoGroup->hasObject ( plane, true ) ) || - !App::GeoFeatureGroupExtension::getGroupOfObject ( plane ) ) { + if (planePart) { status.push_back ( PartDesignGui::TaskFeaturePick::otherPart ); } else { - status.push_back ( PartDesignGui::TaskFeaturePick::notInBody ); + status.push_back ( PartDesignGui::TaskFeaturePick::notInPart ); } } } @@ -475,18 +495,6 @@ class PlaneFinder } } - App::GeoFeatureGroupExtension* getGroupExtensionOfBody() const - { - App::GeoFeatureGroupExtension *geoGroup{nullptr}; - if (activeBody) { - auto group( App::GeoFeatureGroupExtension::getGroupOfObject(activeBody) ); - if (group) { - geoGroup = group->getExtensionByType(); - } - } - - return geoGroup; - } private: App::Document* appdocument; diff --git a/src/Mod/PartDesign/Gui/TaskDatumParameters.cpp b/src/Mod/PartDesign/Gui/TaskDatumParameters.cpp index 5499041fbd60..fad6ecc5286e 100644 --- a/src/Mod/PartDesign/Gui/TaskDatumParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskDatumParameters.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -110,13 +111,22 @@ bool TaskDlgDatumParameters::accept() { return false; } - //see what to do with external references - //check the prerequisites for the selected objects - //the user has to decide which option we should take if external references are used + // see what to do with external references + // check the prerequisites for the selected objects + // the user has to decide which option we should take if external references are used + bool extReference = false; + + // Determine the “owner boundary” from the active Body, but make Body transparent. + const App::DocumentObject* pcActiveGroupObject = + App::GeoFeatureGroupExtension::getBoundaryGroupOfObject(static_cast(pcActiveBody)); + auto pcActiveGroup = pcActiveGroupObject->getExtensionByType(); + for (App::DocumentObject* obj : pcDatum->AttachmentSupport.getValues()) { - if (pcActiveBody && !pcActiveBody->hasObject(obj) && !pcActiveBody->getOrigin()->hasObject(obj)) + if (pcActiveBody && !pcActiveBody->hasObject(obj) && pcActiveGroup) if(!pcActiveGroup->hasObject(obj)) { extReference = true; + break; + } } if(extReference) { @@ -134,7 +144,7 @@ bool TaskDlgDatumParameters::accept() { std::vector subs = pcDatum->AttachmentSupport.getSubValues(); int index = 0; for (App::DocumentObject* obj : pcDatum->AttachmentSupport.getValues()) { - if (pcActiveBody && !pcActiveBody->hasObject(obj) && !pcActiveBody->getOrigin()->hasObject(obj)) { + if (pcActiveBody && !pcActiveBody->hasObject(obj) && pcActiveGroup) if(!pcActiveGroup->hasObject(obj)) { auto* copy = PartDesignGui::TaskFeaturePick::makeCopy(obj, subs[index], dlg.radioIndependent->isChecked()); if (copy) { copyObjects.push_back(copy); diff --git a/src/Mod/PartDesign/Gui/TaskFeaturePick.cpp b/src/Mod/PartDesign/Gui/TaskFeaturePick.cpp index 806c6f36fa60..535baafc5586 100644 --- a/src/Mod/PartDesign/Gui/TaskFeaturePick.cpp +++ b/src/Mod/PartDesign/Gui/TaskFeaturePick.cpp @@ -72,11 +72,13 @@ const QString TaskFeaturePick::getFeatureStatusString(const featureStatus st) case isUsed: return tr("Sketch already used by other feature"); case otherBody: - return tr("Belongs to another body"); + return tr("In other body"); case otherPart: - return tr("Belongs to another part"); + return tr("In other part"); case notInBody: - return tr("Doesn't belong to any body"); + return tr("Not in a body"); + case notInPart: + return tr("Not in a body or part"); case basePlane: return tr("Base plane"); case afterTip: @@ -100,8 +102,6 @@ TaskFeaturePick::TaskFeaturePick(std::vector& objects, // clang-format off connect(ui->checkUsed, &QCheckBox::toggled, this, &TaskFeaturePick::onUpdate); - connect(ui->checkOtherBody, &QCheckBox::toggled, this, &TaskFeaturePick::onUpdate); - connect(ui->checkOtherPart, &QCheckBox::toggled, this, &TaskFeaturePick::onUpdate); connect(ui->radioIndependent, &QRadioButton::toggled, this, &TaskFeaturePick::onUpdate); connect(ui->radioDependent, &QRadioButton::toggled, this, &TaskFeaturePick::onUpdate); connect(ui->radioXRef, &QRadioButton::toggled, this, &TaskFeaturePick::onUpdate); @@ -202,13 +202,13 @@ void TaskFeaturePick::updateList() item->setHidden(true); break; case otherBody: - item->setHidden(!ui->checkOtherBody->isChecked()); + item->setHidden(false); break; case otherPart: - item->setHidden(!ui->checkOtherPart->isChecked()); + item->setHidden(false); break; case notInBody: - item->setHidden(!ui->checkOtherPart->isChecked()); + item->setHidden(false); break; case basePlane: item->setHidden(false); @@ -225,9 +225,6 @@ void TaskFeaturePick::updateList() void TaskFeaturePick::onUpdate(bool) { bool enable = false; - if (ui->checkOtherBody->isChecked() || ui->checkOtherPart->isChecked()) { - enable = true; - } ui->radioDependent->setEnabled(enable); ui->radioIndependent->setEnabled(enable); @@ -283,42 +280,7 @@ std::vector TaskFeaturePick::buildFeatures() .getDocument(documentName.c_str()) ->getObject(t.toLatin1().data()); - // build the dependent copy or reference if wanted by the user - if (status == otherBody || status == otherPart || status == notInBody) { - if (!ui->radioXRef->isChecked()) { - auto copy = makeCopy(obj, "", ui->radioIndependent->isChecked()); - - if (status == otherBody) { - activeBody->addObject(copy); - } - else if (status == otherPart) { - auto oBody = PartDesignGui::getBodyFor(obj, false); - if (!oBody) { - activePart->addObject(copy); - } - else { - activeBody->addObject(copy); - } - } - else if (status == notInBody) { - activeBody->addObject(copy); - // doesn't supposed to get here anything but sketch but to be on the - // safe side better to check - if (copy->isDerivedFrom()) { - Sketcher::SketchObject* sketch = - static_cast(copy); - PartDesignGui::fixSketchSupport(sketch); - } - } - result.push_back(copy); - } - else { - result.push_back(obj); - } - } - else { - result.push_back(obj); - } + result.push_back(obj); } index++; @@ -577,8 +539,6 @@ void TaskFeaturePick::slotDeleteDocument(const Gui::Document&) void TaskFeaturePick::showExternal(bool val) { - ui->checkOtherBody->setChecked(val); - ui->checkOtherPart->setChecked(val); updateList(); } diff --git a/src/Mod/PartDesign/Gui/TaskFeaturePick.h b/src/Mod/PartDesign/Gui/TaskFeaturePick.h index 84139fb96ddc..5b49493f52de 100644 --- a/src/Mod/PartDesign/Gui/TaskFeaturePick.h +++ b/src/Mod/PartDesign/Gui/TaskFeaturePick.h @@ -52,6 +52,7 @@ class TaskFeaturePick : public Gui::TaskView::TaskBox otherBody, otherPart, notInBody, + notInPart, basePlane, afterTip }; diff --git a/src/Mod/PartDesign/Gui/TaskFeaturePick.ui b/src/Mod/PartDesign/Gui/TaskFeaturePick.ui index 6d4a9f36b799..89b57fa02d16 100644 --- a/src/Mod/PartDesign/Gui/TaskFeaturePick.ui +++ b/src/Mod/PartDesign/Gui/TaskFeaturePick.ui @@ -36,20 +36,6 @@ false - - - - From other bodies of the same part - - - - - - - From different parts or free features - - - diff --git a/src/Mod/PartDesign/Gui/TaskPipeParameters.cpp b/src/Mod/PartDesign/Gui/TaskPipeParameters.cpp index e1d124549ff1..00821e30c669 100644 --- a/src/Mod/PartDesign/Gui/TaskPipeParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPipeParameters.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -453,6 +454,11 @@ bool TaskPipeParameters::accept() App::DocumentObject* spine = pipe->Spine.getValue(); App::DocumentObject* auxSpine = pipe->AuxiliarySpine.getValue(); + // Determine the “owner boundary” from the active Body, but make Body transparent. + const App::DocumentObject* pcActiveGroupObject =App::OriginGroupExtension::getBoundaryGroupOfObject(pcActiveBody); + auto pcActiveGroup = pcActiveGroupObject->getExtensionByType(); + + // If a spine isn't set but user entered a label then search for the appropriate document object QString label = ui->spineBaseEdit->text(); if (!spine && !label.isEmpty()) { @@ -467,16 +473,15 @@ bool TaskPipeParameters::accept() } } - if (spine && !pcActiveBody->hasObject(spine) && !pcActiveBody->getOrigin()->hasObject(spine)) { + if (spine && !pcActiveBody->hasObject(spine) && pcActiveGroup) if(!pcActiveGroup->hasObject(spine)) { extReference = true; } - else if (auxSpine && !pcActiveBody->hasObject(auxSpine) - && !pcActiveBody->getOrigin()->hasObject(auxSpine)) { + else if (auxSpine && !pcActiveBody->hasObject(auxSpine) && pcActiveGroup) if(!pcActiveGroup->hasObject(auxSpine)) { extReference = true; } else { for (App::DocumentObject* obj : pipe->Sections.getValues()) { - if (!pcActiveBody->hasObject(obj) && !pcActiveBody->getOrigin()->hasObject(obj)) { + if (!pcActiveBody->hasObject(obj) && pcActiveGroup) if(!pcActiveGroup->hasObject(obj)) { extReference = true; break; } @@ -494,7 +499,7 @@ bool TaskPipeParameters::accept() } if (!dlg.radioXRef->isChecked()) { - if (!pcActiveBody->hasObject(spine) && !pcActiveBody->getOrigin()->hasObject(spine)) { + if (spine && !pcActiveBody->hasObject(spine) && pcActiveGroup) if(!pcActiveGroup->hasObject(spine)) { pipe->Spine.setValue( PartDesignGui::TaskFeaturePick::makeCopy(spine, "", @@ -502,8 +507,7 @@ bool TaskPipeParameters::accept() pipe->Spine.getSubValues()); copies.push_back(pipe->Spine.getValue()); } - else if (!pcActiveBody->hasObject(auxSpine) - && !pcActiveBody->getOrigin()->hasObject(auxSpine)) { + else if (auxSpine && !pcActiveBody->hasObject(auxSpine) && pcActiveGroup) if(!pcActiveGroup->hasObject(auxSpine)) { pipe->AuxiliarySpine.setValue( PartDesignGui::TaskFeaturePick::makeCopy(auxSpine, "", diff --git a/src/Mod/PartDesign/TestPartDesignApp.py b/src/Mod/PartDesign/TestPartDesignApp.py index be2523462221..dcaf6a8a9475 100644 --- a/src/Mod/PartDesign/TestPartDesignApp.py +++ b/src/Mod/PartDesign/TestPartDesignApp.py @@ -59,3 +59,4 @@ # Topological naming problem from PartDesignTests.TestTopologicalNamingProblem import TestTopologicalNamingProblem + diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index 7c5dccc8f33c..b63a0139df70 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -91,6 +91,7 @@ #include #include #include +#include #include #include #include @@ -4077,25 +4078,10 @@ bool SketchObject::isExternalAllowed(App::Document* pDoc, App::DocumentObject* p return true;// prohibiting this reference won't remove the problem anyway... } - - // Note: Checking for the body of the support doesn't work when the support are the three base - // planes - Part::BodyBase* body_this = Part::BodyBase::findBodyOf(this); - Part::BodyBase* body_obj = Part::BodyBase::findBodyOf(pObj); - App::Part* part_this = App::Part::getPartOfObject(this); - App::Part* part_obj = App::Part::getPartOfObject(pObj); - if (part_this == part_obj) {// either in the same part, or in the root of document - if (!body_this) { - return true; - } - else if (body_this == body_obj) { - return true; - } - else { - if (rsn) - *rsn = rlOtherBody; - return false; - } + auto group_this = App::GeoFeatureGroupExtension::getBoundaryGroupOfObject(this); + auto group_obj = App::GeoFeatureGroupExtension::getBoundaryGroupOfObject(pObj); + if (group_this == group_obj) {// either in the same part, or in the root of document + return true; } else { // cross-part link. Disallow, should be done via shapebinders only @@ -8795,7 +8781,8 @@ void SketchObject::rebuildExternalGeometry(std::optional extToAdd } } - Base::Placement Plm = Placement.getValue(); + Base::Placement grpPlm = App::GeoFeatureGroupExtension::globalGroupPlacementInBoundary(this); + Base::Placement Plm = grpPlm*Placement.getValue(); Base::Vector3d Pos = Plm.getPosition(); Base::Rotation Rot = Plm.getRotation(); Base::Rotation invRot = Rot.inverse(); @@ -8839,6 +8826,8 @@ void SketchObject::rebuildExternalGeometry(std::optional extToAdd const std::string &SubElement=SubElements[i]; const std::string &key = keys[i]; + Base::Placement objPlm = invPlm*App::GeoFeatureGroupExtension::globalGroupPlacementInBoundary(Obj); + bool beingCreated = false; if (extToAdd) { beingCreated = extToAdd->obj == Obj && extToAdd->subname == SubElement; @@ -8877,7 +8866,7 @@ void SketchObject::rebuildExternalGeometry(std::optional extToAdd GeomAPI_ProjectPointOnSurf proj(P, gPlane); P = proj.NearestPoint(); Base::Vector3d p(P.X(), P.Y(), P.Z()); - invPlm.multVec(p, p); + objPlm.multVec(p, p); Part::GeomPoint* point = new Part::GeomPoint(p); GeometryFacade::setConstruction(point, true); @@ -8949,11 +8938,11 @@ void SketchObject::rebuildExternalGeometry(std::optional extToAdd if (projection && !refSubShape.IsNull()) { switch (refSubShape.ShapeType()) { case TopAbs_FACE: { - processFace(invRot, invPlm, mov, sketchPlane, gPlane, sketchAx3, aProjFace, geos, refSubShape); + processFace(invRot, objPlm, mov, sketchPlane, gPlane, sketchAx3, aProjFace, geos, refSubShape); } break; case TopAbs_EDGE: { const TopoDS_Edge& edge = TopoDS::Edge(refSubShape); - processEdge(edge, geos, gPlane, invPlm, mov, sketchPlane, invRot, sketchAx3, aProjFace); + processEdge(edge, geos, gPlane, objPlm, mov, sketchPlane, invRot, sketchAx3, aProjFace); } break; case TopAbs_VERTEX: { importVertex(refSubShape); @@ -8981,7 +8970,7 @@ void SketchObject::rebuildExternalGeometry(std::optional extToAdd auto edges = intersectionShape.getSubTopoShapes(TopAbs_EDGE); for (const auto& s : edges) { TopoDS_Edge edge = TopoDS::Edge(s.getShape()); - processEdge(edge, geos, gPlane, invPlm, mov, sketchPlane, invRot, sketchAx3, aProjFace); + processEdge(edge, geos, gPlane, objPlm, mov, sketchPlane, invRot, sketchAx3, aProjFace); } // Section of some face (e.g. sphere) produce more than one arcs // from the same circle. So we try to fit the arcs with a single diff --git a/src/Mod/Sketcher/Gui/Command.cpp b/src/Mod/Sketcher/Gui/Command.cpp index 6cfee9d22d7a..b0b43c16c2e9 100644 --- a/src/Mod/Sketcher/Gui/Command.cpp +++ b/src/Mod/Sketcher/Gui/Command.cpp @@ -32,8 +32,10 @@ #include +#include #include #include +#include #include #include #include @@ -46,6 +48,7 @@ #include #include #include +#include #include #include #include @@ -147,6 +150,24 @@ Attacher::eMapMode SuggestAutoMapMode(Attacher::SuggestResult::eSuggestResult* p /* Sketch commands =======================================================*/ DEF_STD_CMD_A(CmdSketcherNewSketch) +namespace { + QString getAutoGroupCommandStr() + // Helper function to get the python code to add the newly created object to the active Part/Body object if present + { + App::GeoFeature* activeObj = Gui::Application::Instance->activeView()->getActiveObject(PDBODYKEY); + if (!activeObj) { + activeObj = Gui::Application::Instance->activeView()->getActiveObject(PARTKEY); + } + + if (activeObj) { + QString activeName = QString::fromLatin1(activeObj->getNameInDocument()); + return QStringLiteral("App.ActiveDocument.getObject('%1\').addObject(obj)\n").arg(activeName); + } + + return QStringLiteral("# Object created at document root."); + } +} + CmdSketcherNewSketch::CmdSketcherNewSketch() : Command("Sketcher_NewSketch") { @@ -244,9 +265,8 @@ void CmdSketcherNewSketch::activated(int iMsg) std::string FeatName = getUniqueObjectName("Sketch"); openCommand(QT_TRANSLATE_NOOP("Command", "Create a new sketch on a face")); - doCommand(Doc, - "App.activeDocument().addObject('Sketcher::SketchObject', '%s')", - FeatName.c_str()); + doCommand(Doc,"obj = App.activeDocument().addObject('Sketcher::SketchObject', '%s')", FeatName.c_str()); + doCommand(Doc, getAutoGroupCommandStr().toUtf8()); if (mapmode < Attacher::mmDummy_NumberOfModes) doCommand(Gui, "App.activeDocument().%s.MapMode = \"%s\"", @@ -287,16 +307,16 @@ void CmdSketcherNewSketch::activated(int iMsg) openCommand(QT_TRANSLATE_NOOP("Command", "Create a new sketch")); if (groupSelected) { doCommand(Doc, - "App.activeDocument().getObject('%s').addObject(App.activeDocument().addObject('Sketcher::SketchObject', '%s'))", + "obj = App.activeDocument().getObject('%s').addObject(App.activeDocument().addObject('Sketcher::SketchObject', '%s'))", groupName.c_str(), FeatName.c_str()); } else { doCommand(Doc, - "App.activeDocument().addObject('Sketcher::SketchObject', '%s')", + "obj = App.activeDocument().addObject('Sketcher::SketchObject', '%s')", FeatName.c_str()); } - + doCommand(Doc, getAutoGroupCommandStr().toUtf8()); doCommand(Doc, "App.activeDocument().%s.Placement = App.Placement(App.Vector(%f, %f, %f), " "App.Rotation(%f, %f, %f, %f))", @@ -1023,8 +1043,7 @@ void CmdSketcherMergeSketches::activated(int iMsg) std::string FeatName = getUniqueObjectName("Sketch"); openCommand(QT_TRANSLATE_NOOP("Command", "Merge sketches")); - doCommand( - Doc, "App.activeDocument().addObject('Sketcher::SketchObject', '%s')", FeatName.c_str()); + doCommand(Doc, "App.activeDocument().addObject('Sketcher::SketchObject', '%s')", FeatName.c_str()); Sketcher::SketchObject* mergesketch = static_cast(doc->getObject(FeatName.c_str()));