Mercurial > hg > orthanc-stone
changeset 2189:9befaa5238b5 deep-learning
integration default->deep-learning
line wrap: on
line diff
--- a/.hgignore Thu May 30 21:31:37 2024 +0200 +++ b/.hgignore Fri Apr 18 14:17:06 2025 +0200 @@ -21,6 +21,7 @@ Applications/Samples/Deprecated/WebAssembly/build/ Applications/Samples/Deprecated/WebAssembly/ThirdPartyDownloads/ Applications/Samples/Deprecated/WebAssembly/installDir/ +Applications/StoneWebViewer/WebAssembly/Build/ StoneWebViewer/Plugin/ThirdPartyDownloads/ StoneWebViewer/Resources/package-lock.json StoneWebViewer/WebAssembly/ThirdPartyDownloads/
--- a/Applications/Resources/Colormaps/GenerateColormaps.py Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Resources/Colormaps/GenerateColormaps.py Fri Apr 18 14:17:06 2025 +0200 @@ -4,7 +4,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License
--- a/Applications/Resources/Graveyard/LoaderCache.cpp Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Resources/Graveyard/LoaderCache.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Resources/Graveyard/LoaderCache.h Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Resources/Graveyard/LoaderCache.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Resources/Graveyard/Messaging/CurlOrthancConnection.cpp Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Resources/Graveyard/Messaging/CurlOrthancConnection.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Resources/Graveyard/Messaging/CurlOrthancConnection.h Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Resources/Graveyard/Messaging/CurlOrthancConnection.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Resources/Graveyard/Messaging/IOrthancConnection.h Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Resources/Graveyard/Messaging/IOrthancConnection.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Resources/Graveyard/ReferenceLineFactory.cpp Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Resources/Graveyard/ReferenceLineFactory.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Resources/Graveyard/ReferenceLineFactory.h Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Resources/Graveyard/ReferenceLineFactory.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Resources/Graveyard/Threading/BinarySemaphore.cpp Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Resources/Graveyard/Threading/BinarySemaphore.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Resources/Graveyard/Threading/BinarySemaphore.h Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Resources/Graveyard/Threading/BinarySemaphore.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Resources/Graveyard/Threading/IThreadSafety.h Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Resources/Graveyard/Threading/IThreadSafety.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Resources/Graveyard/Threading/SdlBuffering.cpp Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Resources/Graveyard/Threading/SdlBuffering.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Resources/Graveyard/Threading/SdlBuffering.h Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Resources/Graveyard/Threading/SdlBuffering.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Resources/Graveyard/Threading/SharedValue.h Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Resources/Graveyard/Threading/SharedValue.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Resources/Graveyard/Toolbox/DicomDataset.cpp Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Resources/Graveyard/Toolbox/DicomDataset.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Resources/Graveyard/Toolbox/DicomDataset.h Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Resources/Graveyard/Toolbox/DicomDataset.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Resources/LinuxStandardBaseUic.py Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Resources/LinuxStandardBaseUic.py Fri Apr 18 14:17:06 2025 +0200 @@ -4,7 +4,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License
--- a/Applications/Resources/RunCppCheck.sh Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Resources/RunCppCheck.sh Fri Apr 18 14:17:06 2025 +0200 @@ -4,7 +4,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License @@ -29,10 +29,12 @@ fi cat <<EOF > /tmp/cppcheck-suppressions.txt +assertWithSideEffect:../../OrthancStone/Sources/Loaders/OrthancMultiframeVolumeLoader.cpp:341 +assertWithSideEffect:../../OrthancStone/Sources/Loaders/OrthancMultiframeVolumeLoader.cpp:342 constParameter:../../RenderingPlugin/Sources/Plugin.cpp:778 stlFindInsert:../../Applications/Samples/WebAssembly/SingleFrameViewer/SingleFrameViewerApplication.h -stlFindInsert:../../Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp:1166 -stlFindInsert:../../Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp:523 +stlFindInsert:../../Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp:1389 +stlFindInsert:../../Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp:672 unpreciseMathCall:../../OrthancStone/Sources/Scene2D/Internals/CairoFloatTextureRenderer.cpp unpreciseMathCall:../../OrthancStone/Sources/Scene2D/LookupTableTextureSceneLayer.cpp unreadVariable:../../OrthancStone/Sources/Platforms/Sdl/SdlViewport.cpp:159
--- a/Applications/Samples/Common/RtViewerApp.cpp Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/Common/RtViewerApp.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/Common/RtViewerApp.h Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/Common/RtViewerApp.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/Common/RtViewerView.cpp Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/Common/RtViewerView.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/Common/RtViewerView.h Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/Common/RtViewerView.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/Common/SampleHelpers.h Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/Common/SampleHelpers.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/README.md Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/README.md Fri Apr 18 14:17:06 2025 +0200 @@ -205,7 +205,7 @@ -DALLOW_DOWNLOADS=ON ` -DSTATIC_BUILD=ON ` -DOPENSSL_NO_CAPIENG=ON ` - ../orthanc-stone/OrthancStone/Samples/Sdl + ../orthanc-stone/Applications/Samples/Sdl $solutionPath = ls -filter *.sln Write-Host "Solution file(s) available at: $solutionPath"
--- a/Applications/Samples/RtViewerPlugin/CMakeLists.txt Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/RtViewerPlugin/CMakeLists.txt Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License @@ -28,7 +28,7 @@ set(ORTHANC_FRAMEWORK_DEFAULT_VERSION "mainline") set(ORTHANC_FRAMEWORK_DEFAULT_SOURCE "hg") else() - set(ORTHANC_FRAMEWORK_DEFAULT_VERSION "1.11.2") + set(ORTHANC_FRAMEWORK_DEFAULT_VERSION "1.12.4") set(ORTHANC_FRAMEWORK_DEFAULT_SOURCE "web") endif()
--- a/Applications/Samples/RtViewerPlugin/OrthancExplorer.js Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/RtViewerPlugin/OrthancExplorer.js Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/RtViewerPlugin/Plugin.cpp Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/RtViewerPlugin/Plugin.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/Sdl/BoostExtendedConfiguration.cmake Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/Sdl/BoostExtendedConfiguration.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/Sdl/CMakeLists.txt Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/Sdl/CMakeLists.txt Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/Sdl/RtViewer/RtViewerSdl.cpp Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/Sdl/RtViewer/RtViewerSdl.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/Sdl/SdlHelpers.h Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/Sdl/SdlHelpers.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/Sdl/SingleFrameViewer/SdlSimpleViewer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/Sdl/SingleFrameViewer/SdlSimpleViewer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/Sdl/SingleFrameViewer/SdlSimpleViewerApplication.h Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/Sdl/SingleFrameViewer/SdlSimpleViewerApplication.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/Sdl/Utilities.cmake Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/Sdl/Utilities.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/WebAssembly/CMakeLists.txt Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/WebAssembly/CMakeLists.txt Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License @@ -29,7 +29,7 @@ set(ORTHANC_FRAMEWORK_DEFAULT_VERSION "mainline") set(ORTHANC_FRAMEWORK_DEFAULT_SOURCE "hg") else() - set(ORTHANC_FRAMEWORK_DEFAULT_VERSION "1.11.2") + set(ORTHANC_FRAMEWORK_DEFAULT_VERSION "1.12.4") set(ORTHANC_FRAMEWORK_DEFAULT_SOURCE "web") endif()
--- a/Applications/Samples/WebAssembly/RtViewer/RtViewerWasm.cpp Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/WebAssembly/RtViewer/RtViewerWasm.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/WebAssembly/RtViewer/RtViewerWasmApp.js Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/WebAssembly/RtViewer/RtViewerWasmApp.js Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/WebAssembly/RtViewer/RtViewerWasmWrapper.js Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/WebAssembly/RtViewer/RtViewerWasmWrapper.js Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/WebAssembly/SingleFrameViewer/SingleFrameViewer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/WebAssembly/SingleFrameViewer/SingleFrameViewer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/WebAssembly/SingleFrameViewer/SingleFrameViewerApp.js Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/WebAssembly/SingleFrameViewer/SingleFrameViewerApp.js Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/WebAssembly/SingleFrameViewer/SingleFrameViewerApplication.h Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/WebAssembly/SingleFrameViewer/SingleFrameViewerApplication.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/WebAssembly/docker-build.sh Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/WebAssembly/docker-build.sh Fri Apr 18 14:17:06 2025 +0200 @@ -4,7 +4,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/WebAssembly/docker-internal.sh Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/WebAssembly/docker-internal.sh Fri Apr 18 14:17:06 2025 +0200 @@ -4,7 +4,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License
--- a/Applications/Samples/build-wasm-samples.sh Thu May 30 21:31:37 2024 +0200 +++ b/Applications/Samples/build-wasm-samples.sh Fri Apr 18 14:17:06 2025 +0200 @@ -4,7 +4,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License
--- a/Applications/StoneWebViewer/NEWS Thu May 30 21:31:37 2024 +0200 +++ b/Applications/StoneWebViewer/NEWS Fri Apr 18 14:17:06 2025 +0200 @@ -1,6 +1,20 @@ Pending changes in the mainline =============================== +* Automatically stretch to whole range for images without preset +* Improved support of the (0028,9132) tag for Philips multiframe images +* Remember the previous layout when re-opening the viewer. +* Added a Print button in the PDF viewer toolbar. +* Added a Download button in the PDF viewer toolbar. +* New configuration "ScreenshotTemplate" to define the filename of the + "download as JPEG" function. New default value is: + "{PatientID}-{PatientName}-{StudyDate}-{SeriesDescription}-{InstanceNumber}-{CurrentFrame}.jpg" +* Fix loading of US images with a negative PhyiscalDeltaX value. + + +Version 2.6 (2024-08-31) +======================== + * New button "Stretch to whole range" in the "Change windowing" menu Maintenance @@ -8,7 +22,10 @@ * Prevent dragging series before they are ready * Open the first loaded series only if it is part of a selected study +* Fix default windowing for images without preset windowing * Upgraded Emscripten version to 3.1.49 +* Upgraded jquery to 3.7.1 +* Upgraded axios to 1.7.5 Version 2.5 (2022-12-05)
--- a/Applications/StoneWebViewer/Plugin/CMakeLists.txt Thu May 30 21:31:37 2024 +0200 +++ b/Applications/StoneWebViewer/Plugin/CMakeLists.txt Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License
--- a/Applications/StoneWebViewer/Plugin/OrthancExplorer.js Thu May 30 21:31:37 2024 +0200 +++ b/Applications/StoneWebViewer/Plugin/OrthancExplorer.js Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/StoneWebViewer/Plugin/Plugin.cpp Thu May 30 21:31:37 2024 +0200 +++ b/Applications/StoneWebViewer/Plugin/Plugin.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License @@ -28,6 +28,8 @@ #include <SystemToolbox.h> #include <Toolbox.h> +#include <boost/algorithm/string/predicate.hpp> + static const std::string STONE_WEB_VIEWER_ROOT = "/stone-webviewer"; // (*) static const char* CONFIG_SECTION = "StoneWebViewer"; @@ -61,7 +63,8 @@ } std::string version = info["Version"].asString(); - if (version != "mainline") + if (version != "mainline" && + !boost::starts_with(version, "mainline-")) // Allow DICOMweb versions such as "mainline-commitId" { std::vector<std::string> tokens; Orthanc::Toolbox::TokenizeString(tokens, version, '.');
--- a/Applications/StoneWebViewer/Resources/GenerateImages.py Thu May 30 21:31:37 2024 +0200 +++ b/Applications/StoneWebViewer/Resources/GenerateImages.py Fri Apr 18 14:17:06 2025 +0200 @@ -4,7 +4,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License
--- a/Applications/StoneWebViewer/Resources/Graveyard/print-2.js Thu May 30 21:31:37 2024 +0200 +++ b/Applications/StoneWebViewer/Resources/Graveyard/print-2.js Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/StoneWebViewer/Resources/Graveyard/print.js Thu May 30 21:31:37 2024 +0200 +++ b/Applications/StoneWebViewer/Resources/Graveyard/print.js Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/StoneWebViewer/Version.cmake Thu May 30 21:31:37 2024 +0200 +++ b/Applications/StoneWebViewer/Version.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License @@ -24,6 +24,6 @@ set(ORTHANC_FRAMEWORK_DEFAULT_VERSION "mainline") set(ORTHANC_FRAMEWORK_DEFAULT_SOURCE "hg") else() - set(ORTHANC_FRAMEWORK_DEFAULT_VERSION "1.11.2") + set(ORTHANC_FRAMEWORK_DEFAULT_VERSION "1.12.4") set(ORTHANC_FRAMEWORK_DEFAULT_SOURCE "web") endif()
--- a/Applications/StoneWebViewer/WebApplication/app.js Thu May 30 21:31:37 2024 +0200 +++ b/Applications/StoneWebViewer/WebApplication/app.js Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License @@ -678,7 +678,14 @@ return null; } }, - + + GetActiveViewportVueComponent: function() { + if (this.activeViewport >= 1 && this.activeViewport <= 4) { + return $('#canvas' + this.activeViewport + '-container')[0].__vue__; + } + return null; + }, + GetActiveSeriesInstanceUid: function() { var s = []; @@ -733,6 +740,24 @@ } }, + GetActiveSeries: function() { + if (this.activeViewport == 1) { + return this.viewport1Content.series; + } + else if (this.activeViewport == 2) { + return this.viewport2Content.series; + } + else if (this.activeViewport == 3) { + return this.viewport3Content.series; + } + else if (this.activeViewport == 4) { + return this.viewport4Content.series; + } + else { + return null; + } + }, + SetResources: function(sourceStudies, sourceSeries) { // Here one can fix input studies/series for missing DICOM tags // that are needed for the Stone Web viewer (e.g. "hand.dcm") @@ -964,7 +989,7 @@ this.layoutCountX = 1; this.layoutCountY = 2; } - + localStorage.setItem('layout', layout); this.FitContent(); }, @@ -1207,7 +1232,58 @@ DownloadJpeg: function() { var canvas = document.getElementById(this.GetActiveCanvas()); - SaveDataUriScheme('StoneWebViewerScreenshot.jpg', canvas.toDataURL('image/jpeg')); + var path = 'StoneWebViewerScreenshot.jpg'; + var viewport = this.GetActiveViewportVueComponent(); + + var template = this.globalConfiguration.ScreenshotTemplate; + if (template !== undefined && viewport !== undefined) { + // var seriesInstanceUid = this.GetActiveSeriesInstanceUid() + var activeTags = this.GetActiveSeries().tags; + // add instance related values to the dico + activeTags['0020,0013'] = viewport.instanceNumber; + activeTags['0008,0023'] = viewport.contentDate; + activeTags['0008,0033'] = viewport.contentTime; + + activeTags['0028,0008'] = viewport.numberOfFrames; + activeTags['ffff,9999'] = viewport.currentFrame + 1; // current frame is not a DICOM Tag but, let's give it an internal number to standardize the way we substitue values in the template + + // allow using common Tag names in the template instead of group,element: + const commonTagsTranslation = { + 'PatientName': '0010,0010', + 'PatientID': '0010,0020', + 'PatientBirthDate': '0010,0030', + 'PatientSex': '0010,0040', + + 'StudyDate': '0008,0020', + 'StudyTime': '0008,0030', + 'AccessionNumber': '0008,0050', + 'StudyDescription': '0008,1030', + 'StudyInstanceUID': '0020,000d', + + 'SeriesDate': '0008,0021', + 'SeriesTime': '0008,0031', + 'Modality': '0008,0060', + 'SeriesDescription': '0008,103e', + 'SeriesInstanceUID': '0020,000e', + + 'InstanceNumber': '0020,0013', + 'ContentDate': '0008,0023', + 'ContentTime': '0008,0033', + 'NumberOfFrames': '0028,0008', + 'CurrentFrame': 'ffff,9999' + } + + // replace common tag names by group,element in the template + for (const [symbolicName, numericName] of Object.entries(commonTagsTranslation)) { + template = template.replace('{' + symbolicName + '}', '{' + numericName + '}'); + } + + path = template.replace(/{([0-9a-f,]+)}/g, function(match, group1) { return activeTags[group1] || 'undefined'; }); + console.log('downloading a screenshot with template ', template, ' and tags: ', activeTags, ', final path: ', path); + } + + var canvas = document.getElementById(this.GetActiveCanvas()); + SaveDataUriScheme(path, canvas.toDataURL('image/jpeg')); }, SetCombinedToolActions: function() @@ -1378,7 +1454,11 @@ mounted: function() { // Warning: In this function, the "stone" global object is not initialized yet! - this.SetViewportLayout('1x1'); + if (localStorage.layout) { + this.SetViewportLayout(localStorage.layout); + } else { + this.SetViewportLayout('1x1'); + } if (localStorage.settingNotDiagnostic) { this.settingNotDiagnostic = (localStorage.settingNotDiagnostic == '1');
--- a/Applications/StoneWebViewer/WebApplication/configuration.json Thu May 30 21:31:37 2024 +0200 +++ b/Applications/StoneWebViewer/WebApplication/configuration.json Fri Apr 18 14:17:06 2025 +0200 @@ -149,6 +149,20 @@ **/ "DicomWebHttpHeaders" : { /* "Authorization" : "Bearer ${USER}" */ - } + }, + + + /** + * Define the the filename of the 'Download as Jpeg' screenshots. + * The template can either contain Patient, Study or Series tags + * in the group,element form (e.g. {0008,103e}) or the DICOM tag + * common name (e.g. {SeriesDescription}). A few Instance tags are + * also available: {InstanceNumber}, {ContentDate}, {ContentTime}. + * {CurrentFrame} is also available although not a DICOM Tag. + * (New in Stone Web viewer 2.7). In prior versions, the filename + * was always "StoneWebViewerScreenshot.jpg". + **/ + "ScreenshotTemplate" : "{PatientID}-{PatientName}-{StudyDate}-{SeriesDescription}-{InstanceNumber}-{CurrentFrame}.jpg" + } }
--- a/Applications/StoneWebViewer/WebApplication/index.html Thu May 30 21:31:37 2024 +0200 +++ b/Applications/StoneWebViewer/WebApplication/index.html Fri Apr 18 14:17:06 2025 +0200 @@ -910,6 +910,14 @@ <div class="wv-overlay"> <div class="wv-overlay-bottomleft wvPrintExclude"> + <button class="btn btn-primary" @click="Download()" + data-toggle="tooltip" data-title="Download"> + <i class="fa fa-download"></i> + </button> + <button class="btn btn-primary" @click="Print()" + data-toggle="tooltip" data-title="Print"> + <i class="fa fa-print"></i> + </button> <button class="btn btn-primary" @click="FitWidth()" data-toggle="tooltip" data-title="Fit page width"> <i class="fas fa-text-width"></i> @@ -939,7 +947,7 @@ </div> </div> </script> - <script src="js/jquery-3.4.1.min.js"></script> + <script src="js/jquery-3.7.1.min.js"></script> <script src="js/bootstrap.min.js"></script> <script src="js/vue.min.js"></script> <script src="js/axios.min.js"></script>
--- a/Applications/StoneWebViewer/WebApplication/pdf-viewer.js Thu May 30 21:31:37 2024 +0200 +++ b/Applications/StoneWebViewer/WebApplication/pdf-viewer.js Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License @@ -92,6 +92,46 @@ }); }, methods: { + Download: function() { + if (this.pdfDoc !== null) { + const blob = new Blob([this.pdf], { type: 'application/pdf'}); + const blobUrl = URL.createObjectURL(blob); + + const a = document.createElement('a'); + a.href = blobUrl; + a.download = "report.pdf"; + + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + + // Revoke the object URL to free up memory + URL.revokeObjectURL(blobUrl); + } + }, + Print: function() { + if (this.pdfDoc !== null) { + if (0) { // works on Chrome but with a popup that is blocked by default ! + const blob = new Blob([this.pdf], { type: 'application/pdf'}); + const blobUrl = URL.createObjectURL(blob); + + let w = window.open(blobUrl, '_blank'); + w.print(); + } else { + // Let's open a new window with the pdf + // First we need to convert the pdf from a byte array to a binary string and then to b64 + let binaryStringPdf = ''; + for (let i = 0; i < this.pdf.length; i++) { + binaryStringPdf += String.fromCharCode(this.pdf[i]); + } + + const htmlContent = '<html><body style="margin: 0;"><embed width="100%" height="100%" src="data:application/pdf;base64,' + btoa(binaryStringPdf) + '" type="application/pdf" /></body></html>'; + + let w = window.open('', '_blank'); + w.document.write(htmlContent); + } + } + }, NextPage: function() { if (this.pdfDoc !== null && this.currentPage < this.pdfDoc.numPages) {
--- a/Applications/StoneWebViewer/WebApplication/print.js Thu May 30 21:31:37 2024 +0200 +++ b/Applications/StoneWebViewer/WebApplication/print.js Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License
--- a/Applications/StoneWebViewer/WebAssembly/CMakeLists.txt Thu May 30 21:31:37 2024 +0200 +++ b/Applications/StoneWebViewer/WebAssembly/CMakeLists.txt Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License
--- a/Applications/StoneWebViewer/WebAssembly/JavaScriptLibraries.cmake Thu May 30 21:31:37 2024 +0200 +++ b/Applications/StoneWebViewer/WebAssembly/JavaScriptLibraries.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License @@ -36,13 +36,13 @@ "${CMAKE_CURRENT_BINARY_DIR}/vue-2.6.14") DownloadPackage( - "3e2b4e1522661f7fcf8ad49cb933296c" - "${BASE_URL}/dicom-web/axios-0.19.0.tar.gz" - "${CMAKE_CURRENT_BINARY_DIR}/axios-0.19.0") + "93082a766ebf2748aba038aeb32d8a06" + "${BASE_URL}/dicom-web/axios-1.7.5.tar.gz" + "${CMAKE_CURRENT_BINARY_DIR}/axios-1.7.5") DownloadFile( - "220afd743d9e9643852e31a135a9f3ae" - "${BASE_URL}/jquery-3.4.1.min.js") + "2c872dbe60f4ba70fb85356113d8b35e" + "${BASE_URL}/jquery-3.7.1.min.js") if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/pdfjs) DownloadPackage( @@ -68,10 +68,10 @@ install( FILES ${CMAKE_CURRENT_BINARY_DIR}/bootstrap-3.4.1-dist/js/bootstrap.min.js - ${CMAKE_SOURCE_DIR}/ThirdPartyDownloads/jquery-3.4.1.min.js + ${CMAKE_SOURCE_DIR}/ThirdPartyDownloads/jquery-3.7.1.min.js ${CMAKE_CURRENT_BINARY_DIR}/vue-2.6.14/dist/vue.min.js - ${CMAKE_CURRENT_BINARY_DIR}/axios-0.19.0/dist/axios.min.js - ${CMAKE_CURRENT_BINARY_DIR}/axios-0.19.0/dist/axios.min.map + ${CMAKE_CURRENT_BINARY_DIR}/axios-1.7.5/dist/axios.min.js + ${CMAKE_CURRENT_BINARY_DIR}/axios-1.7.5/dist/axios.min.js.map ${CMAKE_CURRENT_BINARY_DIR}/pdfjs/pdf.js ${CMAKE_CURRENT_BINARY_DIR}/pdfjs/pdf.js.map ${CMAKE_CURRENT_BINARY_DIR}/pdfjs/pdf.worker.js
--- a/Applications/StoneWebViewer/WebAssembly/NOTES.txt Thu May 30 21:31:37 2024 +0200 +++ b/Applications/StoneWebViewer/WebAssembly/NOTES.txt Fri Apr 18 14:17:06 2025 +0200 @@ -21,6 +21,42 @@ https://github.com/jodogne/OrthancDocker/tree/master/wasm-builder +Building WebAssembly using Docker & interactively +================================================= + + +ROOT_DIR=$(pwd)/../../.. +mkdir -p ${ROOT_DIR}/wasm-binaries +docker run -it --rm \ + --dns=8.8.8.8 \ + --user $(id -u):$(id -g) \ + -v ${ROOT_DIR}:/source \ + -v ${ROOT_DIR}/wasm-binaries:/target jodogne/wasm-builder:3.1.49 \ + bash + +# In Docker: +mkdir /tmp/build +cd /tmp/build +source /opt/emsdk/emsdk_env.sh + +cmake /source/Applications/StoneWebViewer/WebAssembly \ + -DCMAKE_BUILD_TYPE=Debug \ + -DORTHANC_STONE_INSTALL_PREFIX=/target/StoneWebViewer \ + -DCMAKE_TOOLCHAIN_FILE=${EMSDK}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake \ + -DSTATIC_BUILD=ON \ + -DLIBCLANG=/usr/lib/llvm-4.0/lib/libclang-4.0.so \ + -G Ninja + +ninja -j12 install + +# each time you modify code, run the ninja command again + +# to serve the WASM code, you may use + "ServeFolders": { + "/stone-webviewer-live" : "/home/alain/o/orthanc-stone/wasm-binaries/StoneWebViewer/" + } + + Native compilation (without Docker) ===================================
--- a/Applications/StoneWebViewer/WebAssembly/ParseWebAssemblyExports.py Thu May 30 21:31:37 2024 +0200 +++ b/Applications/StoneWebViewer/WebAssembly/ParseWebAssemblyExports.py Fri Apr 18 14:17:06 2025 +0200 @@ -1,10 +1,10 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # Stone of Orthanc # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License
--- a/Applications/StoneWebViewer/WebAssembly/StoneModule/CMakeLists.txt Thu May 30 21:31:37 2024 +0200 +++ b/Applications/StoneWebViewer/WebAssembly/StoneModule/CMakeLists.txt Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License
--- a/Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License @@ -120,7 +120,8 @@ ThumbnailType_Pdf, ThumbnailType_Video, ThumbnailType_Loading, - ThumbnailType_Unknown + ThumbnailType_Unknown, + ThumbnailType_Unavailable }; @@ -204,6 +205,76 @@ +enum WindowingState +{ + WindowingState_None = 1, + WindowingState_Fallback = 2, + WindowingState_GlobalPreset = 3, + WindowingState_FramePreset = 4, + WindowingState_User = 5 +}; + + +class WindowingTracker +{ +private: + WindowingState state_; + OrthancStone::Windowing windowing_; + +public: + WindowingTracker() : + state_(WindowingState_None) + { + } + + WindowingState GetState() const + { + return state_; + } + + const OrthancStone::Windowing& GetWindowing() const + { + return windowing_; + } + + void Reset() + { + state_ = WindowingState_None; + windowing_ = OrthancStone::Windowing(); + } + + // Returns "true" iif. the windowing needed an update + bool Update(WindowingState newState, + const OrthancStone::Windowing& newWindowing) + { + if (newState == WindowingState_None) + { + // "Reset()" should have been called + throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); + } + + if (newState >= state_) + { + state_ = newState; + + if (windowing_.IsNear(newWindowing)) + { + return false; + } + else + { + windowing_ = newWindowing; + return true; + } + } + else + { + return false; + } + } +}; + + class IFramesCollection : public boost::noncopyable { public: @@ -239,7 +310,7 @@ std::unique_ptr<OrthancStone::SortedFrames> frames_; public: - SortedFramesCollection(OrthancStone::SortedFrames* frames) + explicit SortedFramesCollection(OrthancStone::SortedFrames* frames) { if (frames == NULL) { @@ -445,13 +516,17 @@ for (size_t i = 0; i < dicom.GetSize(); i++) { - std::string studyInstanceUid, seriesInstanceUid, modality; + std::string modality; + if (!dicom.GetResource(i).LookupStringValue(modality, Orthanc::DICOM_TAG_MODALITY, false)) + { + modality = ""; // Arbitrary value if "Modality" is missing + } + + std::string studyInstanceUid, seriesInstanceUid; if (dicom.GetResource(i).LookupStringValue( studyInstanceUid, Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, false) && dicom.GetResource(i).LookupStringValue( - seriesInstanceUid, Orthanc::DICOM_TAG_SERIES_INSTANCE_UID, false) && - dicom.GetResource(i).LookupStringValue( - modality, Orthanc::DICOM_TAG_MODALITY, false)) + seriesInstanceUid, Orthanc::DICOM_TAG_SERIES_INSTANCE_UID, false)) { // skip series that should not be displayed if (std::find(skipSeriesFromModalities_.begin(), skipSeriesFromModalities_.end(), modality) == skipSeriesFromModalities_.end()) @@ -1122,6 +1197,79 @@ +class InstancesCache : public boost::noncopyable +{ +private: + // Maps "SOP Instance UID" to DICOM parameters + typedef std::map<std::string, OrthancStone::DicomInstanceParameters*> Content; + + Content content_; + + void Clear() + { + for (Content::iterator it = content_.begin(); it != content_.end(); ++it) + { + assert(it->second != NULL); + delete it->second; + } + + content_.clear(); + } + +public: + ~InstancesCache() + { + Clear(); + } + + void Store(const std::string& sopInstanceUid, + const OrthancStone::DicomInstanceParameters& parameters) + { + Content::iterator found = content_.find(sopInstanceUid); + if (found == content_.end()) + { + content_[sopInstanceUid] = parameters.Clone(); + } + } + + class Accessor : public boost::noncopyable + { + private: + std::unique_ptr<OrthancStone::DicomInstanceParameters> parameters_; + + public: + Accessor(InstancesCache& that, + const std::string& sopInstanceUid) + { + Content::iterator found = that.content_.find(sopInstanceUid); + if (found != that.content_.end()) + { + assert(found->second != NULL); + parameters_.reset(found->second->Clone()); + } + } + + bool IsValid() const + { + return parameters_.get() != NULL; + } + + const OrthancStone::DicomInstanceParameters& GetParameters() const + { + if (IsValid()) + { + return *parameters_; + } + else + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); + } + } + }; +}; + + + class SeriesCursor : public boost::noncopyable { public: @@ -1665,8 +1813,7 @@ const OrthancStone::Vector& normal) = 0; virtual void SignalWindowingUpdated(const ViewerViewport& viewport, - double windowingCenter, - double windowingWidth) = 0; + const OrthancStone::Windowing& windowing) = 0; virtual void SignalStoneAnnotationsChanged(const ViewerViewport& viewport, const std::string& sopInstanceUid, @@ -1776,25 +1923,18 @@ static_cast<double>(params.GetHeight())); } - GetViewport().windowingPresetCenters_.resize(params.GetWindowingPresetsCount()); - GetViewport().windowingPresetWidths_.resize(params.GetWindowingPresetsCount()); + GetViewport().windowingPresets_.resize(params.GetWindowingPresetsCount()); for (size_t i = 0; i < params.GetWindowingPresetsCount(); i++) { LOG(INFO) << "Preset windowing " << (i + 1) << "/" << params.GetWindowingPresetsCount() - << ": " << params.GetWindowingPresetCenter(i) - << "," << params.GetWindowingPresetWidth(i); - - GetViewport().windowingPresetCenters_[i] = params.GetWindowingPresetCenter(i); - GetViewport().windowingPresetWidths_[i] = params.GetWindowingPresetWidth(i); + << ": " << params.GetWindowingPreset(i).GetCenter() + << "," << params.GetWindowingPreset(i).GetWidth(); + + GetViewport().windowingPresets_[i] = params.GetWindowingPreset(i); } - if (params.GetWindowingPresetsCount() == 0) - { - LOG(INFO) << "No preset windowing"; - } - - GetViewport().SetWindowingPreset(); + GetViewport().SetDefaultWindowing(params); } uint32_t cineRate; @@ -1828,8 +1968,7 @@ private: std::string sopInstanceUid_; unsigned int frameNumber_; - float windowCenter_; - float windowWidth_; + OrthancStone::Windowing windowing_; bool isMonochrome1_; bool isPrefetch_; @@ -1837,15 +1976,13 @@ SetLowQualityFrame(boost::shared_ptr<ViewerViewport> viewport, const std::string& sopInstanceUid, unsigned int frameNumber, - float windowCenter, - float windowWidth, + const OrthancStone::Windowing& windowing, bool isMonochrome1, bool isPrefetch) : ICommand(viewport), sopInstanceUid_(sopInstanceUid), frameNumber_(frameNumber), - windowCenter_(windowCenter), - windowWidth_(windowWidth), + windowing_(windowing), isMonochrome1_(isMonochrome1), isPrefetch_(isPrefetch) { @@ -1891,9 +2028,11 @@ **/ - const float scaling = windowWidth_ / 255.0f; + const float center = static_cast<float>(windowing_.GetCenter()); + const float width = static_cast<float>(windowing_.GetWidth()); + const float scaling = width / 255.0f; const float offset = (OrthancStone::LinearAlgebra::IsCloseToZero(scaling) ? 0 : - (windowCenter_ - windowWidth_ / 2.0f) / scaling); + (center - width / 2.0f) / scaling); Orthanc::ImageProcessing::ShiftScale(*converted, offset, scaling, false); break; @@ -1979,17 +2118,6 @@ } else { - if (GetViewport().windowingPresetCenters_.empty()) - { - // New in Stone Web viewer 2.2: Deal with Philips multiframe - // (cf. mail from Tomas Kenda on 2021-08-17) - double windowingCenter, windowingWidth; - message.GetDicom().GetDefaultWindowing(windowingCenter, windowingWidth, frameNumber_); - GetViewport().windowingPresetCenters_.push_back(windowingCenter); - GetViewport().windowingPresetWidths_.push_back(windowingWidth); - GetViewport().SetWindowingPreset(); - } - Apply(GetViewport(), message.GetDicom(), frame.release(), sopInstanceUid_, frameNumber_); if (isPrefetch_) @@ -2011,6 +2139,7 @@ dicom.ExtractDicomSummary(tags, ORTHANC_STONE_MAX_TAG_LENGTH); OrthancStone::DicomInstanceParameters parameters(tags); + viewport.instancesCache_->Store(sopInstanceUid, parameters); std::unique_ptr<Orthanc::ImageAccessor> converted; @@ -2080,13 +2209,12 @@ boost::shared_ptr<OrthancStone::WebAssemblyViewport> viewport_; boost::shared_ptr<OrthancStone::DicomResourcesLoader> loader_; OrthancStone::DicomSource source_; - boost::shared_ptr<FramesCache> framesCache_; + boost::shared_ptr<FramesCache> framesCache_; + boost::shared_ptr<InstancesCache> instancesCache_; std::unique_ptr<IFramesCollection> frames_; std::unique_ptr<SeriesCursor> cursor_; - float windowingCenter_; - float windowingWidth_; - std::vector<float> windowingPresetCenters_; - std::vector<float> windowingPresetWidths_; + WindowingTracker windowingTracker_; + std::vector<OrthancStone::Windowing> windowingPresets_; unsigned int cineRate_; bool inverted_; bool fitNextContent_; @@ -2117,6 +2245,37 @@ std::string deepLearningSopInstanceUid_; unsigned int deepLearningFrameNumber_; + void UpdateWindowing(WindowingState state, + const OrthancStone::Windowing& windowing) + { + if (windowingTracker_.Update(state, windowing)) + { + UpdateCurrentTextureParameters(); + + if (observer_.get() != NULL) + { + observer_->SignalWindowingUpdated(*this, windowingTracker_.GetWindowing()); + } + } + } + + + void SetDefaultWindowing(const OrthancStone::DicomInstanceParameters& instance) + { + windowingTracker_.Reset(); + + if (instance.GetWindowingPresetsCount() == 0) + { + LOG(INFO) << "No preset windowing"; + UpdateWindowing(WindowingState_Fallback, instance.GetFallbackWindowing()); + } + else + { + UpdateWindowing(WindowingState_GlobalPreset, instance.GetWindowingPreset(0)); + } + } + + void ScheduleNextPrefetch() { while (!prefetchQueue_.empty()) @@ -2239,9 +2398,47 @@ case Orthanc::PixelFormat_Float32: { + { + // New in Stone Web viewer 2.2: Deal with Philips multiframe + // (cf. mail from Tomas Kenda on 2021-08-17) + InstancesCache::Accessor accessor(*instancesCache_, instance.GetSopInstanceUid()); + OrthancStone::Windowing windowing; + if (accessor.IsValid()) + { + if (accessor.GetParameters().LookupPerFrameWindowing(windowing, frameIndex)) + { + UpdateWindowing(WindowingState_FramePreset, windowing); + } + else if (accessor.GetParameters().GetWindowingPresetsCount() > 0) + { + UpdateWindowing(WindowingState_FramePreset, accessor.GetParameters().GetWindowingPreset(0)); + } + } + } + std::unique_ptr<OrthancStone::FloatTextureSceneLayer> tmp( new OrthancStone::FloatTextureSceneLayer(frame)); - tmp->SetCustomWindowing(windowingCenter_, windowingWidth_); + + if (windowingTracker_.GetState() == WindowingState_None || + windowingTracker_.GetState() == WindowingState_Fallback) + { + const Orthanc::ImageAccessor& texture = tmp->GetTexture(); + if (texture.GetFormat() != Orthanc::PixelFormat_Float32) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); + } + else + { + float minValue, maxValue; + Orthanc::ImageProcessing::GetMinMaxFloatValue(minValue, maxValue, texture); + + const float center = (minValue + maxValue) / 2.0f; + const float width = maxValue - minValue; + UpdateWindowing(WindowingState_Fallback, OrthancStone::Windowing(center, width)); + } + } + + tmp->SetCustomWindowing(windowingTracker_.GetWindowing().GetCenter(), windowingTracker_.GetWindowing().GetWidth()); tmp->SetInverted(inverted_ ^ isMonochrome1); layer.reset(tmp.release()); break; @@ -2268,6 +2465,17 @@ pixelSpacingY = centralPixelSpacingY_; } + // This hack has been introduced to fix an issue where the first US image of a series had negative PhysicalDeltaX value + // while the other images from the series had different geometries. layer->SetOrigin was failing later. + // At the end, it appears that the measures are corrects although we have set the pixelSpacing to 1m so the values are likely + // overwritten later on... + if (pixelSpacingX < 0 || pixelSpacingY < 0) + { + LOG(ERROR) << "Pixel spacings are invalid: " << pixelSpacingX << " " << pixelSpacingY << " setting dummy values to 1000, 1000 -> measures might be invalid !"; + pixelSpacingX = 1000; + pixelSpacingY = 1000; + } + if (FIX_LSD_479) { /** @@ -2596,14 +2804,14 @@ std::map<std::string, std::string> headers, arguments; // arguments["quality"] = "10"; // Low-level quality for test purpose arguments["window"] = ( - boost::lexical_cast<std::string>(windowingCenter_) + "," + - boost::lexical_cast<std::string>(windowingWidth_) + ",linear"); + boost::lexical_cast<std::string>(windowingTracker_.GetWindowing().GetCenter()) + "," + + boost::lexical_cast<std::string>(windowingTracker_.GetWindowing().GetWidth()) + ",linear"); std::unique_ptr<OrthancStone::IOracleCommand> command( source_.CreateDicomWebCommand( uri, arguments, headers, new SetLowQualityFrame( GetSharedObserver(), instance.GetSopInstanceUid(), frameNumber, - windowingCenter_, windowingWidth_, isMonochrome1, isPrefetch))); + windowingTracker_.GetWindowing(), isMonochrome1, isPrefetch))); { std::unique_ptr<OrthancStone::ILoadersContext::ILock> lock(context_.Lock()); @@ -2623,7 +2831,7 @@ { dynamic_cast<OrthancStone::FloatTextureSceneLayer&>( lock->GetController().GetScene().GetLayer(LAYER_TEXTURE)). - SetCustomWindowing(windowingCenter_, windowingWidth_); + SetCustomWindowing(windowingTracker_.GetWindowing().GetCenter(), windowingTracker_.GetWindowing().GetWidth()); } lock->Invalidate(); @@ -2634,11 +2842,13 @@ const OrthancStone::DicomSource& source, const std::string& canvas, boost::shared_ptr<FramesCache> cache, + boost::shared_ptr<InstancesCache> instancesCache, bool softwareRendering, bool linearInterpolation) : context_(context), source_(source), framesCache_(cache), + instancesCache_(instancesCache), fitNextContent_(true), hasFocusOnInstance_(false), focusFrameNumber_(0), @@ -2675,8 +2885,6 @@ emscripten_set_wheel_callback(viewport_->GetCanvasCssSelector().c_str(), this, true, OnWheel); - SetWindowingPreset(); - stoneAnnotations_.reset(new OrthancStone::AnnotationsSceneLayer(LAYER_ANNOTATIONS_STONE)); stoneAnnotations_->SetProbedLayer(LAYER_TEXTURE); } @@ -2685,13 +2893,7 @@ void Handle(const OrthancStone::ViewportController::GrayscaleWindowingChanged& message) { // This event is triggered by the windowing mouse action, from class "GrayscaleWindowingSceneTracker" - windowingCenter_ = message.GetWindowingCenter(); - windowingWidth_ = message.GetWindowingWidth(); - - if (observer_.get() != NULL) - { - observer_->SignalWindowingUpdated(*this, message.GetWindowingCenter(), message.GetWindowingWidth()); - } + UpdateWindowing(WindowingState_User, message.GetWindowing()); } @@ -2834,12 +3036,13 @@ static boost::shared_ptr<ViewerViewport> Create(OrthancStone::WebAssemblyLoadersContext& context, const OrthancStone::DicomSource& source, const std::string& canvas, - boost::shared_ptr<FramesCache> cache, + boost::shared_ptr<FramesCache> framesCache, + boost::shared_ptr<InstancesCache> instancesCache, bool softwareRendering, bool linearInterpolation) { boost::shared_ptr<ViewerViewport> viewport( - new ViewerViewport(context, source, canvas, cache, softwareRendering, linearInterpolation)); + new ViewerViewport(context, source, canvas, framesCache, instancesCache, softwareRendering, linearInterpolation)); { std::unique_ptr<OrthancStone::ILoadersContext::ILock> lock(context.Lock()); @@ -2891,7 +3094,7 @@ frames_.reset(frames); cursor_.reset(new SeriesCursor(frames_->GetFramesCount(), false)); - + if (frames_->GetFramesCount() != 0) { const OrthancStone::DicomInstanceParameters& firstInstance = frames_->GetInstanceOfFrame(0); @@ -2911,11 +3114,16 @@ cursor_.reset(new SeriesCursor(frames_->GetFramesCount(), true)); } } + + SetDefaultWindowing(firstInstance); + } + else + { + windowingTracker_.Reset(); } LOG(INFO) << "Number of frames in series: " << frames_->GetFramesCount(); - SetWindowingPreset(); ClearViewport(); prefetchQueue_.clear(); @@ -3185,33 +3393,6 @@ } - void SetWindowingPreset() - { - assert(windowingPresetCenters_.size() == windowingPresetWidths_.size()); - - if (windowingPresetCenters_.empty()) - { - SetWindowing(128, 256); - } - else - { - SetWindowing(windowingPresetCenters_[0], windowingPresetWidths_[0]); - } - } - - void SetWindowing(float windowingCenter, - float windowingWidth) - { - windowingCenter_ = windowingCenter; - windowingWidth_ = windowingWidth; - UpdateCurrentTextureParameters(); - - if (observer_.get() != NULL) - { - observer_->SignalWindowingUpdated(*this, windowingCenter, windowingWidth); - } - } - void StretchWindowing() { float minValue, maxValue; @@ -3237,7 +3418,9 @@ Orthanc::ImageProcessing::GetMinMaxFloatValue(minValue, maxValue, texture); } - SetWindowing((minValue + maxValue) / 2.0f, maxValue - minValue); + const float center = (minValue + maxValue) / 2.0f; + const float width = maxValue - minValue; + UpdateWindowing(WindowingState_User, OrthancStone::Windowing(center, width)); } void FlipX() @@ -3529,17 +3712,15 @@ void FormatWindowingPresets(Json::Value& target) const { - assert(windowingPresetCenters_.size() == windowingPresetWidths_.size()); - target = Json::arrayValue; - for (size_t i = 0; i < windowingPresetCenters_.size(); i++) - { - const float c = windowingPresetCenters_[i]; - const float w = windowingPresetWidths_[i]; + for (size_t i = 0; i < windowingPresets_.size(); i++) + { + const double c = windowingPresets_[i].GetCenter(); + const double w = windowingPresets_[i].GetWidth(); std::string name = "Preset"; - if (windowingPresetCenters_.size() > 1) + if (windowingPresets_.size() > 1) { name += " " + boost::lexical_cast<std::string>(i + 1); } @@ -3659,6 +3840,12 @@ *this, current.GetOrigin() + synchronizationOffset_, current.GetNormal()); } } + + + void SetUserWindowing(const OrthancStone::Windowing& windowing) + { + UpdateWindowing(WindowingState_User, windowing); + } }; @@ -3865,8 +4052,7 @@ } virtual void SignalWindowingUpdated(const ViewerViewport& viewport, - double windowingCenter, - double windowingWidth) ORTHANC_OVERRIDE + const OrthancStone::Windowing& windowing) ORTHANC_OVERRIDE { EM_ASM({ const customEvent = document.createEvent("CustomEvent"); @@ -3877,8 +4063,8 @@ window.dispatchEvent(customEvent); }, viewport.GetCanvasId().c_str(), - static_cast<int>(boost::math::iround<double>(windowingCenter)), - static_cast<int>(boost::math::iround<double>(windowingWidth))); + static_cast<int>(boost::math::iround<double>(windowing.GetCenter())), + static_cast<int>(boost::math::iround<double>(windowing.GetWidth()))); UpdateReferenceLines(); } @@ -3946,6 +4132,7 @@ static OrthancStone::DicomSource source_; static boost::shared_ptr<FramesCache> framesCache_; +static boost::shared_ptr<InstancesCache> instancesCache_; static boost::shared_ptr<OrthancStone::WebAssemblyLoadersContext> context_; static std::string stringBuffer_; static bool softwareRendering_ = false; @@ -3996,7 +4183,7 @@ if (found == allViewports_.end()) { boost::shared_ptr<ViewerViewport> viewport( - ViewerViewport::Create(*context_, source_, canvas, framesCache_, softwareRendering_, linearInterpolation_)); + ViewerViewport::Create(*context_, source_, canvas, framesCache_, instancesCache_, softwareRendering_, linearInterpolation_)); viewport->SetMouseButtonActions(leftButtonAction_, middleButtonAction_, rightButtonAction_); viewport->AcquireObserver(new WebAssemblyObserver); viewport->SetOsiriXAnnotations(osiriXAnnotations_); @@ -4237,6 +4424,7 @@ context_->SetDicomCacheSize(128 * 1024 * 1024); // 128MB framesCache_.reset(new FramesCache); + instancesCache_.reset(new InstancesCache); osiriXAnnotations_.reset(new OrthancStone::OsiriX::CollectionOfAnnotations); deepLearningWorker_ = emscripten_create_worker("../stone-deep-learning/DeepLearningWorker.js"); @@ -4704,7 +4892,7 @@ { try { - GetViewport(canvas)->SetWindowing(center, width); + GetViewport(canvas)->SetUserWindowing(OrthancStone::Windowing(center, width)); } EXTERN_CATCH_EXCEPTIONS; }
--- a/Applications/StoneWebViewer/WebAssembly/docker-build.sh Thu May 30 21:31:37 2024 +0200 +++ b/Applications/StoneWebViewer/WebAssembly/docker-build.sh Fri Apr 18 14:17:06 2025 +0200 @@ -4,7 +4,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License
--- a/Applications/StoneWebViewer/WebAssembly/docker-internal.sh Thu May 30 21:31:37 2024 +0200 +++ b/Applications/StoneWebViewer/WebAssembly/docker-internal.sh Fri Apr 18 14:17:06 2025 +0200 @@ -4,7 +4,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Affero General Public License
--- a/CITATION.cff Thu May 30 21:31:37 2024 +0200 +++ b/CITATION.cff Fri Apr 18 14:17:06 2025 +0200 @@ -15,7 +15,7 @@ value: 'http://hdl.handle.net/2078.1/277125' description: On the Use of WebAssembly for Rendering and Segmenting Medical Images repository-code: 'https://orthanc.uclouvain.be/hg/orthanc-stone/' -url: 'https://www.orthanc-server.com/' +url: 'https://orthanc.uclouvain.be/' license: AGPL-3.0-or-later -version: 2.5 -date-released: 2022-12-05 +version: 2.6 +date-released: 2024-08-31
--- a/OrthancStone/Resources/CMake/CairoConfiguration.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/CMake/CairoConfiguration.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/CMake/FreetypeConfiguration.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/CMake/FreetypeConfiguration.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/CMake/GlewConfiguration.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/CMake/GlewConfiguration.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/CMake/OrthancStoneConfiguration.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/CMake/OrthancStoneConfiguration.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License @@ -224,8 +224,10 @@ list(APPEND ORTHANC_STONE_SOURCES ${ORTHANC_STONE_ROOT}/Toolbox/OrthancDatasets/DicomDatasetReader.cpp + ${ORTHANC_STONE_ROOT}/Toolbox/OrthancDatasets/DicomWebDataset.cpp ${ORTHANC_STONE_ROOT}/Toolbox/OrthancDatasets/FullOrthancDataset.cpp ${ORTHANC_STONE_ROOT}/Toolbox/OrthancDatasets/IOrthancConnection.cpp + ${ORTHANC_STONE_ROOT}/Toolbox/OrthancDatasets/OrthancNativeDataset.cpp ${ORTHANC_STONE_ROOT}/Fonts/FontRenderer.cpp ${ORTHANC_STONE_ROOT}/Fonts/Glyph.cpp @@ -322,6 +324,9 @@ ${ORTHANC_STONE_ROOT}/Toolbox/BucketAccumulator1D.cpp ${ORTHANC_STONE_ROOT}/Toolbox/BucketAccumulator2D.cpp ${ORTHANC_STONE_ROOT}/Toolbox/CoordinateSystem3D.cpp + ${ORTHANC_STONE_ROOT}/Toolbox/CoordinateSystem3D.h + ${ORTHANC_STONE_ROOT}/Toolbox/DebugDrawing2D.cpp + ${ORTHANC_STONE_ROOT}/Toolbox/DebugDrawing2D.h ${ORTHANC_STONE_ROOT}/Toolbox/DicomInstanceParameters.cpp ${ORTHANC_STONE_ROOT}/Toolbox/DicomStructureSet.cpp ${ORTHANC_STONE_ROOT}/Toolbox/DynamicBitmap.cpp @@ -339,10 +344,17 @@ ${ORTHANC_STONE_ROOT}/Toolbox/ShearWarpProjectiveTransform.cpp ${ORTHANC_STONE_ROOT}/Toolbox/SlicesSorter.cpp ${ORTHANC_STONE_ROOT}/Toolbox/SortedFrames.cpp + ${ORTHANC_STONE_ROOT}/Toolbox/SortedFrames.h + ${ORTHANC_STONE_ROOT}/Toolbox/StoneToolbox.cpp + ${ORTHANC_STONE_ROOT}/Toolbox/StoneToolbox.h + ${ORTHANC_STONE_ROOT}/Toolbox/SubvoxelReader.h ${ORTHANC_STONE_ROOT}/Toolbox/TextRenderer.cpp ${ORTHANC_STONE_ROOT}/Toolbox/TimerLogger.cpp ${ORTHANC_STONE_ROOT}/Toolbox/UndoRedoStack.cpp ${ORTHANC_STONE_ROOT}/Toolbox/UnionOfRectangles.cpp + ${ORTHANC_STONE_ROOT}/Toolbox/UnionOfRectangles.h + ${ORTHANC_STONE_ROOT}/Toolbox/Windowing.cpp + ${ORTHANC_STONE_ROOT}/Toolbox/Windowing.h ${ORTHANC_STONE_ROOT}/Viewport/DefaultViewportInteractor.cpp ${ORTHANC_STONE_ROOT}/Viewport/ViewportLocker.cpp
--- a/OrthancStone/Resources/CMake/OrthancStoneParameters.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/CMake/OrthancStoneParameters.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/CMake/OrthancStoneSdlConfiguration.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/CMake/OrthancStoneSdlConfiguration.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/CMake/OrthancStoneSdlParameters.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/CMake/OrthancStoneSdlParameters.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/CMake/OrthancStoneWebAssemblyConfiguration.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/CMake/OrthancStoneWebAssemblyConfiguration.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/CMake/OrthancStoneWebAssemblyParameters.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/CMake/OrthancStoneWebAssemblyParameters.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/CMake/PixmanConfiguration.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/CMake/PixmanConfiguration.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/CMake/SdlConfiguration.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/CMake/SdlConfiguration.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Computations/ComputeShearOnSlice.py Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Computations/ComputeShearOnSlice.py Fri Apr 18 14:17:06 2025 +0200 @@ -4,7 +4,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Computations/ComputeShearParameters.py Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Computations/ComputeShearParameters.py Fri Apr 18 14:17:06 2025 +0200 @@ -4,7 +4,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Computations/ComputeWarp.py Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Computations/ComputeWarp.py Fri Apr 18 14:17:06 2025 +0200 @@ -4,7 +4,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Computations/IntersectSegmentAndHorizontalLine.py Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Computations/IntersectSegmentAndHorizontalLine.py Fri Apr 18 14:17:06 2025 +0200 @@ -4,7 +4,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Computations/IntersectSegmentAndVerticalLine.py Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Computations/IntersectSegmentAndVerticalLine.py Fri Apr 18 14:17:06 2025 +0200 @@ -4,7 +4,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DicomStructure2.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DicomStructure2.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DicomStructure2.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DicomStructure2.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DicomStructurePolygon2.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DicomStructurePolygon2.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DicomStructurePolygon2.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DicomStructurePolygon2.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DicomStructureSet2.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DicomStructureSet2.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DicomStructureSet2.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DicomStructureSet2.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DicomStructureSetSlicer2.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DicomStructureSetSlicer2.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DicomStructureSetSlicer2.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DicomStructureSetSlicer2.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DicomStructureSetUtils.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DicomStructureSetUtils.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DicomStructureSetUtils.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DicomStructureSetUtils.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DisjointDataSet.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Graveyard/RTStructTentativeReimplementation-BGO/DisjointDataSet.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Orthanc/CMake/AutoGeneratedCode.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Orthanc/CMake/AutoGeneratedCode.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,8 +2,8 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2024-2024 Orthanc Team SRL, Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2024-2025 Orthanc Team SRL, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Orthanc/CMake/Compiler.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Orthanc/CMake/Compiler.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,8 +2,8 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2024-2024 Orthanc Team SRL, Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2024-2025 Orthanc Team SRL, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License @@ -22,6 +22,16 @@ # This file sets all the compiler-related flags +if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") + # Since Orthanc 1.12.7 that allows CMake 4.0, builds for macOS + # require the C++ standard to be explicitly set to C++11. Do *not* + # do this on GNU/Linux, as third-party system libraries could have + # been compiled with higher versions of the C++ standard. + set(CMAKE_CXX_STANDARD 11) + set(CMAKE_CXX_STANDARD_REQUIRED ON) + set(CMAKE_CXX_EXTENSIONS OFF) +endif() + # Save the current compiler flags to the cache every time cmake configures the project set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "compiler flags" FORCE) @@ -232,10 +242,16 @@ endif() elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") + + # fix this error that appears with recent compilers on MacOS: boost/mpl/aux_/integral_wrapper.hpp:73:31: error: integer value -1 is outside the valid range of values [0, 3] for this enumeration type [-Wenum-constexpr-conversion] + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-enum-constexpr-conversion") + add_definitions( -D_XOPEN_SOURCE=1 ) - link_libraries(iconv) + + # Linking with iconv breaks the Universal builds on modern compilers + # link_libraries(iconv) elseif (CMAKE_SYSTEM_NAME STREQUAL "Emscripten") message("Building using Emscripten (for WebAssembly or asm.js targets)")
--- a/OrthancStone/Resources/Orthanc/CMake/DownloadOrthancFramework.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Orthanc/CMake/DownloadOrthancFramework.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,8 +2,8 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2024-2024 Orthanc Team SRL, Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2024-2025 Orthanc Team SRL, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License @@ -163,6 +163,14 @@ set(ORTHANC_FRAMEWORK_MD5 "d2476b9e796e339ac320b5333489bdb3") elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.12.3") set(ORTHANC_FRAMEWORK_MD5 "975f5bf2142c22cb1777b4f6a0a614c5") + elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.12.4") + set(ORTHANC_FRAMEWORK_MD5 "1e61779ea4a7cd705720bdcfed8a6a73") + elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.12.5") + set(ORTHANC_FRAMEWORK_MD5 "5bb69f092981fdcfc11dec0a0f9a7db3") + elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.12.6") + set(ORTHANC_FRAMEWORK_MD5 "0e971f32f4f3e4951e0f3b5de49a3da6") + elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.12.7") + set(ORTHANC_FRAMEWORK_MD5 "f27c27d7a7a694dab1fd7f0a99d9715a") # Below this point are development snapshots that were used to # release some plugin, before an official release of the Orthanc @@ -495,7 +503,15 @@ include(CheckIncludeFile) include(CheckIncludeFileCXX) - include(FindPythonInterp) + + if(CMAKE_VERSION VERSION_GREATER "3.11") + find_package(Python REQUIRED COMPONENTS Interpreter) + set(PYTHON_EXECUTABLE ${Python_EXECUTABLE}) + else() + include(FindPythonInterp) + find_package(PythonInterp REQUIRED) + endif() + include(${CMAKE_CURRENT_LIST_DIR}/Compiler.cmake) include(${CMAKE_CURRENT_LIST_DIR}/DownloadPackage.cmake) include(${CMAKE_CURRENT_LIST_DIR}/AutoGeneratedCode.cmake)
--- a/OrthancStone/Resources/Orthanc/CMake/DownloadPackage.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Orthanc/CMake/DownloadPackage.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,8 +2,8 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2024-2024 Orthanc Team SRL, Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2024-2025 Orthanc Team SRL, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Orthanc/CMake/EmbedResources.py Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Orthanc/CMake/EmbedResources.py Fri Apr 18 14:17:06 2025 +0200 @@ -4,8 +4,8 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2024-2024 Orthanc Team SRL, Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2024-2025 Orthanc Team SRL, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Orthanc/CMake/EmscriptenParameters.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Orthanc/CMake/EmscriptenParameters.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,8 +2,8 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2024-2024 Orthanc Team SRL, Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2024-2025 Orthanc Team SRL, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Orthanc/CMake/GoogleTestConfiguration.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Orthanc/CMake/GoogleTestConfiguration.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,8 +2,8 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2024-2024 Orthanc Team SRL, Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2024-2025 Orthanc Team SRL, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Orthanc/Toolchains/LinuxStandardBaseToolchain.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Orthanc/Toolchains/LinuxStandardBaseToolchain.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,8 +2,8 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2024-2024 Orthanc Team SRL, Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2024-2025 Orthanc Team SRL, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Orthanc/Toolchains/MinGW-W64-Toolchain32.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Orthanc/Toolchains/MinGW-W64-Toolchain32.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,8 +2,8 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2024-2024 Orthanc Team SRL, Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2024-2025 Orthanc Team SRL, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Orthanc/Toolchains/MinGW-W64-Toolchain64.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Orthanc/Toolchains/MinGW-W64-Toolchain64.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,8 +2,8 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2024-2024 Orthanc Team SRL, Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2024-2025 Orthanc Team SRL, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/Orthanc/Toolchains/MinGWToolchain.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/Orthanc/Toolchains/MinGWToolchain.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,8 +2,8 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2024-2024 Orthanc Team SRL, Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2024-2025 Orthanc Team SRL, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/SyncOrthancFolder.py Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/SyncOrthancFolder.py Fri Apr 18 14:17:06 2025 +0200 @@ -4,7 +4,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/WebAssemblySharedLibrary/CMakeLists.txt Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/WebAssemblySharedLibrary/CMakeLists.txt Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Resources/WebAssemblyUnitTests/CMakeLists.txt Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Resources/WebAssemblyUnitTests/CMakeLists.txt Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/SharedLibrary/OrthancStone.h.in Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/SharedLibrary/OrthancStone.h.in Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Fonts/FontRenderer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Fonts/FontRenderer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Fonts/FontRenderer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Fonts/FontRenderer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Fonts/Glyph.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Fonts/Glyph.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Fonts/Glyph.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Fonts/Glyph.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Fonts/GlyphAlphabet.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Fonts/GlyphAlphabet.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Fonts/GlyphAlphabet.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Fonts/GlyphAlphabet.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Fonts/GlyphBitmapAlphabet.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Fonts/GlyphBitmapAlphabet.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Fonts/GlyphBitmapAlphabet.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Fonts/GlyphBitmapAlphabet.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Fonts/GlyphTextureAlphabet.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Fonts/GlyphTextureAlphabet.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Fonts/GlyphTextureAlphabet.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Fonts/GlyphTextureAlphabet.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Fonts/OpenGLTextCoordinates.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Fonts/OpenGLTextCoordinates.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Fonts/OpenGLTextCoordinates.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Fonts/OpenGLTextCoordinates.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Fonts/TextBoundingBox.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Fonts/TextBoundingBox.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Fonts/TextBoundingBox.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Fonts/TextBoundingBox.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/BasicFetchingItemsSorter.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/BasicFetchingItemsSorter.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/BasicFetchingItemsSorter.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/BasicFetchingItemsSorter.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/BasicFetchingStrategy.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/BasicFetchingStrategy.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/BasicFetchingStrategy.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/BasicFetchingStrategy.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/DicomResourcesLoader.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/DicomResourcesLoader.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/DicomResourcesLoader.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/DicomResourcesLoader.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/DicomSource.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/DicomSource.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -25,6 +25,7 @@ #include "../Oracle/HttpCommand.h" #include "../Oracle/OrthancRestApiCommand.h" +#include "../Toolbox/StoneToolbox.h" #include <OrthancException.h> #include <Toolbox.h> @@ -60,39 +61,6 @@ } - static std::string AddUriSuffix(const std::string& base, - const std::string& suffix) - { - if (base.empty()) - { - return suffix; - } - else if (suffix.empty()) - { - return base; - } - else - { - char lastBase = base[base.size() - 1]; - - if (lastBase == '/' && - suffix[0] == '/') - { - return base + suffix.substr(1); - } - else if (lastBase == '/' || - suffix[0] == '/') - { - return base + suffix; - } - else - { - return base + "/" + suffix; - } - } - } - - void DicomSource::SetOrthancSource(const Orthanc::WebServiceParameters& parameters) { type_ = DicomSourceType_Orthanc; @@ -229,7 +197,7 @@ std::unique_ptr<HttpCommand> command(new HttpCommand); command->SetMethod(Orthanc::HttpMethod_Get); - command->SetUrl(AddUriSuffix(webService_.GetUrl(), uri + EncodeGetArguments(arguments))); + command->SetUrl(StoneToolbox::JoinUrl(webService_.GetUrl(), uri + EncodeGetArguments(arguments))); command->SetHttpHeaders(webService_.GetHttpHeaders()); for (std::map<std::string, std::string>::const_iterator @@ -274,7 +242,7 @@ std::unique_ptr<OrthancRestApiCommand> command(new OrthancRestApiCommand); command->SetMethod(Orthanc::HttpMethod_Post); - command->SetUri(AddUriSuffix(orthancDicomWebRoot_, "/servers/" + serverName_ + "/get")); + command->SetUri(StoneToolbox::JoinUrl(orthancDicomWebRoot_, "/servers/" + serverName_ + "/get")); command->SetBody(body); if (protection.get())
--- a/OrthancStone/Sources/Loaders/DicomSource.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/DicomSource.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/DicomStructureSetLoader.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/DicomStructureSetLoader.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/DicomStructureSetLoader.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/DicomStructureSetLoader.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/DicomVolumeLoader.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/DicomVolumeLoader.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/DicomVolumeLoader.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/DicomVolumeLoader.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/GenericLoadersContext.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/GenericLoadersContext.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/GenericLoadersContext.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/GenericLoadersContext.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/IFetchingItemsSorter.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/IFetchingItemsSorter.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/IFetchingStrategy.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/IFetchingStrategy.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/ILoaderFactory.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/ILoaderFactory.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/ILoadersContext.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/ILoadersContext.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/LoadedDicomResources.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/LoadedDicomResources.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/LoadedDicomResources.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/LoadedDicomResources.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/LoaderStateMachine.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/LoaderStateMachine.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/LoaderStateMachine.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/LoaderStateMachine.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/OracleScheduler.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/OracleScheduler.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/OracleScheduler.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/OracleScheduler.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/OrthancMultiframeVolumeLoader.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/OrthancMultiframeVolumeLoader.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/OrthancMultiframeVolumeLoader.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/OrthancMultiframeVolumeLoader.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/OrthancSeriesVolumeProgressiveLoader.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/OrthancSeriesVolumeProgressiveLoader.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/OrthancSeriesVolumeProgressiveLoader.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/OrthancSeriesVolumeProgressiveLoader.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/SeriesFramesLoader.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/SeriesFramesLoader.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -47,8 +47,7 @@ std::string sopInstanceUid_; // Only used for debug purpose unsigned int quality_; bool hasWindowing_; - float windowingCenter_; - float windowingWidth_; + Windowing windowing_; std::unique_ptr<Orthanc::IDynamicObject> userPayload_; public: @@ -62,8 +61,6 @@ sopInstanceUid_(sopInstanceUid), quality_(quality), hasWindowing_(false), - windowingCenter_(0), - windowingWidth_(0), userPayload_(userPayload) { } @@ -83,12 +80,10 @@ return quality_; } - void SetWindowing(float center, - float width) + void SetWindowing(const Windowing& windowing) { hasWindowing_ = true; - windowingCenter_ = center; - windowingWidth_ = width; + windowing_ = windowing; } bool HasWindowing() const @@ -96,23 +91,11 @@ return hasWindowing_; } - float GetWindowingCenter() const + const Windowing& GetWindowing() const { if (hasWindowing_) { - return windowingCenter_; - } - else - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); - } - } - - float GetWindowingWidth() const - { - if (hasWindowing_) - { - return windowingWidth_; + return windowing_; } else { @@ -227,13 +210,13 @@ Orthanc::Image scaled(parameters.GetExpectedPixelFormat(), reader.GetWidth(), reader.GetHeight(), false); Orthanc::ImageProcessing::Convert(scaled, reader); - float w = payload.GetWindowingWidth(); + float w = static_cast<float>(payload.GetWindowing().GetWidth()); if (w <= 0.01f) { w = 0.01f; // Prevent division by zero } - const float c = payload.GetWindowingCenter(); + const float c = static_cast<float>(payload.GetWindowing().GetCenter()); const float scaling = w / 255.0f; const float offset = (c - w / 2.0f) / scaling; @@ -417,16 +400,15 @@ { const DicomInstanceParameters& parameters = frames_.GetInstanceParameters(index); - float c, w; - parameters.GetWindowingPresetsUnion(c, w); + Windowing windowing = parameters.GetWindowingPresetsUnion(); std::map<std::string, std::string> arguments, headers; - arguments["window"] = (boost::lexical_cast<std::string>(c) + "," + - boost::lexical_cast<std::string>(w) + ",linear"); + arguments["window"] = (boost::lexical_cast<std::string>(windowing.GetCenter()) + "," + + boost::lexical_cast<std::string>(windowing.GetWidth()) + ",linear"); headers["Accept"] = "image/jpeg"; std::unique_ptr<Payload> payload(new Payload(source, index, sopInstanceUid, quality, protection.release())); - payload->SetWindowing(c, w); + payload->SetWindowing(windowing); { std::unique_ptr<ILoadersContext::ILock> lock(context_.Lock());
--- a/OrthancStone/Sources/Loaders/SeriesFramesLoader.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/SeriesFramesLoader.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/SeriesMetadataLoader.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/SeriesMetadataLoader.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/SeriesMetadataLoader.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/SeriesMetadataLoader.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/SeriesOrderedFrames.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/SeriesOrderedFrames.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/SeriesOrderedFrames.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/SeriesOrderedFrames.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/SeriesThumbnailsLoader.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/SeriesThumbnailsLoader.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Loaders/SeriesThumbnailsLoader.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Loaders/SeriesThumbnailsLoader.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Messages/ICallable.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Messages/ICallable.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Messages/IMessage.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Messages/IMessage.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Messages/IMessageEmitter.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Messages/IMessageEmitter.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Messages/IObservable.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Messages/IObservable.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -80,15 +80,17 @@ { try { + // LOG(INFO) << "IN Handling message : " << message.GetIdentifier().AsString(); (*it)->Apply(message); + // LOG(INFO) << "OUT Handling message : " << message.GetIdentifier().AsString(); } catch (Orthanc::OrthancException& e) { - LOG(ERROR) << "Exception on callable: " << e.What(); + LOG(ERROR) << "OrthancException on callable: " << e.What() << " " << message.GetIdentifier().AsString(); } catch (StoneException& e) { - LOG(ERROR) << "Exception on callable: " << e.What(); + LOG(ERROR) << "StoneException on callable: " << e.What(); } catch (std::exception& e) {
--- a/OrthancStone/Sources/Messages/IObservable.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Messages/IObservable.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Messages/IObserver.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Messages/IObserver.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Messages/ObserverBase.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Messages/ObserverBase.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/OpenGL/IOpenGLContext.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/OpenGL/IOpenGLContext.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/OpenGL/OpenGLIncludes.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/OpenGL/OpenGLIncludes.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/OpenGL/OpenGLProgram.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/OpenGL/OpenGLProgram.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/OpenGL/OpenGLProgram.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/OpenGL/OpenGLProgram.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/OpenGL/OpenGLShader.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/OpenGL/OpenGLShader.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/OpenGL/OpenGLShader.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/OpenGL/OpenGLShader.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/OpenGL/OpenGLTexture.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/OpenGL/OpenGLTexture.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/OpenGL/OpenGLTexture.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/OpenGL/OpenGLTexture.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/GenericOracleRunner.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/GenericOracleRunner.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/GenericOracleRunner.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/GenericOracleRunner.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/GetOrthancImageCommand.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/GetOrthancImageCommand.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/GetOrthancImageCommand.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/GetOrthancImageCommand.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/GetOrthancWebViewerJpegCommand.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/GetOrthancWebViewerJpegCommand.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/GetOrthancWebViewerJpegCommand.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/GetOrthancWebViewerJpegCommand.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/HttpCommand.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/HttpCommand.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/HttpCommand.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/HttpCommand.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/IOracle.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/IOracle.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/IOracleCommand.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/IOracleCommand.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/OracleCommandBase.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/OracleCommandBase.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/OracleCommandBase.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/OracleCommandBase.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/OracleCommandExceptionMessage.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/OracleCommandExceptionMessage.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/OrthancRestApiCommand.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/OrthancRestApiCommand.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/OrthancRestApiCommand.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/OrthancRestApiCommand.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/ParseDicomFromFileCommand.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/ParseDicomFromFileCommand.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/ParseDicomFromFileCommand.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/ParseDicomFromFileCommand.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/ParseDicomFromWadoCommand.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/ParseDicomFromWadoCommand.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/ParseDicomFromWadoCommand.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/ParseDicomFromWadoCommand.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/ParseDicomSuccessMessage.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/ParseDicomSuccessMessage.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/ParseDicomSuccessMessage.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/ParseDicomSuccessMessage.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/ReadFileCommand.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/ReadFileCommand.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/SleepOracleCommand.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/SleepOracleCommand.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/ThreadedOracle.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/ThreadedOracle.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Oracle/ThreadedOracle.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Oracle/ThreadedOracle.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/OrthancStone.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/OrthancStone.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Platforms/Sdl/SdlOpenGLContext.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Platforms/Sdl/SdlOpenGLContext.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Platforms/Sdl/SdlOpenGLContext.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Platforms/Sdl/SdlOpenGLContext.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Platforms/Sdl/SdlViewport.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Platforms/Sdl/SdlViewport.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Platforms/Sdl/SdlViewport.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Platforms/Sdl/SdlViewport.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Platforms/Sdl/SdlWindow.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Platforms/Sdl/SdlWindow.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Platforms/Sdl/SdlWindow.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Platforms/Sdl/SdlWindow.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyCairoViewport.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyCairoViewport.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyCairoViewport.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyCairoViewport.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyLoadersContext.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyLoadersContext.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyLoadersContext.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyLoadersContext.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyOpenGLContext.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyOpenGLContext.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyOpenGLContext.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyOpenGLContext.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyOracle.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyOracle.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -29,6 +29,8 @@ # include <Oracle/WebAssemblyOracle_Includes.h> #endif +#include "../../Toolbox/StoneToolbox.h" + #include <OrthancException.h> #include <Toolbox.h> @@ -542,11 +544,11 @@ { if (isLocalOrthanc_) { - command.SetUrl(localOrthancRoot_ + uri); + command.SetUrl(StoneToolbox::JoinUrl(localOrthancRoot_, uri)); } else { - command.SetUrl(remoteOrthanc_.GetUrl() + uri); + command.SetUrl(StoneToolbox::JoinUrl(remoteOrthanc_.GetUrl(), uri)); command.AddHttpHeaders(remoteOrthanc_.GetHttpHeaders()); if (!remoteOrthanc_.GetUsername().empty())
--- a/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyOracle.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyOracle.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyOracle_Includes.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyOracle_Includes.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyViewport.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyViewport.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyViewport.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyViewport.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Platforms/WebAssembly/WebGLViewport.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Platforms/WebAssembly/WebGLViewport.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Platforms/WebAssembly/WebGLViewport.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Platforms/WebAssembly/WebGLViewport.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Platforms/WebAssembly/WebGLViewportsRegistry.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Platforms/WebAssembly/WebGLViewportsRegistry.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Platforms/WebAssembly/WebGLViewportsRegistry.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Platforms/WebAssembly/WebGLViewportsRegistry.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/AnnotationsSceneLayer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/AnnotationsSceneLayer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/AnnotationsSceneLayer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/AnnotationsSceneLayer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/ArrowSceneLayer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/ArrowSceneLayer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/ArrowSceneLayer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/ArrowSceneLayer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/CairoCompositor.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/CairoCompositor.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/CairoCompositor.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/CairoCompositor.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Color.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Color.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/ColorSceneLayer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/ColorSceneLayer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/ColorTextureSceneLayer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/ColorTextureSceneLayer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/ColorTextureSceneLayer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/ColorTextureSceneLayer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/CopyStyleConfigurator.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/CopyStyleConfigurator.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/CopyStyleConfigurator.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/CopyStyleConfigurator.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/FloatTextureSceneLayer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/FloatTextureSceneLayer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/FloatTextureSceneLayer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/FloatTextureSceneLayer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/GrayscaleStyleConfigurator.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/GrayscaleStyleConfigurator.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/GrayscaleStyleConfigurator.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/GrayscaleStyleConfigurator.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/GrayscaleWindowingSceneTracker.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/GrayscaleWindowingSceneTracker.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -89,7 +89,7 @@ { if (lock_.get() != NULL) { - lock_->GetController().BroadcastGrayscaleWindowingChanged(center, width); + lock_->GetController().BroadcastGrayscaleWindowingChanged(Windowing(center, width)); } } };
--- a/OrthancStone/Sources/Scene2D/GrayscaleWindowingSceneTracker.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/GrayscaleWindowingSceneTracker.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/ICompositor.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/ICompositor.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/ILayerStyleConfigurator.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/ILayerStyleConfigurator.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/ISceneLayer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/ISceneLayer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/InfoPanelSceneLayer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/InfoPanelSceneLayer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/InfoPanelSceneLayer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/InfoPanelSceneLayer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/CairoArrowRenderer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoArrowRenderer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/CairoArrowRenderer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoArrowRenderer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/CairoBaseRenderer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoBaseRenderer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/CairoColorTextureRenderer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoColorTextureRenderer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/CairoColorTextureRenderer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoColorTextureRenderer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/CairoFloatTextureRenderer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoFloatTextureRenderer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/CairoFloatTextureRenderer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoFloatTextureRenderer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/CairoInfoPanelRenderer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoInfoPanelRenderer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/CairoInfoPanelRenderer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoInfoPanelRenderer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/CairoLookupTableTextureRenderer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoLookupTableTextureRenderer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/CairoLookupTableTextureRenderer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoLookupTableTextureRenderer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/CairoPolylineRenderer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoPolylineRenderer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/CairoPolylineRenderer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoPolylineRenderer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/CairoTextRenderer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoTextRenderer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/CairoTextRenderer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoTextRenderer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/CompositorHelper.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/CompositorHelper.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/CompositorHelper.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/CompositorHelper.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/FixedPointAligner.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/FixedPointAligner.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/FixedPointAligner.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/FixedPointAligner.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/ICairoContextProvider.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/ICairoContextProvider.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/MacroLayerRenderer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/MacroLayerRenderer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/MacroLayerRenderer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/MacroLayerRenderer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLAdvancedPolylineRenderer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLAdvancedPolylineRenderer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLAdvancedPolylineRenderer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLAdvancedPolylineRenderer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLArrowRenderer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLArrowRenderer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLArrowRenderer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLArrowRenderer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLBasicPolylineRenderer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLBasicPolylineRenderer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLBasicPolylineRenderer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLBasicPolylineRenderer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLColorTextureProgram.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLColorTextureProgram.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLColorTextureProgram.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLColorTextureProgram.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLColorTextureRenderer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLColorTextureRenderer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLColorTextureRenderer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLColorTextureRenderer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLFloatTextureProgram.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLFloatTextureProgram.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLFloatTextureProgram.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLFloatTextureProgram.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLFloatTextureRenderer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLFloatTextureRenderer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLFloatTextureRenderer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLFloatTextureRenderer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLInfoPanelRenderer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLInfoPanelRenderer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLInfoPanelRenderer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLInfoPanelRenderer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLLinesProgram.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLLinesProgram.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLLinesProgram.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLLinesProgram.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLLookupTableTextureRenderer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLLookupTableTextureRenderer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLLookupTableTextureRenderer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLLookupTableTextureRenderer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLShaderVersionDirective.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLShaderVersionDirective.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLTextProgram.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLTextProgram.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLTextProgram.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLTextProgram.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLTextRenderer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLTextRenderer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLTextRenderer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLTextRenderer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLTextureProgram.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLTextureProgram.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Internals/OpenGLTextureProgram.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Internals/OpenGLTextureProgram.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/LookupTableStyleConfigurator.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/LookupTableStyleConfigurator.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/LookupTableStyleConfigurator.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/LookupTableStyleConfigurator.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/LookupTableTextureSceneLayer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/LookupTableTextureSceneLayer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/LookupTableTextureSceneLayer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/LookupTableTextureSceneLayer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/MacroSceneLayer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/MacroSceneLayer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/MacroSceneLayer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/MacroSceneLayer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/MagnifyingGlassTracker.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/MagnifyingGlassTracker.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/MagnifyingGlassTracker.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/MagnifyingGlassTracker.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/NullLayer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/NullLayer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/OpenGLCompositor.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/OpenGLCompositor.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/OpenGLCompositor.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/OpenGLCompositor.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/OsiriXLayerFactory.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/OsiriXLayerFactory.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/OsiriXLayerFactory.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/OsiriXLayerFactory.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/PanSceneTracker.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/PanSceneTracker.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/PanSceneTracker.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/PanSceneTracker.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/PointerEvent.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/PointerEvent.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/PointerEvent.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/PointerEvent.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/PolylineSceneLayer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/PolylineSceneLayer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/PolylineSceneLayer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/PolylineSceneLayer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/RotateSceneTracker.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/RotateSceneTracker.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/RotateSceneTracker.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/RotateSceneTracker.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Scene2D.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Scene2D.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/Scene2D.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/Scene2D.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/ScenePoint2D.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/ScenePoint2D.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/ScenePoint2D.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/ScenePoint2D.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/TextSceneLayer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/TextSceneLayer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/TextSceneLayer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/TextSceneLayer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/TextureBaseSceneLayer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/TextureBaseSceneLayer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/TextureBaseSceneLayer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/TextureBaseSceneLayer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/ZoomSceneTracker.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/ZoomSceneTracker.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2D/ZoomSceneTracker.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2D/ZoomSceneTracker.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/CreateAngleMeasureCommand.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/CreateAngleMeasureCommand.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/CreateAngleMeasureCommand.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/CreateAngleMeasureCommand.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/CreateAngleMeasureTracker.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/CreateAngleMeasureTracker.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/CreateAngleMeasureTracker.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/CreateAngleMeasureTracker.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/CreateCircleMeasureTracker.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/CreateCircleMeasureTracker.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/CreateCircleMeasureTracker.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/CreateCircleMeasureTracker.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/CreateLineMeasureCommand.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/CreateLineMeasureCommand.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/CreateLineMeasureCommand.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/CreateLineMeasureCommand.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/CreateLineMeasureTracker.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/CreateLineMeasureTracker.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/CreateLineMeasureTracker.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/CreateLineMeasureTracker.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/CreateMeasureTracker.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/CreateMeasureTracker.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/CreateMeasureTracker.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/CreateMeasureTracker.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/EditAngleMeasureCommand.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/EditAngleMeasureCommand.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/EditAngleMeasureCommand.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/EditAngleMeasureCommand.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/EditAngleMeasureTracker.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/EditAngleMeasureTracker.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/EditAngleMeasureTracker.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/EditAngleMeasureTracker.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/EditLineMeasureCommand.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/EditLineMeasureCommand.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/EditLineMeasureCommand.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/EditLineMeasureCommand.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/EditLineMeasureTracker.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/EditLineMeasureTracker.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/EditLineMeasureTracker.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/EditLineMeasureTracker.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/IFlexiblePointerTracker.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/IFlexiblePointerTracker.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/LayerHolder.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/LayerHolder.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/LayerHolder.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/LayerHolder.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/LineMeasureTool.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/LineMeasureTool.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/LineMeasureTool.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/LineMeasureTool.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/MeasureCommands.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/MeasureCommands.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/MeasureCommands.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/MeasureCommands.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/MeasureTool.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/MeasureTool.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/MeasureTool.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/MeasureTool.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/MeasureToolsToolbox.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/MeasureToolsToolbox.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/MeasureToolsToolbox.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/MeasureToolsToolbox.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/MeasureTrackers.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/MeasureTrackers.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/MeasureTrackers.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/MeasureTrackers.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/OneGesturePointerTracker.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/OneGesturePointerTracker.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/OneGesturePointerTracker.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/OneGesturePointerTracker.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/PredeclaredTypes.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/PredeclaredTypes.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/UndoStack.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/UndoStack.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/UndoStack.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/UndoStack.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Scene2DViewport/ViewportController.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/ViewportController.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -151,10 +151,9 @@ BroadcastMessage(SceneTransformChanged(*this)); } - void ViewportController::BroadcastGrayscaleWindowingChanged(double windowingCenter, - double windowingWidth) + void ViewportController::BroadcastGrayscaleWindowingChanged(const Windowing& windowing) { - BroadcastMessage(GrayscaleWindowingChanged(*this, windowingCenter, windowingWidth)); + BroadcastMessage(GrayscaleWindowingChanged(*this, windowing)); } void ViewportController::FitContent(unsigned int viewportWidth,
--- a/OrthancStone/Sources/Scene2DViewport/ViewportController.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/ViewportController.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -27,6 +27,7 @@ #include "../Messages/IObservable.h" #include "../Scene2D/Scene2D.h" #include "../Scene2DViewport/IFlexiblePointerTracker.h" +#include "../Toolbox/Windowing.h" #include "../Viewport/IViewportInteractor.h" #include <Compatibility.h> @@ -94,27 +95,19 @@ ORTHANC_STONE_MESSAGE(__FILE__, __LINE__); private: - double windowingCenter_; - double windowingWidth_; + Windowing windowing_; public: GrayscaleWindowingChanged(const ViewportController& origin, - double windowingCenter, - double windowingWidth) : + const Windowing& windowing) : OriginMessage(origin), - windowingCenter_(windowingCenter), - windowingWidth_(windowingWidth) + windowing_(windowing) { } - double GetWindowingCenter() const + const Windowing& GetWindowing() const { - return windowingCenter_; - } - - double GetWindowingWidth() const - { - return windowingWidth_; + return windowing_; } }; @@ -155,8 +148,7 @@ void SetSceneToCanvasTransform(const AffineTransform2D& transform); /** Info broadcasted to the observers */ - void BroadcastGrayscaleWindowingChanged(double windowingCenter, - double windowingWidth); + void BroadcastGrayscaleWindowingChanged(const Windowing& windowing); /** Forwarded to the underlying scene, and broadcasted to the observers */ void FitContent(unsigned int viewportWidth,
--- a/OrthancStone/Sources/StoneEnumerations.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/StoneEnumerations.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/StoneEnumerations.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/StoneEnumerations.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/StoneException.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/StoneException.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/StoneInitialization.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/StoneInitialization.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/StoneInitialization.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/StoneInitialization.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/AffineTransform2D.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/AffineTransform2D.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/AffineTransform2D.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/AffineTransform2D.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/BucketAccumulator1D.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/BucketAccumulator1D.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/BucketAccumulator1D.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/BucketAccumulator1D.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/BucketAccumulator2D.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/BucketAccumulator2D.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/BucketAccumulator2D.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/BucketAccumulator2D.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/CoordinateSystem3D.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/CoordinateSystem3D.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/CoordinateSystem3D.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/CoordinateSystem3D.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancStone/Sources/Toolbox/DebugDrawing2D.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -0,0 +1,162 @@ +/** + * Stone of Orthanc + * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * Copyright (C) 2017-2023 Osimis S.A., Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/>. + **/ + + +#include "DebugDrawing2D.h" + +#include <stdio.h> + + +namespace OrthancStone +{ + class DebugDrawing2D::Segment + { + private: + double x1_; + double y1_; + double x2_; + double y2_; + std::string color_; + bool arrow_; + + public: + Segment(double x1, + double y1, + double x2, + double y2, + const std::string& color, + bool arrow) : + x1_(x1), + y1_(y1), + x2_(x2), + y2_(y2), + color_(color), + arrow_(arrow) + { + } + + double GetX1() const + { + return x1_; + } + + double GetY1() const + { + return y1_; + } + + double GetX2() const + { + return x2_; + } + + double GetY2() const + { + return y2_; + } + + const std::string& GetColor() const + { + return color_; + } + + bool IsArrow() const + { + return arrow_; + } + }; + + + void DebugDrawing2D::AddSegment(double x1, + double y1, + double x2, + double y2, + const std::string& color, + bool arrow, + bool addToExtent) + { + if (addToExtent) + { + extent_.AddPoint(x1, y1); + extent_.AddPoint(x2, y2); + } + + segments_.push_back(Segment(x1, y1, x2, y2, color, arrow)); + } + + + void DebugDrawing2D::SaveSvg(const std::string& path) + { + // Size in pixels + float ww, hh; + if (extent_.IsEmpty()) + { + ww = 2048.0f; + hh = 2048.0f; + } + else if (extent_.GetWidth() > extent_.GetHeight()) + { + ww = 2048.0f; + hh = ww * extent_.GetHeight() / extent_.GetWidth(); + } + else + { + hh = 2048.0f; + ww = hh * extent_.GetWidth() / extent_.GetHeight(); + } + + FILE* fp = fopen(path.c_str(), "w"); + fprintf(fp, "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"); + fprintf(fp, "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n"); + fprintf(fp, "<svg width=\"%f\" height=\"%f\" viewBox=\"0 0 %f %f\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n", ww, hh, extent_.GetWidth(), extent_.GetHeight()); + + // http://thenewcode.com/1068/Making-Arrows-in-SVG + fprintf(fp, "<defs>\n"); + fprintf(fp, "<marker id=\"arrowhead\" markerWidth=\"2\" markerHeight=\"3\" \n"); + fprintf(fp, "refX=\"2\" refY=\"1.5\" orient=\"auto\">\n"); + fprintf(fp, "<polygon points=\"0 0, 2 1.5, 0 3\" />\n"); + fprintf(fp, "</marker>\n"); + fprintf(fp, "</defs>\n"); + + fprintf(fp, "<rect fill=\"#fff\" stroke=\"#000\" x=\"0\" y=\"0\" width=\"%f\" height=\"%f\"/>\n", extent_.GetWidth(), extent_.GetHeight()); + + for (std::list<Segment>::const_iterator it = segments_.begin(); it != segments_.end(); ++it) + { + float strokeWidth = 0.1; + + std::string s; + if (it->IsArrow()) + { + s = "marker-end=\"url(#arrowhead)\""; + } + + fprintf(fp, "<line x1=\"%f\" y1=\"%f\" x2=\"%f\" y2=\"%f\" stroke=\"%s\" stroke-width=\"%f\" %s/>\n", + it->GetX1() - extent_.GetX1(), it->GetY1() - extent_.GetY1(), + it->GetX2() - extent_.GetX1(), it->GetY2() - extent_.GetY1(), + it->GetColor().c_str(), strokeWidth, s.c_str()); + } + + fprintf(fp, "</svg>\n"); + + fclose(fp); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancStone/Sources/Toolbox/DebugDrawing2D.h Fri Apr 18 14:17:06 2025 +0200 @@ -0,0 +1,54 @@ +/** + * Stone of Orthanc + * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * Copyright (C) 2017-2023 Osimis S.A., Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/>. + **/ + + +#pragma once + +#include "Extent2D.h" + +#include <boost/noncopyable.hpp> +#include <list> +#include <string> + + +namespace OrthancStone +{ + class DebugDrawing2D : public boost::noncopyable + { + private: + class Segment; + + Extent2D extent_; + std::list<Segment> segments_; + + public: + void AddSegment(double x1, + double y1, + double x2, + double y2, + const std::string& color, + bool arrow, + bool addToExtent); + + void SaveSvg(const std::string& path); + }; +}
--- a/OrthancStone/Sources/Toolbox/DicomInstanceParameters.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/DicomInstanceParameters.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -27,11 +27,15 @@ #include "../Scene2D/FloatTextureSceneLayer.h" #include "GeometryToolbox.h" #include "ImageToolbox.h" +#include "OrthancDatasets/DicomDatasetReader.h" +#include "OrthancDatasets/DicomWebDataset.h" +#include "OrthancDatasets/OrthancNativeDataset.h" #include <Images/Image.h> #include <Images/ImageProcessing.h> #include <Logging.h> #include <OrthancException.h> +#include <SerializationToolbox.h> #include <Toolbox.h> @@ -190,29 +194,29 @@ } } - bool ok = false; + + windowingPresets_.clear(); + + Vector centers, widths; - if (LinearAlgebra::ParseVector(windowingPresetCenters_, dicom, Orthanc::DICOM_TAG_WINDOW_CENTER) && - LinearAlgebra::ParseVector(windowingPresetWidths_, dicom, Orthanc::DICOM_TAG_WINDOW_WIDTH)) + if (LinearAlgebra::ParseVector(centers, dicom, Orthanc::DICOM_TAG_WINDOW_CENTER) && + LinearAlgebra::ParseVector(widths, dicom, Orthanc::DICOM_TAG_WINDOW_WIDTH)) { - if (windowingPresetCenters_.size() == windowingPresetWidths_.size()) + if (centers.size() == widths.size()) { - ok = true; + windowingPresets_.resize(centers.size()); + + for (size_t i = 0; i < centers.size(); i++) + { + windowingPresets_[i] = Windowing(centers[i], widths[i]); + } } else { LOG(ERROR) << "Mismatch in the number of preset windowing widths/centers, ignoring this"; - ok = false; } } - if (!ok) - { - // Don't use "Vector::clear()", as it has not the same meaning as "std::vector::clear()" - windowingPresetCenters_.resize(0); - windowingPresetWidths_.resize(0); - } - // This computes the "IndexInSeries" metadata from Orthanc (check // out "Orthanc::ServerIndex::Store()") hasIndexInSeries_ = ( @@ -233,6 +237,100 @@ } + void DicomInstanceParameters::InjectSequenceTags(const IDicomDataset& dataset) + { + /** + * Use DICOM tag "SequenceOfUltrasoundRegions" (0018,6011) in + * order to derive the pixel spacing on ultrasound (US) images + **/ + + static const Orthanc::DicomTag DICOM_TAG_SEQUENCE_OF_ULTRASOUND_REGIONS(0x0018, 0x6011); + static const Orthanc::DicomTag DICOM_TAG_PHYSICAL_UNITS_X_DIRECTION(0x0018, 0x6024); + static const Orthanc::DicomTag DICOM_TAG_PHYSICAL_UNITS_Y_DIRECTION(0x0018, 0x6026); + static const Orthanc::DicomTag DICOM_TAG_PHYSICAL_DELTA_X(0x0018, 0x602c); + static const Orthanc::DicomTag DICOM_TAG_PHYSICAL_DELTA_Y(0x0018, 0x602e); + + DicomDatasetReader reader(dataset); + + size_t size; + + if (!data_.hasPixelSpacing_ && + dataset.GetSequenceSize(size, Orthanc::DicomPath(DICOM_TAG_SEQUENCE_OF_ULTRASOUND_REGIONS)) && + size >= 1) + { + int directionX, directionY; + double deltaX, deltaY; + + if (reader.GetIntegerValue(directionX, Orthanc::DicomPath(DICOM_TAG_SEQUENCE_OF_ULTRASOUND_REGIONS, + 0, DICOM_TAG_PHYSICAL_UNITS_X_DIRECTION)) && + reader.GetIntegerValue(directionY, Orthanc::DicomPath(DICOM_TAG_SEQUENCE_OF_ULTRASOUND_REGIONS, + 0, DICOM_TAG_PHYSICAL_UNITS_Y_DIRECTION)) && + reader.GetDoubleValue(deltaX, Orthanc::DicomPath(DICOM_TAG_SEQUENCE_OF_ULTRASOUND_REGIONS, + 0, DICOM_TAG_PHYSICAL_DELTA_X)) && + reader.GetDoubleValue(deltaY, Orthanc::DicomPath(DICOM_TAG_SEQUENCE_OF_ULTRASOUND_REGIONS, + 0, DICOM_TAG_PHYSICAL_DELTA_Y)) && + directionX == 0x0003 && // Centimeters + directionY == 0x0003) // Centimeters + { + // Scene coordinates are expressed in millimeters => multiplication by 10 + SetPixelSpacing(10.0 * deltaX, 10.0 * deltaY); + } + } + + + /** + * New in Stone Web viewer 2.2: Deal with Philips multiframe + * (cf. mail from Tomas Kenda on 2021-08-17). This cannot be done + * in LoadSeriesDetailsFromInstance, as the "Per Frame Functional + * Groups Sequence" is not available at that point. + **/ + + static const Orthanc::DicomTag DICOM_TAG_PER_FRAME_FUNCTIONAL_GROUPS_SEQUENCE(0x5200, 0x9230); + static const Orthanc::DicomTag DICOM_TAG_FRAME_VOI_LUT_SEQUENCE_ATTRIBUTE(0x0028, 0x9132); + + if (dataset.GetSequenceSize(size, Orthanc::DicomPath(DICOM_TAG_PER_FRAME_FUNCTIONAL_GROUPS_SEQUENCE))) + { + data_.perFrameWindowing_.reserve(data_.numberOfFrames_); + + // This corresponds to "ParsedDicomFile::GetDefaultWindowing()" + for (size_t i = 0; i < size; i++) + { + size_t tmp; + double center, width; + + if (dataset.GetSequenceSize(tmp, Orthanc::DicomPath(DICOM_TAG_PER_FRAME_FUNCTIONAL_GROUPS_SEQUENCE, i, + DICOM_TAG_FRAME_VOI_LUT_SEQUENCE_ATTRIBUTE)) && + tmp == 1 && + reader.GetDoubleValue(center, Orthanc::DicomPath(DICOM_TAG_PER_FRAME_FUNCTIONAL_GROUPS_SEQUENCE, i, + DICOM_TAG_FRAME_VOI_LUT_SEQUENCE_ATTRIBUTE, 0, + Orthanc::DICOM_TAG_WINDOW_CENTER)) && + reader.GetDoubleValue(width, Orthanc::DicomPath(DICOM_TAG_PER_FRAME_FUNCTIONAL_GROUPS_SEQUENCE, i, + DICOM_TAG_FRAME_VOI_LUT_SEQUENCE_ATTRIBUTE, 0, + Orthanc::DICOM_TAG_WINDOW_WIDTH))) + { + data_.perFrameWindowing_.push_back(Windowing(center, width)); + } + } + } + } + + + DicomInstanceParameters::DicomInstanceParameters(const DicomInstanceParameters& other) : + data_(other.data_), + tags_(other.tags_->Clone()) + { + } + + + DicomInstanceParameters::DicomInstanceParameters(const Orthanc::DicomMap& dicom) : + data_(dicom), + tags_(dicom.Clone()) + { + OrthancNativeDataset dataset(dicom); + InjectSequenceTags(dataset); + } + + double DicomInstanceParameters::GetSliceThickness() const { if (data_.hasSliceThickness_) @@ -399,18 +497,45 @@ } + Windowing DicomInstanceParameters::GetFallbackWindowing() const + { + double a, b; + if (tags_->ParseDouble(a, Orthanc::DICOM_TAG_SMALLEST_IMAGE_PIXEL_VALUE) && + tags_->ParseDouble(b, Orthanc::DICOM_TAG_LARGEST_IMAGE_PIXEL_VALUE)) + { + const double center = (a + b) / 2.0f; + const double width = (b - a); + return Windowing(center, width); + } + + // Added in Stone Web viewer > 2.5 + uint32_t bitsStored, pixelRepresentation; + if (tags_->ParseUnsignedInteger32(bitsStored, Orthanc::DICOM_TAG_BITS_STORED) && + tags_->ParseUnsignedInteger32(pixelRepresentation, Orthanc::DICOM_TAG_PIXEL_REPRESENTATION)) + { + const bool isSigned = (pixelRepresentation != 0); + const float maximum = powf(2.0, bitsStored); + return Windowing(isSigned ? 0.0f : maximum / 2.0f, maximum); + } + else + { + // Cannot infer a suitable windowing from the available tags + return Windowing(); + } + } + + size_t DicomInstanceParameters::GetWindowingPresetsCount() const { - assert(data_.windowingPresetCenters_.size() == data_.windowingPresetWidths_.size()); - return data_.windowingPresetCenters_.size(); + return data_.windowingPresets_.size(); } - float DicomInstanceParameters::GetWindowingPresetCenter(size_t i) const + Windowing DicomInstanceParameters::GetWindowingPreset(size_t i) const { if (i < GetWindowingPresetsCount()) { - return static_cast<float>(data_.windowingPresetCenters_[i]); + return data_.windowingPresets_[i]; } else { @@ -418,32 +543,8 @@ } } - - float DicomInstanceParameters::GetWindowingPresetWidth(size_t i) const - { - if (i < GetWindowingPresetsCount()) - { - return static_cast<float>(data_.windowingPresetWidths_[i]); - } - else - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); - } - } - - - static void GetWindowingBounds(float& low, - float& high, - double center, // in - double width) // in - { - low = static_cast<float>(center - width / 2.0); - high = static_cast<float>(center + width / 2.0); - } - - void DicomInstanceParameters::GetWindowingPresetsUnion(float& center, - float& width) const + Windowing DicomInstanceParameters::GetWindowingPresetsUnion() const { assert(tags_.get() != NULL); size_t s = GetWindowingPresetsCount(); @@ -452,48 +553,29 @@ { // Use the largest windowing given all the preset windowings // that are available in the DICOM tags - float low, high; - GetWindowingBounds(low, high, GetWindowingPresetCenter(0), GetWindowingPresetWidth(0)); + double low, high; + GetWindowingPreset(0).GetBounds(low, high); for (size_t i = 1; i < s; i++) { - float a, b; - GetWindowingBounds(a, b, GetWindowingPresetCenter(i), GetWindowingPresetWidth(i)); + double a, b; + GetWindowingPreset(i).GetBounds(a, b); low = std::min(low, a); high = std::max(high, b); } assert(low <= high); - if (LinearAlgebra::IsNear(low, high)) + if (!LinearAlgebra::IsNear(low, high)) { - // Cannot infer a suitable windowing from the available tags - center = 128.0f; - width = 256.0f; - } - else - { - center = (low + high) / 2.0f; - width = (high - low); + const double center = (low + high) / 2.0f; + const double width = (high - low); + return Windowing(center, width); } } - else - { - float a, b; - if (tags_->ParseFloat(a, Orthanc::DICOM_TAG_SMALLEST_IMAGE_PIXEL_VALUE) && - tags_->ParseFloat(b, Orthanc::DICOM_TAG_LARGEST_IMAGE_PIXEL_VALUE) && - a < b) - { - center = (a + b) / 2.0f; - width = (b - a); - } - else - { - // Cannot infer a suitable windowing from the available tags - center = 128.0f; - width = 256.0f; - } - } + + // No preset, or presets with an empty range + return GetFallbackWindowing(); } @@ -565,7 +647,8 @@ if (GetWindowingPresetsCount() > 0) { - floatTexture.SetCustomWindowing(GetWindowingPresetCenter(0), GetWindowingPresetWidth(0)); + Windowing preset = GetWindowingPreset(0); + floatTexture.SetCustomWindowing(preset.GetCenter(), preset.GetWidth()); } switch (GetImageInformation().GetPhotometricInterpretation()) @@ -741,66 +824,10 @@ } - static const Json::Value* LookupDicomWebSingleValue(const Json::Value& dicomweb, - const std::string& tag, - const std::string& vr) - { - static const char* const VALUE = "Value"; - static const char* const VR = "vr"; - - if (dicomweb.type() == Json::objectValue && - dicomweb.isMember(tag) && - dicomweb[tag].type() == Json::objectValue && - dicomweb[tag].isMember(VALUE) && - dicomweb[tag].isMember(VR) && - dicomweb[tag][VR].type() == Json::stringValue && - dicomweb[tag][VR].asString() == vr && - dicomweb[tag][VALUE].type() == Json::arrayValue && - dicomweb[tag][VALUE].size() == 1u) - { - return &dicomweb[tag][VALUE][0]; - } - else - { - return NULL; - } - } - - void DicomInstanceParameters::EnrichUsingDicomWeb(const Json::Value& dicomweb) { - /** - * Use DICOM tag "SequenceOfUltrasoundRegions" (0018,6011) in - * order to derive the pixel spacing on ultrasound (US) images - **/ - - if (!data_.hasPixelSpacing_) - { - const Json::Value* region = LookupDicomWebSingleValue(dicomweb, "00186011", "SQ"); - if (region != NULL) - { - const Json::Value* physicalUnitsXDirection = LookupDicomWebSingleValue(*region, "00186024", "US"); - const Json::Value* physicalUnitsYDirection = LookupDicomWebSingleValue(*region, "00186026", "US"); - const Json::Value* physicalDeltaX = LookupDicomWebSingleValue(*region, "0018602C", "FD"); - const Json::Value* physicalDeltaY = LookupDicomWebSingleValue(*region, "0018602E", "FD"); - - if (physicalUnitsXDirection != NULL && - physicalUnitsYDirection != NULL && - physicalDeltaX != NULL && - physicalDeltaY != NULL && - physicalUnitsXDirection->type() == Json::intValue && - physicalUnitsYDirection->type() == Json::intValue && - physicalUnitsXDirection->asInt() == 0x0003 && // Centimeters - physicalUnitsYDirection->asInt() == 0x0003 && // Centimeters - physicalDeltaX->isNumeric() && - physicalDeltaY->isNumeric()) - { - // Scene coordinates are expressed in millimeters => multiplication by 10 - SetPixelSpacing(10.0 * physicalDeltaX->asDouble(), - 10.0 * physicalDeltaY->asDouble()); - } - } - } + DicomWebDataset dataset(dicomweb); + InjectSequenceTags(dataset); } @@ -839,4 +866,19 @@ return (data_.frameOffsets_[0] > data_.frameOffsets_[1]); } } + + + bool DicomInstanceParameters::LookupPerFrameWindowing(Windowing& windowing, + unsigned int frame) const + { + if (frame < data_.perFrameWindowing_.size()) + { + windowing = data_.perFrameWindowing_[frame]; + return true; + } + else + { + return false; + } + } }
--- a/OrthancStone/Sources/Toolbox/DicomInstanceParameters.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/DicomInstanceParameters.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -26,6 +26,7 @@ #include "../Scene2D/LookupTableTextureSceneLayer.h" #include "../StoneEnumerations.h" #include "../Toolbox/CoordinateSystem3D.h" +#include "Windowing.h" #include <IDynamicObject.h> #include <DicomFormat/DicomImageInformation.h> @@ -57,8 +58,7 @@ bool hasRescale_; double rescaleIntercept_; double rescaleSlope_; - Vector windowingPresetCenters_; - Vector windowingPresetWidths_; + std::vector<Windowing> windowingPresets_; bool hasIndexInSeries_; unsigned int indexInSeries_; std::string doseUnits_; @@ -67,6 +67,7 @@ bool hasPixelSpacing_; bool hasNumberOfFrames_; int32_t instanceNumber_; + std::vector<Windowing> perFrameWindowing_; explicit Data(const Orthanc::DicomMap& dicom); }; @@ -76,18 +77,12 @@ std::unique_ptr<Orthanc::DicomMap> tags_; std::unique_ptr<Orthanc::DicomImageInformation> imageInformation_; // Lazy evaluation + void InjectSequenceTags(const IDicomDataset& dataset); + public: - explicit DicomInstanceParameters(const DicomInstanceParameters& other) : - data_(other.data_), - tags_(other.tags_->Clone()) - { - } + explicit DicomInstanceParameters(const DicomInstanceParameters& other); - explicit DicomInstanceParameters(const Orthanc::DicomMap& dicom) : - data_(dicom), - tags_(dicom.Clone()) - { - } + explicit DicomInstanceParameters(const Orthanc::DicomMap& dicom); DicomInstanceParameters* Clone() const { @@ -185,14 +180,13 @@ double GetRescaleSlope() const; + Windowing GetFallbackWindowing() const; + size_t GetWindowingPresetsCount() const; - float GetWindowingPresetCenter(size_t i) const; + Windowing GetWindowingPreset(size_t i) const; - float GetWindowingPresetWidth(size_t i) const; - - void GetWindowingPresetsUnion(float& center, - float& width) const; + Windowing GetWindowingPresetsUnion() const; Orthanc::PixelFormat GetExpectedPixelFormat() const; @@ -267,5 +261,8 @@ CoordinateSystem3D GetMultiFrameGeometry() const; bool IsReversedFrameOffsets() const; + + bool LookupPerFrameWindowing(Windowing& windowing, + unsigned int frame) const; }; }
--- a/OrthancStone/Sources/Toolbox/DicomStructureSet.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/DicomStructureSet.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -121,15 +121,17 @@ namespace OrthancStone { + static const Orthanc::DicomTag DICOM_TAG_CONTOUR_DATA(0x3006, 0x0050); static const Orthanc::DicomTag DICOM_TAG_CONTOUR_GEOMETRIC_TYPE(0x3006, 0x0042); static const Orthanc::DicomTag DICOM_TAG_CONTOUR_IMAGE_SEQUENCE(0x3006, 0x0016); static const Orthanc::DicomTag DICOM_TAG_CONTOUR_SEQUENCE(0x3006, 0x0040); - static const Orthanc::DicomTag DICOM_TAG_CONTOUR_DATA(0x3006, 0x0050); static const Orthanc::DicomTag DICOM_TAG_NUMBER_OF_CONTOUR_POINTS(0x3006, 0x0046); + static const Orthanc::DicomTag DICOM_TAG_REFERENCED_ROI_NUMBER(0x3006, 0x0084); static const Orthanc::DicomTag DICOM_TAG_REFERENCED_SOP_INSTANCE_UID(0x0008, 0x1155); static const Orthanc::DicomTag DICOM_TAG_ROI_CONTOUR_SEQUENCE(0x3006, 0x0039); static const Orthanc::DicomTag DICOM_TAG_ROI_DISPLAY_COLOR(0x3006, 0x002a); static const Orthanc::DicomTag DICOM_TAG_ROI_NAME(0x3006, 0x0026); + static const Orthanc::DicomTag DICOM_TAG_ROI_NUMBER(0x3006, 0x0022); static const Orthanc::DicomTag DICOM_TAG_RT_ROI_INTERPRETED_TYPE(0x3006, 0x00a4); static const Orthanc::DicomTag DICOM_TAG_RT_ROI_OBSERVATIONS_SEQUENCE(0x3006, 0x0080); static const Orthanc::DicomTag DICOM_TAG_STRUCTURE_SET_ROI_SEQUENCE(0x3006, 0x0020); @@ -281,82 +283,151 @@ } - static void AddSegmentIfIntersection(Extent2D& extent, - const CoordinateSystem3D& cuttingPlane, - const Vector& p1, - const Vector& p2, - double originDistance) - { - // Does this segment intersects the cutting plane? - double d1 = cuttingPlane.ProjectAlongNormal(p1); - double d2 = cuttingPlane.ProjectAlongNormal(p2); - - if ((d1 < originDistance && d2 > originDistance) || - (d1 > originDistance && d2 < originDistance)) - { - // This is an intersection: Add the segment - double x, y; - cuttingPlane.ProjectPoint2(x, y, p1); - extent.AddPoint(x, y); - cuttingPlane.ProjectPoint2(x, y, p2); - extent.AddPoint(x, y); - } - } - - bool DicomStructureSet::Polygon::Project(double& x1, - double& y1, - double& x2, - double& y2, + void DicomStructureSet::Polygon::Project(std::list<Extent2D>& target, const CoordinateSystem3D& cuttingPlane, const Vector& estimatedNormal, double estimatedSliceThickness) const { - if (points_.size() <= 1) - { - return false; - } + CoordinateSystem3D geometry; + double thickness = estimatedSliceThickness; - Vector normal = estimatedNormal; - double thickness = estimatedSliceThickness; + /** + * 1. Estimate the 3D plane associated with this polygon. + **/ + if (hasSlice_) { - normal = geometry_.GetNormal(); + // The exact geometry is known for this slice + geometry = geometry_; thickness = sliceThickness_; } + else if (points_.size() < 2) + { + return; + } + else + { + // Estimate the geometry + Vector origin = points_[0]; - bool isOpposite; - if (!GeometryToolbox::IsParallelOrOpposite(isOpposite, normal, cuttingPlane.GetAxisX()) && - !GeometryToolbox::IsParallelOrOpposite(isOpposite, normal, cuttingPlane.GetAxisY())) - { - return false; + Vector axisX; + bool found = false; + for (size_t i = 1; i < points_.size(); i++) + { + axisX = points_[1] - origin; + if (boost::numeric::ublas::norm_2(axisX) > 10.0 * std::numeric_limits<double>::epsilon()) + { + found = true; + break; + } + } + + if (!found) + { + return; // The polygon is too small to extract a reliable geometry out of it + } + + LinearAlgebra::NormalizeVector(axisX); + + Vector axisY; + LinearAlgebra::CrossProduct(axisY, axisX, estimatedNormal); + geometry = CoordinateSystem3D(origin, axisX, axisY); } - const double d = cuttingPlane.ProjectAlongNormal(cuttingPlane.GetOrigin()); - Extent2D extent; - AddSegmentIfIntersection(extent, cuttingPlane, points_[points_.size() - 1], points_[0], d); - for (size_t i = 1; i < points_.size(); i++) - { - AddSegmentIfIntersection(extent, cuttingPlane, points_[i - 1], points_[i], d); - } + /** + * 2. Project the 3D cutting plane as a 2D line onto the polygon plane. + **/ + + double cuttingX1, cuttingY1, cuttingX2, cuttingY2; + geometry.ProjectPoint(cuttingX1, cuttingY1, cuttingPlane.GetOrigin()); - if (extent.GetWidth() > 0 || - extent.GetHeight() > 0) + bool isOpposite; + if (GeometryToolbox::IsParallelOrOpposite(isOpposite, geometry.GetNormal(), cuttingPlane.GetAxisX())) { - // Let's convert them to 3D world geometry to add the slice thickness - Vector p1 = (cuttingPlane.MapSliceToWorldCoordinates(extent.GetX1(), extent.GetY1()) + - thickness / 2.0 * normal); - Vector p2 = (cuttingPlane.MapSliceToWorldCoordinates(extent.GetX2(), extent.GetY2()) - - thickness / 2.0 * normal); - - // Then back to the cutting plane geometry - cuttingPlane.ProjectPoint2(x1, y1, p1); - cuttingPlane.ProjectPoint2(x2, y2, p2); - return true; + geometry.ProjectPoint(cuttingX2, cuttingY2, cuttingPlane.GetOrigin() + cuttingPlane.GetAxisY()); + } + else if (GeometryToolbox::IsParallelOrOpposite(isOpposite, geometry.GetNormal(), cuttingPlane.GetAxisY())) + { + geometry.ProjectPoint(cuttingX2, cuttingY2, cuttingPlane.GetOrigin() + cuttingPlane.GetAxisX()); } else { - return false; + return; + } + + + /** + * 3. Compute the intersection of the 2D cutting line with the polygon. + **/ + + // Initialize the projection of a point onto a line: + // https://stackoverflow.com/a/64330724 + const double abx = cuttingX2 - cuttingX1; + const double aby = cuttingY2 - cuttingY1; + const double denominator = abx * abx + aby * aby; + if (LinearAlgebra::IsCloseToZero(denominator)) + { + return; // Should never happen + } + + std::vector<double> intersections; + intersections.reserve(points_.size()); + + for (size_t i = 0; i < points_.size(); i++) + { + double segmentX1, segmentY1, segmentX2, segmentY2; + geometry.ProjectPoint(segmentX1, segmentY1, points_[i]); + geometry.ProjectPoint(segmentX2, segmentY2, points_[(i + 1) % points_.size()]); + + double x, y; + if (GeometryToolbox::IntersectLineAndSegment(x, y, cuttingX1, cuttingY1, cuttingX2, cuttingY2, + segmentX1, segmentY1, segmentX2, segmentY2)) + { + // For each polygon segment that intersect the cutting line, + // register its offset over the cutting line + const double acx = x - cuttingX1; + const double acy = y - cuttingY1; + intersections.push_back((abx * acx + aby * acy) / denominator); + } + } + + + /** + * 4. Sort the intersection offsets, then generates one 2D rectangle on the + * cutting plane from each pair of successive intersections. + **/ + + std::sort(intersections.begin(), intersections.end()); + + if (intersections.size() % 2 == 1) + { + return; // Should never happen + } + + for (size_t i = 0; i < intersections.size(); i += 2) + { + Vector p1, p2; + + { + // Let's convert them to 3D world geometry to add the slice thickness + const double x1 = cuttingX1 + intersections[i] * abx; + const double y1 = cuttingY1 + intersections[i] * aby; + const double x2 = cuttingX1 + intersections[i + 1] * abx; + const double y2 = cuttingY1 + intersections[i + 1] * aby; + + p1 = (geometry.MapSliceToWorldCoordinates(x1, y1) + thickness / 2.0 * geometry.GetNormal()); + p2 = (geometry.MapSliceToWorldCoordinates(x2, y2) - thickness / 2.0 * geometry.GetNormal()); + } + + { + // Then back to the cutting plane geometry + double x1, y1, x2, y2; + cuttingPlane.ProjectPoint2(x1, y1, p1); + cuttingPlane.ProjectPoint2(x2, y2, p2); + + target.push_back(Extent2D(x1, y1, x2, y2)); + } } } @@ -388,162 +459,246 @@ boost::posix_time::ptime timerStart = boost::posix_time::microsec_clock::universal_time(); #endif + std::map<int, size_t> roiNumbersIndex; + DicomDatasetReader reader(tags); - - size_t count, tmp; - if (!tags.GetSequenceSize(count, Orthanc::DicomPath(DICOM_TAG_RT_ROI_OBSERVATIONS_SEQUENCE)) || - !tags.GetSequenceSize(tmp, Orthanc::DicomPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE)) || - tmp != count || - !tags.GetSequenceSize(tmp, Orthanc::DicomPath(DICOM_TAG_STRUCTURE_SET_ROI_SEQUENCE)) || - tmp != count) - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); - } + - structures_.resize(count); - structureNamesIndex_.clear(); - - for (size_t i = 0; i < count; i++) + /** + * 1. Read all the available ROIs. + **/ + { - structures_[i].interpretation_ = reader.GetStringValue - (Orthanc::DicomPath(DICOM_TAG_RT_ROI_OBSERVATIONS_SEQUENCE, i, - DICOM_TAG_RT_ROI_INTERPRETED_TYPE), - "No interpretation"); - - structures_[i].name_ = reader.GetStringValue - (Orthanc::DicomPath(DICOM_TAG_STRUCTURE_SET_ROI_SEQUENCE, i, - DICOM_TAG_ROI_NAME), - "No name"); - - if (structureNamesIndex_.find(structures_[i].name_) == structureNamesIndex_.end()) + size_t count; + if (!tags.GetSequenceSize(count, Orthanc::DicomPath(DICOM_TAG_STRUCTURE_SET_ROI_SEQUENCE))) { - structureNamesIndex_[structures_[i].name_] = i; - } - else - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat, - "RT-STRUCT with twice the same name for a structure: " + structures_[i].name_); + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); } - Vector color; - if (FastParseVector(color, tags, Orthanc::DicomPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, - DICOM_TAG_ROI_DISPLAY_COLOR)) && - color.size() == 3) - { - structures_[i].red_ = ConvertColor(color[0]); - structures_[i].green_ = ConvertColor(color[1]); - structures_[i].blue_ = ConvertColor(color[2]); - } - else + structures_.resize(count); + structureNamesIndex_.clear(); + + for (size_t i = 0; i < count; i++) { - structures_[i].red_ = 255; - structures_[i].green_ = 0; - structures_[i].blue_ = 0; - } + int roiNumber; + if (!reader.GetIntegerValue + (roiNumber, Orthanc::DicomPath(DICOM_TAG_STRUCTURE_SET_ROI_SEQUENCE, i, DICOM_TAG_ROI_NUMBER))) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); + } + + if (roiNumbersIndex.find(roiNumber) != roiNumbersIndex.end()) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat, + "Twice the same ROI number: " + boost::lexical_cast<std::string>(roiNumber)); + } + + roiNumbersIndex[roiNumber] = i; + + structures_[i].name_ = reader.GetStringValue + (Orthanc::DicomPath(DICOM_TAG_STRUCTURE_SET_ROI_SEQUENCE, i, DICOM_TAG_ROI_NAME), "No name"); + structures_[i].interpretation_ = "No interpretation"; - size_t countSlices; - if (!tags.GetSequenceSize(countSlices, Orthanc::DicomPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, - DICOM_TAG_CONTOUR_SEQUENCE))) + if (structureNamesIndex_.find(structures_[i].name_) == structureNamesIndex_.end()) + { + structureNamesIndex_[structures_[i].name_] = i; + } + else + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat, + "RT-STRUCT with twice the same name for a structure: " + structures_[i].name_); + } + } + } + + + /** + * 2. Read the interpretation of the ROIs (if available). + **/ + + { + size_t count; + if (!tags.GetSequenceSize(count, Orthanc::DicomPath(DICOM_TAG_RT_ROI_OBSERVATIONS_SEQUENCE))) { - countSlices = 0; + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); } - LOG(INFO) << "New RT structure: \"" << structures_[i].name_ - << "\" with interpretation \"" << structures_[i].interpretation_ - << "\" containing " << countSlices << " slices (color: " - << static_cast<int>(structures_[i].red_) << "," - << static_cast<int>(structures_[i].green_) << "," - << static_cast<int>(structures_[i].blue_) << ")"; + for (size_t i = 0; i < count; i++) + { + std::string interpretation; + if (reader.GetDataset().GetStringValue(interpretation, + Orthanc::DicomPath(DICOM_TAG_RT_ROI_OBSERVATIONS_SEQUENCE, i, + DICOM_TAG_RT_ROI_INTERPRETED_TYPE))) + { + int roiNumber; + if (!reader.GetIntegerValue(roiNumber, + Orthanc::DicomPath(DICOM_TAG_RT_ROI_OBSERVATIONS_SEQUENCE, i, + DICOM_TAG_REFERENCED_ROI_NUMBER))) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); + } - /** - * These temporary variables avoid allocating many vectors in - * the loop below (indeed, "Orthanc::DicomPath" handles a - * "std::vector<PrefixItem>") - **/ - Orthanc::DicomPath countPointsPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, - DICOM_TAG_CONTOUR_SEQUENCE, 0, - DICOM_TAG_NUMBER_OF_CONTOUR_POINTS); + std::map<int, size_t>::const_iterator found = roiNumbersIndex.find(roiNumber); + if (found == roiNumbersIndex.end()) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); + } - Orthanc::DicomPath geometricTypePath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, - DICOM_TAG_CONTOUR_SEQUENCE, 0, - DICOM_TAG_CONTOUR_GEOMETRIC_TYPE); - - Orthanc::DicomPath imageSequencePath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, - DICOM_TAG_CONTOUR_SEQUENCE, 0, - DICOM_TAG_CONTOUR_IMAGE_SEQUENCE); + structures_[found->second].interpretation_ = interpretation; + } + } + } + + + /** + * 3. Read the contours. + **/ - // (3006,0039)[i] / (0x3006, 0x0040)[0] / (0x3006, 0x0016)[0] / (0x0008, 0x1155) - Orthanc::DicomPath referencedInstancePath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, - DICOM_TAG_CONTOUR_SEQUENCE, 0, - DICOM_TAG_CONTOUR_IMAGE_SEQUENCE, 0, - DICOM_TAG_REFERENCED_SOP_INSTANCE_UID); + { + size_t count; + if (!tags.GetSequenceSize(count, Orthanc::DicomPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE))) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); + } - Orthanc::DicomPath contourDataPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, - DICOM_TAG_CONTOUR_SEQUENCE, 0, - DICOM_TAG_CONTOUR_DATA); + for (size_t i = 0; i < count; i++) + { + int roiNumber; + if (!reader.GetIntegerValue(roiNumber, + Orthanc::DicomPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, + DICOM_TAG_REFERENCED_ROI_NUMBER))) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); + } - for (size_t j = 0; j < countSlices; j++) - { - unsigned int countPoints; - - countPointsPath.SetPrefixIndex(1, j); - if (!reader.GetUnsignedIntegerValue(countPoints, countPointsPath)) + std::map<int, size_t>::const_iterator found = roiNumbersIndex.find(roiNumber); + if (found == roiNumbersIndex.end()) { throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); } - - //LOG(INFO) << "Parsing slice containing " << countPoints << " vertices"; + + Structure& target = structures_[found->second]; - geometricTypePath.SetPrefixIndex(1, j); - std::string type = reader.GetMandatoryStringValue(geometricTypePath); - if (type != "CLOSED_PLANAR") + Vector color; + if (FastParseVector(color, tags, Orthanc::DicomPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, + DICOM_TAG_ROI_DISPLAY_COLOR)) && + color.size() == 3) { - LOG(WARNING) << "Ignoring contour with geometry type: " << type; - continue; + target.red_ = ConvertColor(color[0]); + target.green_ = ConvertColor(color[1]); + target.blue_ = ConvertColor(color[2]); + } + else + { + target.red_ = 255; + target.green_ = 0; + target.blue_ = 0; } - size_t size; - - imageSequencePath.SetPrefixIndex(1, j); - if (!tags.GetSequenceSize(size, imageSequencePath) || size != 1) + size_t countSlices; + if (!tags.GetSequenceSize(countSlices, Orthanc::DicomPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, + DICOM_TAG_CONTOUR_SEQUENCE))) { - LOG(ERROR) << "The ContourImageSequence sequence (tag 3006,0016) must be present and contain one entry."; - throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); + countSlices = 0; } - referencedInstancePath.SetPrefixIndex(1, j); - std::string sopInstanceUid = reader.GetMandatoryStringValue(referencedInstancePath); + LOG(INFO) << "New RT structure: \"" << target.name_ + << "\" with interpretation \"" << target.interpretation_ + << "\" containing " << countSlices << " slices (color: " + << static_cast<int>(target.red_) << "," + << static_cast<int>(target.green_) << "," + << static_cast<int>(target.blue_) << ")"; - contourDataPath.SetPrefixIndex(1, j); - std::string slicesData = reader.GetMandatoryStringValue(contourDataPath); - - Vector points; + /** + * These temporary variables avoid allocating many vectors in + * the loop below (indeed, "Orthanc::DicomPath" handles a + * "std::vector<PrefixItem>") + **/ + Orthanc::DicomPath countPointsPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, + DICOM_TAG_CONTOUR_SEQUENCE, 0, + DICOM_TAG_NUMBER_OF_CONTOUR_POINTS); - if (!GenericToolbox::FastParseVector(points, slicesData) || - points.size() != 3 * countPoints) - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); - } + Orthanc::DicomPath geometricTypePath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, + DICOM_TAG_CONTOUR_SEQUENCE, 0, + DICOM_TAG_CONTOUR_GEOMETRIC_TYPE); + + Orthanc::DicomPath imageSequencePath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, + DICOM_TAG_CONTOUR_SEQUENCE, 0, + DICOM_TAG_CONTOUR_IMAGE_SEQUENCE); - // seen in real world - if(Orthanc::Toolbox::StripSpaces(sopInstanceUid) == "") + // (3006,0039)[i] / (0x3006, 0x0040)[0] / (0x3006, 0x0016)[0] / (0x0008, 0x1155) + Orthanc::DicomPath referencedInstancePath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, + DICOM_TAG_CONTOUR_SEQUENCE, 0, + DICOM_TAG_CONTOUR_IMAGE_SEQUENCE, 0, + DICOM_TAG_REFERENCED_SOP_INSTANCE_UID); + + Orthanc::DicomPath contourDataPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, + DICOM_TAG_CONTOUR_SEQUENCE, 0, + DICOM_TAG_CONTOUR_DATA); + + for (size_t j = 0; j < countSlices; j++) { - LOG(ERROR) << "WARNING. The following Dicom tag (Referenced SOP Instance UID) contains an empty value : // (3006,0039)[" << i << "] / (0x3006, 0x0040)[0] / (0x3006, 0x0016)[0] / (0x0008, 0x1155)"; - } + unsigned int countPoints; + + countPointsPath.SetPrefixIndex(1, j); + if (!reader.GetUnsignedIntegerValue(countPoints, countPointsPath)) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); + } + + //LOG(INFO) << "Parsing slice containing " << countPoints << " vertices"; - Polygon polygon(sopInstanceUid); - polygon.Reserve(countPoints); + geometricTypePath.SetPrefixIndex(1, j); + std::string type = reader.GetMandatoryStringValue(geometricTypePath); + if (type != "CLOSED_PLANAR") + { + LOG(WARNING) << "Ignoring contour with geometry type: " << type; + continue; + } + + size_t size; + + imageSequencePath.SetPrefixIndex(1, j); + if (!tags.GetSequenceSize(size, imageSequencePath) || size != 1) + { + LOG(ERROR) << "The ContourImageSequence sequence (tag 3006,0016) must be present and contain one entry."; + throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); + } + + referencedInstancePath.SetPrefixIndex(1, j); + std::string sopInstanceUid = reader.GetMandatoryStringValue(referencedInstancePath); - for (size_t k = 0; k < countPoints; k++) - { - Vector v(3); - v[0] = points[3 * k]; - v[1] = points[3 * k + 1]; - v[2] = points[3 * k + 2]; - polygon.AddPoint(v); + contourDataPath.SetPrefixIndex(1, j); + std::string slicesData = reader.GetMandatoryStringValue(contourDataPath); + + Vector points; + + if (!GenericToolbox::FastParseVector(points, slicesData) || + points.size() != 3 * countPoints) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); + } + + // seen in real world + if(Orthanc::Toolbox::StripSpaces(sopInstanceUid) == "") + { + LOG(ERROR) << "WARNING. The following Dicom tag (Referenced SOP Instance UID) contains an empty value : // (3006,0039)[" << i << "] / (0x3006, 0x0040)[0] / (0x3006, 0x0016)[0] / (0x0008, 0x1155)"; + } + + Polygon polygon(sopInstanceUid); + polygon.Reserve(countPoints); + + for (size_t k = 0; k < countPoints; k++) + { + Vector v(3); + v[0] = points[3 * k]; + v[1] = points[3 * k + 1]; + v[2] = points[3 * k + 2]; + polygon.AddPoint(v); + } + + target.polygons_.push_back(polygon); } - - structures_[i].polygons_.push_back(polygon); } } @@ -804,11 +959,12 @@ for (Polygons::const_iterator polygon = structure.polygons_.begin(); polygon != structure.polygons_.end(); ++polygon) { - double x1, y1, x2, y2; + std::list<Extent2D> rectangles; + polygon->Project(rectangles, cutting, GetEstimatedNormal(), GetEstimatedSliceThickness()); - if (polygon->Project(x1, y1, x2, y2, cutting, GetEstimatedNormal(), GetEstimatedSliceThickness())) + for (std::list<Extent2D>::const_iterator it = rectangles.begin(); it != rectangles.end(); ++it) { - projected.push_back(CreateRectangle(x1, y1, x2, y2)); + projected.push_back(CreateRectangle(it->GetX1(), it->GetY1(), it->GetX2(), it->GetY2())); } } @@ -834,12 +990,7 @@ for (Polygons::const_iterator polygon = structure.polygons_.begin(); polygon != structure.polygons_.end(); ++polygon) { - double x1, y1, x2, y2; - - if (polygon->Project(x1, y1, x2, y2, cutting, GetEstimatedNormal(), GetEstimatedSliceThickness())) - { - rectangles.push_back(Extent2D(x1, y1, x2, y2)); - } + polygon->Project(rectangles, cutting, GetEstimatedNormal(), GetEstimatedSliceThickness()); } typedef std::list< std::vector<ScenePoint2D> > Contours;
--- a/OrthancStone/Sources/Toolbox/DicomStructureSet.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/DicomStructureSet.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -127,10 +127,7 @@ return sliceThickness_; } - bool Project(double& x1, - double& y1, - double& x2, - double& y2, + void Project(std::list<Extent2D>& target, const CoordinateSystem3D& cuttingPlane, const Vector& estimatedNormal, double estimatedSliceThickness) const;
--- a/OrthancStone/Sources/Toolbox/DicomStructuredReport.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/DicomStructuredReport.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -135,7 +135,9 @@ DicomStructuredReport::Structure::Structure(const std::string& sopInstanceUid) : sopInstanceUid_(sopInstanceUid), hasFrameNumber_(false), - hasProbabilityOfCancer_(false) + frameNumber_(0), // dummy initialization + hasProbabilityOfCancer_(false), + probabilityOfCancer_(0) // dummy initialization { } @@ -478,7 +480,7 @@ { uint32_t frame; if (!Orthanc::SerializationToolbox::ParseUnsignedInteger32(frame, tokens[m]) || - frame <= 0) + frame == 0) { throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); }
--- a/OrthancStone/Sources/Toolbox/DicomStructuredReport.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/DicomStructuredReport.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -64,7 +64,7 @@ void Copy(const Structure& other); public: - Structure(const std::string& sopInstanceUid); + explicit Structure(const std::string& sopInstanceUid); virtual ~Structure() { @@ -262,9 +262,9 @@ } }; - DicomStructuredReport(Orthanc::ParsedDicomFile& dicom); + explicit DicomStructuredReport(Orthanc::ParsedDicomFile& dicom); - DicomStructuredReport(const DicomStructuredReport& other); // Copy constructor + explicit DicomStructuredReport(const DicomStructuredReport& other); // Copy constructor ~DicomStructuredReport();
--- a/OrthancStone/Sources/Toolbox/DynamicBitmap.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/DynamicBitmap.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/DynamicBitmap.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/DynamicBitmap.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/Extent2D.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/Extent2D.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/Extent2D.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/Extent2D.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/FiniteProjectiveCamera.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/FiniteProjectiveCamera.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/FiniteProjectiveCamera.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/FiniteProjectiveCamera.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/GenericToolbox.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/GenericToolbox.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/GenericToolbox.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/GenericToolbox.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/GeometryToolbox.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/GeometryToolbox.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -565,5 +565,78 @@ return false; } } + + + static bool SolveLineIntersectionSystem(double& x, + double& y, + double& s, + double& t, + double x1, double y1, + double x2, double y2, + double x3, double y3, + double x4, double y4) + { + // https://en.wikipedia.org/wiki/Intersection_(geometry)#Two_line_segments + const double a1 = x2 - x1; + const double b1 = -x4 + x3; + const double c1 = x3 - x1; + const double a2 = y2 - y1; + const double b2 = -y4 + y3; + const double c2 = y3 - y1; + + const double denominator = a1 * b2 - a2 * b1; + if (LinearAlgebra::IsCloseToZero(denominator)) + { + return false; + } + else + { + // This is Cramer's rule + s = (c1 * b2 - c2 * b1) / denominator; + t = (a1 * c2 - a2 * c1) / denominator; + x = x1 + s * (x2 - x1); + y = y1 + s * (y2 - y1); + return true; + } + } + + + bool IntersectTwoLines(double& x, + double& y, + double ax1, + double ay1, + double ax2, + double ay2, + double bx1, + double by1, + double bx2, + double by2) + { + double s, t; + return SolveLineIntersectionSystem(x, y, s, t, ax1, ay1, ax2, ay2, bx1, by1, bx2, by2); + } + + + bool IntersectLineAndSegment(double& x, + double& y, + double lineX1, + double lineY1, + double lineX2, + double lineY2, + double segmentX1, + double segmentY1, + double segmentX2, + double segmentY2) + { + double s, t; + if (SolveLineIntersectionSystem(x, y, s, t, lineX1, lineY1, lineX2, lineY2, segmentX1, segmentY1, segmentX2, segmentY2)) + { + return (t >= 0 && t <= 1); + } + else + { + return false; + } + } } }
--- a/OrthancStone/Sources/Toolbox/GeometryToolbox.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/GeometryToolbox.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -117,6 +117,28 @@ bool ComputeNormal(Vector& normal, const Orthanc::DicomMap& dicom); + bool IntersectTwoLines(double& x, + double& y, + double ax1, + double ay1, + double ax2, + double ay2, + double bx1, + double by1, + double bx2, + double by2); + + bool IntersectLineAndSegment(double& x, + double& y, + double lineX1, + double lineY1, + double lineX2, + double lineY2, + double segmentX1, + double segmentY1, + double segmentX2, + double segmentY2); + inline float ComputeBilinearInterpolationUnitSquare(float x, float y, float f00, // source(0, 0)
--- a/OrthancStone/Sources/Toolbox/ImageGeometry.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/ImageGeometry.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/ImageGeometry.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/ImageGeometry.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/ImageToolbox.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/ImageToolbox.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/ImageToolbox.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/ImageToolbox.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/Internals/BucketMapper.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/Internals/BucketMapper.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/Internals/BucketMapper.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/Internals/BucketMapper.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/Internals/OrientedIntegerLine2D.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/Internals/OrientedIntegerLine2D.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/Internals/OrientedIntegerLine2D.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/Internals/OrientedIntegerLine2D.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/Internals/RectanglesIntegerProjection.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/Internals/RectanglesIntegerProjection.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/Internals/RectanglesIntegerProjection.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/Internals/RectanglesIntegerProjection.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/LinearAlgebra.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/LinearAlgebra.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/LinearAlgebra.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/LinearAlgebra.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OrthancDatasets/DicomDatasetReader.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OrthancDatasets/DicomDatasetReader.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OrthancDatasets/DicomDatasetReader.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OrthancDatasets/DicomDatasetReader.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancStone/Sources/Toolbox/OrthancDatasets/DicomWebDataset.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -0,0 +1,232 @@ +/** + * Stone of Orthanc + * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * Copyright (C) 2017-2023 Osimis S.A., Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/>. + **/ + + +#include "DicomWebDataset.h" + +#include <OrthancException.h> + +#include <boost/lexical_cast.hpp> + + +static const char* const VALUE = "Value"; +static const char* const VR = "vr"; +static const char* const SQ = "SQ"; +static const char* const ALPHABETIC = "Alphabetic"; + + +namespace OrthancStone +{ + static const Json::Value* GetValue(std::string& vr, + const Json::Value& node, + const Orthanc::DicomTag& tag) + { + char id[16]; + sprintf(id, "%04X%04X", tag.GetGroup(), tag.GetElement()); + + if (node.type() != Json::objectValue) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); + } + + if (!node.isMember(id)) + { + return NULL; + } + + if (node[id].type() == Json::objectValue && + node[id].isMember(VALUE) && + node[id].isMember(VR) && + node[id][VR].type() == Json::stringValue) + { + vr = node[id][VR].asString(); + return &node[id][VALUE]; + } + else + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); + } + } + + + static const Json::Value* GetSequenceArray(const Json::Value& node, + const Orthanc::DicomTag& tag) + { + std::string vr; + const Json::Value* value = GetValue(vr, node, tag); + + if (value != NULL && + vr == SQ && + value->type() == Json::arrayValue) + { + return value; + } + else + { + return NULL; + } + } + + + const Json::Value* DicomWebDataset::LookupValue(std::string& vr, + const Orthanc::DicomPath& path) const + { + const Json::Value* current = &dicomweb_; + + for (size_t i = 0; i < path.GetPrefixLength(); i++) + { + if (path.IsPrefixUniversal(i)) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); + } + + Json::ArrayIndex index = path.GetPrefixIndex(i); + + const Json::Value* next = GetSequenceArray(*current, path.GetPrefixTag(i)); + if (next != NULL && + index < next->size()) + { + current = &((*next) [index]); + } + else + { + return NULL; + } + } + + return GetValue(vr, *current, path.GetFinalTag()); + } + + + DicomWebDataset::DicomWebDataset(const Json::Value& dicomweb) : + dicomweb_(dicomweb) + { + if (dicomweb.type() != Json::objectValue) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); + } + } + + + bool DicomWebDataset::GetStringValue(std::string& result, + const Orthanc::DicomPath& path) const + { + std::string vr; + const Json::Value* value = LookupValue(vr, path); + + if (value == NULL) + { + return false; + } + else if (value->type() == Json::arrayValue && + value->size() == 1u) + { + if ((*value) [0].type() == Json::stringValue && ( + // This is the list of all the string value representations: + // https://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_6.2.html + vr == "AE" || + vr == "AS" || + vr == "CS" || + vr == "DA" || + vr == "DT" || + vr == "LO" || + vr == "LT" || + vr == "SH" || + vr == "ST" || + vr == "TM" || + vr == "UC" || + vr == "UI" || + vr == "UR" || + vr == "UT")) + { + result = (*value) [0].asString(); + return true; + } + else if (vr == "PN" && + (*value) [0].type() == Json::objectValue && + (*value) [0].isMember(ALPHABETIC) && + (*value) [0][ALPHABETIC].type() == Json::stringValue) + { + result = (*value) [0][ALPHABETIC].asString(); + return true; + } + else if ((vr == "DS" || + vr == "FD" || + vr == "FL") && + (*value) [0].isDouble()) + { + result = boost::lexical_cast<std::string>((*value) [0].asDouble()); + return true; + } + else if ((vr == "UL" || + vr == "US" || + vr == "UV") && + (*value) [0].isUInt64()) + { + result = boost::lexical_cast<std::string>((*value) [0].asUInt64()); + return true; + } + else if ((vr == "IS" || + vr == "SL" || + vr == "SS" || + vr == "SV") && + (*value) [0].isInt64()) + { + result = boost::lexical_cast<std::string>((*value) [0].asInt64()); + return true; + } + else + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented, "Unsupported value representation: " + vr); + } + } + else if (value->type() == Json::arrayValue && + vr == "SQ") + { + return false; + } + else + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); + } + } + + + bool DicomWebDataset::GetSequenceSize(size_t& size, + const Orthanc::DicomPath& path) const + { + std::string vr; + const Json::Value* value = LookupValue(vr, path); + + if (value != NULL && + vr == SQ && + value->type() == Json::arrayValue) + { + size = value->size(); + return true; + } + else + { + return false; + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancStone/Sources/Toolbox/OrthancDatasets/DicomWebDataset.h Fri Apr 18 14:17:06 2025 +0200 @@ -0,0 +1,49 @@ +/** + * Stone of Orthanc + * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * Copyright (C) 2017-2023 Osimis S.A., Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/>. + **/ + + +#pragma once + +#include "IDicomDataset.h" + +#include <json/value.h> + + +namespace OrthancStone +{ + class DicomWebDataset : public IDicomDataset + { + private: + Json::Value dicomweb_; + + const Json::Value* LookupValue(std::string& vr, + const Orthanc::DicomPath& path) const; + + public: + explicit DicomWebDataset(const Json::Value& dicomweb); + + virtual bool GetStringValue(std::string& result, + const Orthanc::DicomPath& path) const ORTHANC_OVERRIDE; + virtual bool GetSequenceSize(size_t& size, + const Orthanc::DicomPath& path) const ORTHANC_OVERRIDE; + }; +}
--- a/OrthancStone/Sources/Toolbox/OrthancDatasets/FullOrthancDataset.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OrthancDatasets/FullOrthancDataset.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OrthancDatasets/FullOrthancDataset.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OrthancDatasets/FullOrthancDataset.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OrthancDatasets/IDicomDataset.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OrthancDatasets/IDicomDataset.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OrthancDatasets/IOrthancConnection.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OrthancDatasets/IOrthancConnection.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OrthancDatasets/IOrthancConnection.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OrthancDatasets/IOrthancConnection.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OrthancDatasets/OrthancHttpConnection.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OrthancDatasets/OrthancHttpConnection.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -23,6 +23,8 @@ #include "OrthancHttpConnection.h" +#include "../StoneToolbox.h" + namespace OrthancStone { void OrthancHttpConnection::Setup() @@ -54,7 +56,7 @@ boost::mutex::scoped_lock lock(mutex_); client_.SetMethod(Orthanc::HttpMethod_Get); - client_.SetUrl(url_ + uri); + client_.SetUrl(StoneToolbox::JoinUrl(url_, uri)); client_.ApplyAndThrowException(result); } @@ -66,7 +68,7 @@ boost::mutex::scoped_lock lock(mutex_); client_.SetMethod(Orthanc::HttpMethod_Post); - client_.SetUrl(url_ + uri); + client_.SetUrl(StoneToolbox::JoinUrl(url_, uri)); #if defined(ORTHANC_FRAMEWORK_VERSION_IS_ABOVE) && ORTHANC_FRAMEWORK_VERSION_IS_ABOVE(1, 9, 3) client_.SetExternalBody(body); @@ -86,7 +88,7 @@ boost::mutex::scoped_lock lock(mutex_); client_.SetMethod(Orthanc::HttpMethod_Put); - client_.SetUrl(url_ + uri); + client_.SetUrl(StoneToolbox::JoinUrl(url_, uri)); #if defined(ORTHANC_FRAMEWORK_VERSION_IS_ABOVE) && ORTHANC_FRAMEWORK_VERSION_IS_ABOVE(1, 9, 3) client_.SetExternalBody(body); @@ -106,7 +108,7 @@ std::string result; client_.SetMethod(Orthanc::HttpMethod_Delete); - client_.SetUrl(url_ + uri); + client_.SetUrl(StoneToolbox::JoinUrl(url_, uri)); client_.ApplyAndThrowException(result); } }
--- a/OrthancStone/Sources/Toolbox/OrthancDatasets/OrthancHttpConnection.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OrthancDatasets/OrthancHttpConnection.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancStone/Sources/Toolbox/OrthancDatasets/OrthancNativeDataset.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -0,0 +1,213 @@ +/** + * Stone of Orthanc + * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * Copyright (C) 2017-2023 Osimis S.A., Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/>. + **/ + + +#include "OrthancNativeDataset.h" + +#include <OrthancException.h> + + +static const char* const NAME = "Name"; +static const char* const TYPE = "Type"; +static const char* const VALUE = "Value"; + + +namespace OrthancStone +{ + const Json::Value* OrthancNativeDataset::LookupValue(std::string& type, + const Orthanc::DicomPath& path) const + { + if (path.IsPrefixUniversal(0)) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); + } + + const Orthanc::DicomValue* rootSequence = dicom_->TestAndGetValue(path.GetPrefixTag(0)); + if (rootSequence == NULL || + !rootSequence->IsSequence()) + { + return NULL; + } + + Json::ArrayIndex index = path.GetPrefixIndex(0); + + if (rootSequence->GetSequenceContent().type() != Json::arrayValue) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); + } + + if (index >= rootSequence->GetSequenceContent().size()) + { + return NULL; + } + + const Json::Value* current = &(rootSequence->GetSequenceContent() [index]); + + for (size_t i = 1; i < path.GetPrefixLength(); i++) + { + if (path.IsPrefixUniversal(i)) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); + } + + index = path.GetPrefixIndex(i); + std::string tag = path.GetPrefixTag(i).Format(); + + if (current->type() != Json::objectValue) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); + } + + if (!current->isMember(tag)) + { + return NULL; + } + + if ((*current) [tag].type() != Json::objectValue || + !(*current) [tag].isMember(NAME) || + !(*current) [tag].isMember(TYPE) || + !(*current) [tag].isMember(VALUE) || + (*current) [tag][NAME].type() != Json::stringValue || + (*current) [tag][TYPE].type() != Json::stringValue) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); + } + + if ((*current) [tag][TYPE].asString() != "Sequence" || + (*current) [tag][VALUE].type() != Json::arrayValue || + index >= (*current) [tag][VALUE].size()) + { + return NULL; + } + + current = &(*current) [tag][VALUE][index]; + } + + std::string tag = path.GetFinalTag().Format(); + + if (current->type() != Json::objectValue) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); + } + + if (!current->isMember(tag)) + { + return NULL; + } + + if ((*current) [tag].type() != Json::objectValue || + !(*current) [tag].isMember(NAME) || + !(*current) [tag].isMember(TYPE) || + !(*current) [tag].isMember(VALUE) || + (*current) [tag][NAME].type() != Json::stringValue || + (*current) [tag][TYPE].type() != Json::stringValue) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); + } + else + { + type = (*current) [tag][TYPE].asString(); + return &((*current) [tag][VALUE]); + } + } + + + OrthancNativeDataset::OrthancNativeDataset(const Json::Value& dicom) : + dicom_(new Orthanc::DicomMap) + { + dicom_->FromDicomAsJson(dicom, false, true /* parse sequences */); + } + + + bool OrthancNativeDataset::GetStringValue(std::string& result, + const Orthanc::DicomPath& path) const + { + if (path.GetPrefixLength() == 0) + { + return dicom_->LookupStringValue(result, path.GetFinalTag(), false); + } + else + { + std::string type; + const Json::Value* value = LookupValue(type, path); + + if (value == NULL) + { + return false; + } + else if (type == "String" && + value->type() == Json::stringValue) + { + result = value->asString(); + return true; + } + else + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); + } + } + } + + + bool OrthancNativeDataset::GetSequenceSize(size_t& size, + const Orthanc::DicomPath& path) const + { + if (path.GetPrefixLength() == 0) + { + const Orthanc::DicomValue* value = dicom_->TestAndGetValue(path.GetFinalTag()); + if (value == NULL || + !value->IsSequence()) + { + return false; + } + else if (value->GetSequenceContent().type() != Json::arrayValue) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); + } + else + { + size = value->GetSequenceContent().size(); + return true; + } + } + else + { + std::string type; + const Json::Value* value = LookupValue(type, path); + + if (value == NULL || + type != "Sequence") + { + return false; + } + else if (value->type() != Json::arrayValue) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); + } + else + { + size = value->size(); + return true; + } + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancStone/Sources/Toolbox/OrthancDatasets/OrthancNativeDataset.h Fri Apr 18 14:17:06 2025 +0200 @@ -0,0 +1,55 @@ +/** + * Stone of Orthanc + * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * Copyright (C) 2017-2023 Osimis S.A., Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/>. + **/ + + +#pragma once + +#include "IDicomDataset.h" + +#include <DicomFormat/DicomMap.h> + + +namespace OrthancStone +{ + class OrthancNativeDataset : public IDicomDataset + { + private: + std::unique_ptr<Orthanc::DicomMap> dicom_; + + const Json::Value* LookupValue(std::string& type, + const Orthanc::DicomPath& path) const; + + public: + explicit OrthancNativeDataset(const Orthanc::DicomMap& dicom) : + dicom_(dicom.Clone()) + { + } + + explicit OrthancNativeDataset(const Json::Value& dicom); + + virtual bool GetStringValue(std::string& result, + const Orthanc::DicomPath& path) const ORTHANC_OVERRIDE; + + virtual bool GetSequenceSize(size_t& size, + const Orthanc::DicomPath& path) const ORTHANC_OVERRIDE; + }; +}
--- a/OrthancStone/Sources/Toolbox/OrthancDatasets/SimplifiedOrthancDataset.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OrthancDatasets/SimplifiedOrthancDataset.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OrthancDatasets/SimplifiedOrthancDataset.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OrthancDatasets/SimplifiedOrthancDataset.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OsiriX/AngleAnnotation.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OsiriX/AngleAnnotation.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OsiriX/AngleAnnotation.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OsiriX/AngleAnnotation.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OsiriX/Annotation.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OsiriX/Annotation.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OsiriX/Annotation.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OsiriX/Annotation.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OsiriX/ArrayValue.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OsiriX/ArrayValue.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OsiriX/ArrayValue.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OsiriX/ArrayValue.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OsiriX/CollectionOfAnnotations.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OsiriX/CollectionOfAnnotations.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OsiriX/CollectionOfAnnotations.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OsiriX/CollectionOfAnnotations.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OsiriX/DictionaryValue.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OsiriX/DictionaryValue.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OsiriX/DictionaryValue.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OsiriX/DictionaryValue.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OsiriX/IValue.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OsiriX/IValue.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OsiriX/IValue.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OsiriX/IValue.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OsiriX/IntegerValue.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OsiriX/IntegerValue.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OsiriX/LineAnnotation.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OsiriX/LineAnnotation.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OsiriX/LineAnnotation.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OsiriX/LineAnnotation.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OsiriX/RealValue.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OsiriX/RealValue.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OsiriX/StringValue.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OsiriX/StringValue.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OsiriX/StringValue.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OsiriX/StringValue.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OsiriX/TextAnnotation.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OsiriX/TextAnnotation.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/OsiriX/TextAnnotation.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/OsiriX/TextAnnotation.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/ParsedDicomCache.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/ParsedDicomCache.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/ParsedDicomCache.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/ParsedDicomCache.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/ParsedDicomDataset.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/ParsedDicomDataset.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/ParsedDicomDataset.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/ParsedDicomDataset.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/PixelTestPatterns.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/PixelTestPatterns.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/SegmentTree.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/SegmentTree.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/SegmentTree.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/SegmentTree.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/ShearWarpProjectiveTransform.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/ShearWarpProjectiveTransform.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/ShearWarpProjectiveTransform.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/ShearWarpProjectiveTransform.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/SlicesSorter.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/SlicesSorter.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/SlicesSorter.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/SlicesSorter.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/SortedFrames.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/SortedFrames.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/SortedFrames.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/SortedFrames.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancStone/Sources/Toolbox/StoneToolbox.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -0,0 +1,50 @@ +/** + * Stone of Orthanc + * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * Copyright (C) 2017-2023 Osimis S.A., Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/>. + **/ + + +#include "StoneToolbox.h" + +namespace OrthancStone +{ + namespace StoneToolbox + { + std::string JoinUrl(const std::string& base, + const std::string& path) + { + size_t end = base.size(); + while (end > 0 && + base[end - 1] == '/') + { + end--; + } + + size_t start = 0; + while (start < path.size() && + path[start] == '/') + { + start++; + } + + return base.substr(0, end) + "/" + path.substr(start); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancStone/Sources/Toolbox/StoneToolbox.h Fri Apr 18 14:17:06 2025 +0200 @@ -0,0 +1,35 @@ +/** + * Stone of Orthanc + * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * Copyright (C) 2017-2023 Osimis S.A., Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/>. + **/ + + +#pragma once + +#include <string> + +namespace OrthancStone +{ + namespace StoneToolbox + { + std::string JoinUrl(const std::string& base, + const std::string& path); + } +}
--- a/OrthancStone/Sources/Toolbox/SubpixelReader.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/SubpixelReader.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/SubvoxelReader.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/SubvoxelReader.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/TextRenderer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/TextRenderer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/TextRenderer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/TextRenderer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/UndoRedoStack.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/UndoRedoStack.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/UndoRedoStack.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/UndoRedoStack.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/UnionOfRectangles.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/UnionOfRectangles.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Toolbox/UnionOfRectangles.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Toolbox/UnionOfRectangles.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancStone/Sources/Toolbox/Windowing.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -0,0 +1,52 @@ +/** + * Stone of Orthanc + * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * Copyright (C) 2017-2023 Osimis S.A., Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/>. + **/ + + +#include "Windowing.h" + +#include "LinearAlgebra.h" + + +namespace OrthancStone +{ + Windowing::Windowing(double center, + double width) + { + center_ = center; + width_ = std::abs(width); + } + + + void Windowing::GetBounds(double& low, + double& high) const + { + low = center_ - width_ / 2.0; + high = center_ + width_ / 2.0; + } + + + bool Windowing::IsNear(const Windowing& other) const + { + return (LinearAlgebra::IsNear(center_, other.center_) && + LinearAlgebra::IsNear(width_, other.width_)); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancStone/Sources/Toolbox/Windowing.h Fri Apr 18 14:17:06 2025 +0200 @@ -0,0 +1,59 @@ +/** + * Stone of Orthanc + * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * Copyright (C) 2017-2023 Osimis S.A., Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/>. + **/ + + +#pragma once + +namespace OrthancStone +{ + class Windowing + { + private: + double center_; + double width_; + + public: + Windowing() : + center_(128), + width_(256) + { + } + + Windowing(double center, + double width); + + double GetCenter() const + { + return center_; + } + + double GetWidth() const + { + return width_; + } + + void GetBounds(double& low, + double& high) const; + + bool IsNear(const Windowing& other) const; + }; +}
--- a/OrthancStone/Sources/Viewport/DefaultViewportInteractor.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Viewport/DefaultViewportInteractor.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Viewport/DefaultViewportInteractor.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Viewport/DefaultViewportInteractor.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Viewport/IViewport.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Viewport/IViewport.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Viewport/IViewportInteractor.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Viewport/IViewportInteractor.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Viewport/ViewportLocker.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Viewport/ViewportLocker.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Viewport/ViewportLocker.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Viewport/ViewportLocker.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Volumes/DicomVolumeImage.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Volumes/DicomVolumeImage.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Volumes/DicomVolumeImage.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Volumes/DicomVolumeImage.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Volumes/DicomVolumeImageMPRSlicer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Volumes/DicomVolumeImageMPRSlicer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Volumes/DicomVolumeImageMPRSlicer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Volumes/DicomVolumeImageMPRSlicer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Volumes/DicomVolumeImageReslicer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Volumes/DicomVolumeImageReslicer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Volumes/DicomVolumeImageReslicer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Volumes/DicomVolumeImageReslicer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Volumes/IGeometryProvider.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Volumes/IGeometryProvider.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Volumes/IVolumeSlicer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Volumes/IVolumeSlicer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Volumes/IVolumeSlicer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Volumes/IVolumeSlicer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Volumes/ImageBuffer3D.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Volumes/ImageBuffer3D.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Volumes/ImageBuffer3D.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Volumes/ImageBuffer3D.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Volumes/OrientedVolumeBoundingBox.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Volumes/OrientedVolumeBoundingBox.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Volumes/OrientedVolumeBoundingBox.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Volumes/OrientedVolumeBoundingBox.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Volumes/VolumeImageGeometry.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Volumes/VolumeImageGeometry.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Volumes/VolumeImageGeometry.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Volumes/VolumeImageGeometry.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Volumes/VolumeReslicer.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Volumes/VolumeReslicer.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Volumes/VolumeReslicer.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Volumes/VolumeReslicer.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Volumes/VolumeSceneLayerSource.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Volumes/VolumeSceneLayerSource.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Volumes/VolumeSceneLayerSource.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Volumes/VolumeSceneLayerSource.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Wrappers/CairoContext.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Wrappers/CairoContext.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Wrappers/CairoContext.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Wrappers/CairoContext.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Wrappers/CairoSurface.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Wrappers/CairoSurface.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/Sources/Wrappers/CairoSurface.h Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/Sources/Wrappers/CairoSurface.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/UnitTestsSources/CMakeLists.txt Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/UnitTestsSources/CMakeLists.txt Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/UnitTestsSources/ComputationalGeometryTests.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/UnitTestsSources/ComputationalGeometryTests.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -540,71 +540,6 @@ } -#if 0 -static void SaveSvg(const std::list< std::vector<OrthancStone::ScenePoint2D> >& contours) -{ - float ww = 15; - float hh = 13; - - FILE* fp = fopen("test.svg", "w"); - fprintf(fp, "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"); - fprintf(fp, "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n"); - fprintf(fp, "<svg width=\"%f\" height=\"%f\" viewBox=\"0 0 %f %f\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n", 100.0f*ww, 100.0f*hh, ww, hh); - - // http://thenewcode.com/1068/Making-Arrows-in-SVG - fprintf(fp, "<defs>\n"); - fprintf(fp, "<marker id=\"arrowhead\" markerWidth=\"2\" markerHeight=\"3\" \n"); - fprintf(fp, "refX=\"2\" refY=\"1.5\" orient=\"auto\">\n"); - fprintf(fp, "<polygon points=\"0 0, 2 1.5, 0 3\" />\n"); - fprintf(fp, "</marker>\n"); - fprintf(fp, "</defs>\n"); - - fprintf(fp, "<rect fill=\"#fff\" stroke=\"#000\" x=\"0\" y=\"0\" width=\"%f\" height=\"%f\"/>\n", ww, hh); - - unsigned int count = 0; - - for (std::list< std::vector<OrthancStone::ScenePoint2D> >::const_iterator - it = contours.begin(); it != contours.end(); ++it, count++) - { - std::string color; - if (count == 0) - { - color = "blue"; - } - else if (count == 1) - { - color = "red"; - } - else if (count == 2) - { - color = "green"; - } - else if (count == 3) - { - color = "orange"; - } - else - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); - } - - for (size_t i = 0; i + 1 < it->size(); i++) - { - float x1 = (*it)[i].GetX(); - float x2 = (*it)[i + 1].GetX(); - float y1 = (*it)[i].GetY(); - float y2 = (*it)[i + 1].GetY(); - - fprintf(fp, "<line x1=\"%f\" y1=\"%f\" x2=\"%f\" y2=\"%f\" stroke=\"%s\" stroke-width=\"0.05\" marker-end=\"url(#arrowhead)\"/>\n", x1, y1, x2, y2, color.c_str()); - } - } - fprintf(fp, "</svg>\n"); - - fclose(fp); -} -#endif - - TEST(UnionOfRectangles, EdgeCases) { {
--- a/OrthancStone/UnitTestsSources/DicomTests.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/UnitTestsSources/DicomTests.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -66,13 +66,11 @@ ASSERT_THROW(p->GetRescaleIntercept(), Orthanc::OrthancException); ASSERT_THROW(p->GetRescaleSlope(), Orthanc::OrthancException); ASSERT_EQ(0u, p->GetWindowingPresetsCount()); - ASSERT_THROW(p->GetWindowingPresetCenter(0), Orthanc::OrthancException); - ASSERT_THROW(p->GetWindowingPresetWidth(0), Orthanc::OrthancException); + ASSERT_THROW(p->GetWindowingPreset(0), Orthanc::OrthancException); - float c, w; - p->GetWindowingPresetsUnion(c, w); - ASSERT_FLOAT_EQ(128.0f, c); - ASSERT_FLOAT_EQ(256.0f, w); + OrthancStone::Windowing w = p->GetWindowingPresetsUnion(); + ASSERT_FLOAT_EQ(128.0f, w.GetCenter()); + ASSERT_FLOAT_EQ(256.0f, w.GetWidth()); ASSERT_THROW(p->GetExpectedPixelFormat(), Orthanc::OrthancException); ASSERT_FALSE(p->HasIndexInSeries()); @@ -96,20 +94,19 @@ OrthancStone::DicomInstanceParameters p(m); ASSERT_EQ(3u, p.GetWindowingPresetsCount()); - ASSERT_FLOAT_EQ(10, p.GetWindowingPresetCenter(0)); - ASSERT_FLOAT_EQ(100, p.GetWindowingPresetCenter(1)); - ASSERT_FLOAT_EQ(1000, p.GetWindowingPresetCenter(2)); - ASSERT_FLOAT_EQ(50, p.GetWindowingPresetWidth(0)); - ASSERT_FLOAT_EQ(60, p.GetWindowingPresetWidth(1)); - ASSERT_FLOAT_EQ(70, p.GetWindowingPresetWidth(2)); + ASSERT_FLOAT_EQ(10, p.GetWindowingPreset(0).GetCenter()); + ASSERT_FLOAT_EQ(100, p.GetWindowingPreset(1).GetCenter()); + ASSERT_FLOAT_EQ(1000, p.GetWindowingPreset(2).GetCenter()); + ASSERT_FLOAT_EQ(50, p.GetWindowingPreset(0).GetWidth()); + ASSERT_FLOAT_EQ(60, p.GetWindowingPreset(1).GetWidth()); + ASSERT_FLOAT_EQ(70, p.GetWindowingPreset(2).GetWidth()); const float a = 10.0f - 50.0f / 2.0f; const float b = 1000.0f + 70.0f / 2.0f; - float c, w; - p.GetWindowingPresetsUnion(c, w); - ASSERT_FLOAT_EQ((a + b) / 2.0f, c); - ASSERT_FLOAT_EQ(b - a, w); + OrthancStone::Windowing w = p.GetWindowingPresetsUnion(); + ASSERT_FLOAT_EQ((a + b) / 2.0f, w.GetCenter()); + ASSERT_FLOAT_EQ(b - a, w.GetWidth()); }
--- a/OrthancStone/UnitTestsSources/GenericToolboxTests.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/UnitTestsSources/GenericToolboxTests.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -4342,7 +4342,7 @@ const char* s = " \t 0.0/.123/3 \t/12.5e-3//-43.1 \t "; int32_t size; - double r; + double r = -1.0; const char* p = s; while (*p == ' ' || *p == '\t') @@ -4390,7 +4390,7 @@ const char* s = " \t 0.0/.123/3/12.5e-3//-43.1e-2 \t "; int32_t size; - double r; + double r = -1.0; const char* p = s; while (*p == ' ' || *p == '\t')
--- a/OrthancStone/UnitTestsSources/GeometryToolboxTests.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/UnitTestsSources/GeometryToolboxTests.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -1174,3 +1174,15 @@ ASSERT_EQ("LHP", right); } } + + +TEST(GeometryToolbox, IntersectTwoLines) +{ + double x, y; + ASSERT_TRUE(OrthancStone::GeometryToolbox::IntersectTwoLines(x, y, 1, 1, 3, 2, 1, 4, 2, -1)); + ASSERT_DOUBLE_EQ(x, 17.0 / 11.0); + ASSERT_DOUBLE_EQ(y, 14.0 / 11.0); + ASSERT_TRUE(OrthancStone::GeometryToolbox::IntersectLineAndSegment(x, y, 1, 1, 3, 2, 1, 4, 2, -1)); + ASSERT_DOUBLE_EQ(x, 17.0 / 11.0); + ASSERT_DOUBLE_EQ(y, 14.0 / 11.0); +}
--- a/OrthancStone/UnitTestsSources/Graveyard/TestStructureSet_BGO.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/UnitTestsSources/Graveyard/TestStructureSet_BGO.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/UnitTestsSources/ImageToolboxTests.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/UnitTestsSources/ImageToolboxTests.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/UnitTestsSources/PixelTestPatternsTests.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/UnitTestsSources/PixelTestPatternsTests.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/UnitTestsSources/SortedFramesCreateTest.py Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/UnitTestsSources/SortedFramesCreateTest.py Fri Apr 18 14:17:06 2025 +0200 @@ -4,7 +4,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/UnitTestsSources/SortedFramesTests.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/UnitTestsSources/SortedFramesTests.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/UnitTestsSources/TestMessageBroker.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/UnitTestsSources/TestMessageBroker.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/UnitTestsSources/TestStrategy.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/UnitTestsSources/TestStrategy.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/UnitTestsSources/TestStructureSet.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/UnitTestsSources/TestStructureSet.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/UnitTestsSources/UnitTestsMain.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/UnitTestsSources/UnitTestsMain.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -25,6 +25,7 @@ #include "../Sources/StoneEnumerations.h" #include "../Sources/StoneInitialization.h" +#include "../Sources/Toolbox/StoneToolbox.h" #include <Logging.h> @@ -58,6 +59,22 @@ } +TEST(StoneToolbox, JoinUrl) +{ + ASSERT_EQ("/", OrthancStone::StoneToolbox::JoinUrl("", "")); + ASSERT_EQ("/", OrthancStone::StoneToolbox::JoinUrl("", "/")); + ASSERT_EQ("/", OrthancStone::StoneToolbox::JoinUrl("", "//")); + ASSERT_EQ("/", OrthancStone::StoneToolbox::JoinUrl("/", "")); + ASSERT_EQ("/", OrthancStone::StoneToolbox::JoinUrl("//", "")); + ASSERT_EQ("/", OrthancStone::StoneToolbox::JoinUrl("////", "/////")); + ASSERT_EQ("a/b/d/e/", OrthancStone::StoneToolbox::JoinUrl("a/b", "d/e/")); + ASSERT_EQ("a/b/d/e/", OrthancStone::StoneToolbox::JoinUrl("a/b", "/d/e/")); + ASSERT_EQ("a/b/d/e/", OrthancStone::StoneToolbox::JoinUrl("a/b/", "d/e/")); + ASSERT_EQ("a/b/d/e/", OrthancStone::StoneToolbox::JoinUrl("a/b/", "/d/e/")); + ASSERT_EQ("a/b/d/e/", OrthancStone::StoneToolbox::JoinUrl("a/b///", "///d/e/")); +} + + int main(int argc, char **argv) { #if defined(__EMSCRIPTEN__)
--- a/OrthancStone/UnitTestsSources/UnitTestsSources.cmake Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/UnitTestsSources/UnitTestsSources.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License
--- a/OrthancStone/UnitTestsSources/VolumeRenderingTests.cpp Thu May 30 21:31:37 2024 +0200 +++ b/OrthancStone/UnitTestsSources/VolumeRenderingTests.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License
--- a/RenderingPlugin/CMakeLists.txt Thu May 30 21:31:37 2024 +0200 +++ b/RenderingPlugin/CMakeLists.txt Fri Apr 18 14:17:06 2025 +0200 @@ -2,7 +2,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU General Public License as
--- a/RenderingPlugin/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.cpp Thu May 30 21:31:37 2024 +0200 +++ b/RenderingPlugin/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,8 +3,8 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2024-2024 Orthanc Team SRL, Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2024-2025 Orthanc Team SRL, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -26,6 +26,7 @@ #include <boost/algorithm/string/predicate.hpp> #include <boost/move/unique_ptr.hpp> #include <boost/thread.hpp> +#include <boost/algorithm/string/join.hpp> #include <json/reader.h> @@ -334,9 +335,9 @@ std::vector<const char*> headersValues_; public: - explicit PluginHttpHeaders(const std::map<std::string, std::string>& httpHeaders) - { - for (std::map<std::string, std::string>::const_iterator + explicit PluginHttpHeaders(const HttpHeaders& httpHeaders) + { + for (HttpHeaders::const_iterator it = httpHeaders.begin(); it != httpHeaders.end(); ++it) { headersKeys_.push_back(it->first.c_str()); @@ -361,7 +362,7 @@ }; bool MemoryBuffer::RestApiGet(const std::string& uri, - const std::map<std::string, std::string>& httpHeaders, + const HttpHeaders& httpHeaders, bool applyPlugins) { Clear(); @@ -400,7 +401,7 @@ bool MemoryBuffer::RestApiPost(const std::string& uri, const void* body, size_t bodySize, - const std::map<std::string, std::string>& httpHeaders, + const HttpHeaders& httpHeaders, bool applyPlugins) { MemoryBuffer answerHeaders; @@ -422,7 +423,7 @@ bool MemoryBuffer::RestApiPost(const std::string& uri, const Json::Value& body, - const std::map<std::string, std::string>& httpHeaders, + const HttpHeaders& httpHeaders, bool applyPlugins) { std::string s; @@ -1490,7 +1491,7 @@ bool RestApiGetString(std::string& result, const std::string& uri, - const std::map<std::string, std::string>& httpHeaders, + const HttpHeaders& httpHeaders, bool applyPlugins) { MemoryBuffer answer; @@ -1508,7 +1509,7 @@ bool RestApiGet(Json::Value& result, const std::string& uri, - const std::map<std::string, std::string>& httpHeaders, + const HttpHeaders& httpHeaders, bool applyPlugins) { MemoryBuffer answer; @@ -1598,7 +1599,7 @@ bool RestApiPost(Json::Value& result, const std::string& uri, const Json::Value& body, - const std::map<std::string, std::string>& httpHeaders, + const HttpHeaders& httpHeaders, bool applyPlugins) { MemoryBuffer answer; @@ -1963,7 +1964,7 @@ bool OrthancPeers::DoGet(MemoryBuffer& target, size_t index, const std::string& uri, - const std::map<std::string, std::string>& headers) const + const HttpHeaders& headers) const { if (index >= index_.size()) { @@ -1994,7 +1995,7 @@ bool OrthancPeers::DoGet(MemoryBuffer& target, const std::string& name, const std::string& uri, - const std::map<std::string, std::string>& headers) const + const HttpHeaders& headers) const { size_t index; return (LookupName(index, name) && @@ -2005,7 +2006,7 @@ bool OrthancPeers::DoGet(Json::Value& target, size_t index, const std::string& uri, - const std::map<std::string, std::string>& headers) const + const HttpHeaders& headers) const { MemoryBuffer buffer; @@ -2024,7 +2025,7 @@ bool OrthancPeers::DoGet(Json::Value& target, const std::string& name, const std::string& uri, - const std::map<std::string, std::string>& headers) const + const HttpHeaders& headers) const { MemoryBuffer buffer; @@ -2044,7 +2045,7 @@ const std::string& name, const std::string& uri, const std::string& body, - const std::map<std::string, std::string>& headers) const + const HttpHeaders& headers) const { size_t index; return (LookupName(index, name) && @@ -2056,7 +2057,7 @@ size_t index, const std::string& uri, const std::string& body, - const std::map<std::string, std::string>& headers) const + const HttpHeaders& headers) const { MemoryBuffer buffer; @@ -2076,7 +2077,7 @@ const std::string& name, const std::string& uri, const std::string& body, - const std::map<std::string, std::string>& headers) const + const HttpHeaders& headers) const { MemoryBuffer buffer; @@ -2096,7 +2097,7 @@ size_t index, const std::string& uri, const std::string& body, - const std::map<std::string, std::string>& headers) const + const HttpHeaders& headers) const { if (index >= index_.size()) { @@ -2133,7 +2134,7 @@ bool OrthancPeers::DoPut(size_t index, const std::string& uri, const std::string& body, - const std::map<std::string, std::string>& headers) const + const HttpHeaders& headers) const { if (index >= index_.size()) { @@ -2169,7 +2170,7 @@ bool OrthancPeers::DoPut(const std::string& name, const std::string& uri, const std::string& body, - const std::map<std::string, std::string>& headers) const + const HttpHeaders& headers) const { size_t index; return (LookupName(index, name) && @@ -2179,7 +2180,7 @@ bool OrthancPeers::DoDelete(size_t index, const std::string& uri, - const std::map<std::string, std::string>& headers) const + const HttpHeaders& headers) const { if (index >= index_.size()) { @@ -2208,7 +2209,7 @@ bool OrthancPeers::DoDelete(const std::string& name, const std::string& uri, - const std::map<std::string, std::string>& headers) const + const HttpHeaders& headers) const { size_t index; return (LookupName(index, name) && @@ -2923,12 +2924,12 @@ std::vector<const char*> headersValues_; public: - HeadersWrapper(const HttpClient::HttpHeaders& headers) + HeadersWrapper(const HttpHeaders& headers) { headersKeys_.reserve(headers.size()); headersValues_.reserve(headers.size()); - for (HttpClient::HttpHeaders::const_iterator it = headers.begin(); it != headers.end(); ++it) + for (HttpHeaders::const_iterator it = headers.begin(); it != headers.end(); ++it) { headersKeys_.push_back(it->first.c_str()); headersValues_.push_back(it->second.c_str()); @@ -3076,11 +3077,11 @@ class MemoryAnswer : public HttpClient::IAnswer { private: - HttpClient::HttpHeaders headers_; - ChunkedBuffer body_; + HttpHeaders headers_; + ChunkedBuffer body_; public: - const HttpClient::HttpHeaders& GetHeaders() const + const HttpHeaders& GetHeaders() const { return headers_; } @@ -3168,6 +3169,35 @@ #endif + static void DecodeHttpHeaders(HttpHeaders& target, + const MemoryBuffer& source) + { + Json::Value v; + source.ToJson(v); + + if (v.type() != Json::objectValue) + { + ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError); + } + + Json::Value::Members members = v.getMemberNames(); + target.clear(); + + for (size_t i = 0; i < members.size(); i++) + { + const Json::Value& h = v[members[i]]; + if (h.type() != Json::stringValue) + { + ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError); + } + else + { + target[members[i]] = h.asString(); + } + } + } + + void HttpClient::ExecuteWithoutStream(uint16_t& httpStatus, HttpHeaders& answerHeaders, std::string& answerBody, @@ -3208,30 +3238,7 @@ ORTHANC_PLUGINS_THROW_PLUGIN_ERROR_CODE(error); } - Json::Value v; - answerHeadersBuffer.ToJson(v); - - if (v.type() != Json::objectValue) - { - ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError); - } - - Json::Value::Members members = v.getMemberNames(); - answerHeaders.clear(); - - for (size_t i = 0; i < members.size(); i++) - { - const Json::Value& h = v[members[i]]; - if (h.type() != Json::stringValue) - { - ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError); - } - else - { - answerHeaders[members[i]] = h.asString(); - } - } - + DecodeHttpHeaders(answerHeaders, answerHeadersBuffer); answerBodyBuffer.ToString(answerBody); } @@ -4061,7 +4068,7 @@ } #endif - void GetHttpHeaders(std::map<std::string, std::string>& result, const OrthancPluginHttpRequest* request) + void GetHttpHeaders(HttpHeaders& result, const OrthancPluginHttpRequest* request) { result.clear(); @@ -4071,6 +4078,26 @@ } } + void SerializeGetArguments(std::string& output, const OrthancPluginHttpRequest* request) + { + output.clear(); + std::vector<std::string> arguments; + for (uint32_t i = 0; i < request->getCount; ++i) + { + if (request->getValues[i] && strlen(request->getValues[i]) > 0) + { + arguments.push_back(std::string(request->getKeys[i]) + "=" + std::string(request->getValues[i])); + } + else + { + arguments.push_back(std::string(request->getKeys[i])); + } + } + + output = boost::algorithm::join(arguments, "&"); + } + + #if !ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 12, 4) static void SetPluginProperty(const std::string& pluginIdentifier, _OrthancPluginProperty property, @@ -4114,4 +4141,179 @@ SetPluginProperty(pluginIdentifier, _OrthancPluginProperty_OrthancExplorer, javascript); #endif } + + +#if HAS_ORTHANC_PLUGIN_GENERIC_CALL_REST_API == 1 + RestApiClient::RestApiClient() : + method_(OrthancPluginHttpMethod_Get), + path_("/"), + afterPlugins_(false), + httpStatus_(0) + { + } + + RestApiClient::RestApiClient(const char* url, + const OrthancPluginHttpRequest* request) : + method_(request->method), + path_(url), + afterPlugins_(false), + httpStatus_(0) + { + OrthancPlugins::GetHttpHeaders(requestHeaders_, request); + + std::string getArguments; + OrthancPlugins::SerializeGetArguments(getArguments, request); + + if (!getArguments.empty()) + { + path_ += "?" + getArguments; + } + } +#endif + + +#if HAS_ORTHANC_PLUGIN_GENERIC_CALL_REST_API == 1 + void RestApiClient::AddRequestHeader(const std::string& key, + const std::string& value) + { + if (requestHeaders_.find(key) == requestHeaders_.end()) + { + requestHeaders_[key] = value; + } + else + { + ORTHANC_PLUGINS_THROW_EXCEPTION(BadSequenceOfCalls); + } + } +#endif + + +#if HAS_ORTHANC_PLUGIN_GENERIC_CALL_REST_API == 1 + bool RestApiClient::Execute() + { + if (requestBody_.size() > 0xffffffffu) + { + ORTHANC_PLUGINS_LOG_ERROR("Cannot handle body size > 4GB"); + ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError); + } + + PluginHttpHeaders converted(requestHeaders_); + + MemoryBuffer body; + MemoryBuffer headers; + + OrthancPluginErrorCode code = OrthancPluginCallRestApi(GetGlobalContext(), *body, *headers, &httpStatus_, method_, path_.c_str(), + requestHeaders_.size(), converted.GetKeys(), converted.GetValues(), + requestBody_.c_str(), requestBody_.size(), afterPlugins_ ? 1 : 0); + + answerHeaders_.clear(); + answerBody_.clear(); + + if (code == OrthancPluginErrorCode_Success) + { + if (httpStatus_ == 0) + { + ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError); + } + + DecodeHttpHeaders(answerHeaders_, headers); + body.ToString(answerBody_); + return true; + } + else + { + if (code == OrthancPluginErrorCode_UnknownResource || + code == OrthancPluginErrorCode_InexistentItem) + { + httpStatus_ = 404; + return false; + } + else + { + ORTHANC_PLUGINS_THROW_PLUGIN_ERROR_CODE(code); + } + } + } + + void RestApiClient::Forward(OrthancPluginContext* context, OrthancPluginRestOutput* output) + { + if (Execute() && httpStatus_ == 200) + { + const char* mimeType = NULL; + for (HttpHeaders::const_iterator h = answerHeaders_.begin(); h != answerHeaders_.end(); ++h) + { + if (h->first == "content-type") + { + mimeType = h->second.c_str(); + } + } + + AnswerString(answerBody_, mimeType, output); + } + else + { + AnswerHttpError(httpStatus_, output); + } + } + + bool RestApiClient::GetAnswerJson(Json::Value& output) const + { + return ReadJson(output, answerBody_); + } +#endif + + +#if HAS_ORTHANC_PLUGIN_GENERIC_CALL_REST_API == 1 + uint16_t RestApiClient::GetHttpStatus() const + { + if (httpStatus_ == 0) + { + ORTHANC_PLUGINS_THROW_EXCEPTION(BadSequenceOfCalls); + } + else + { + return httpStatus_; + } + } +#endif + + +#if HAS_ORTHANC_PLUGIN_GENERIC_CALL_REST_API == 1 + bool RestApiClient::LookupAnswerHeader(std::string& value, + const std::string& key) const + { + if (httpStatus_ == 0) + { + ORTHANC_PLUGINS_THROW_EXCEPTION(BadSequenceOfCalls); + } + else + { + HttpHeaders::const_iterator found = answerHeaders_.find(key); + if (found == answerHeaders_.end()) + { + return false; + } + else + { + value = found->second; + return true; + } + } + } +#endif + + +#if HAS_ORTHANC_PLUGIN_GENERIC_CALL_REST_API == 1 + const std::string& RestApiClient::GetAnswerBody() const + { + if (httpStatus_ == 0) + { + ORTHANC_PLUGINS_THROW_EXCEPTION(BadSequenceOfCalls); + } + else + { + return answerBody_; + } + } +#endif }
--- a/RenderingPlugin/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h Thu May 30 21:31:37 2024 +0200 +++ b/RenderingPlugin/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,8 +3,8 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2024-2024 Orthanc Team SRL, Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2024-2025 Orthanc Team SRL, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -170,6 +170,8 @@ namespace OrthancPlugins { + typedef std::map<std::string, std::string> HttpHeaders; + typedef void (*RestCallback) (OrthancPluginRestOutput* output, const char* url, const OrthancPluginHttpRequest* request); @@ -257,7 +259,7 @@ bool applyPlugins); bool RestApiGet(const std::string& uri, - const std::map<std::string, std::string>& httpHeaders, + const HttpHeaders& httpHeaders, bool applyPlugins); bool RestApiPost(const std::string& uri, @@ -277,13 +279,13 @@ #if HAS_ORTHANC_PLUGIN_GENERIC_CALL_REST_API == 1 bool RestApiPost(const std::string& uri, const Json::Value& body, - const std::map<std::string, std::string>& httpHeaders, + const HttpHeaders& httpHeaders, bool applyPlugins); bool RestApiPost(const std::string& uri, const void* body, size_t bodySize, - const std::map<std::string, std::string>& httpHeaders, + const HttpHeaders& httpHeaders, bool applyPlugins); #endif @@ -581,7 +583,7 @@ bool RestApiGet(Json::Value& result, const std::string& uri, - const std::map<std::string, std::string>& httpHeaders, + const HttpHeaders& httpHeaders, bool applyPlugins); bool RestApiGetString(std::string& result, @@ -590,7 +592,7 @@ bool RestApiGetString(std::string& result, const std::string& uri, - const std::map<std::string, std::string>& httpHeaders, + const HttpHeaders& httpHeaders, bool applyPlugins); bool RestApiPost(std::string& result, @@ -609,7 +611,7 @@ bool RestApiPost(Json::Value& result, const std::string& uri, const Json::Value& body, - const std::map<std::string, std::string>& httpHeaders, + const HttpHeaders& httpHeaders, bool applyPlugins); #endif @@ -829,64 +831,64 @@ bool DoGet(MemoryBuffer& target, size_t index, const std::string& uri, - const std::map<std::string, std::string>& headers) const; + const HttpHeaders& headers) const; bool DoGet(MemoryBuffer& target, const std::string& name, const std::string& uri, - const std::map<std::string, std::string>& headers) const; + const HttpHeaders& headers) const; bool DoGet(Json::Value& target, size_t index, const std::string& uri, - const std::map<std::string, std::string>& headers) const; + const HttpHeaders& headers) const; bool DoGet(Json::Value& target, const std::string& name, const std::string& uri, - const std::map<std::string, std::string>& headers) const; + const HttpHeaders& headers) const; bool DoPost(MemoryBuffer& target, size_t index, const std::string& uri, const std::string& body, - const std::map<std::string, std::string>& headers) const; + const HttpHeaders& headers) const; bool DoPost(MemoryBuffer& target, const std::string& name, const std::string& uri, const std::string& body, - const std::map<std::string, std::string>& headers) const; + const HttpHeaders& headers) const; bool DoPost(Json::Value& target, size_t index, const std::string& uri, const std::string& body, - const std::map<std::string, std::string>& headers) const; + const HttpHeaders& headers) const; bool DoPost(Json::Value& target, const std::string& name, const std::string& uri, const std::string& body, - const std::map<std::string, std::string>& headers) const; + const HttpHeaders& headers) const; bool DoPut(size_t index, const std::string& uri, const std::string& body, - const std::map<std::string, std::string>& headers) const; + const HttpHeaders& headers) const; bool DoPut(const std::string& name, const std::string& uri, const std::string& body, - const std::map<std::string, std::string>& headers) const; + const HttpHeaders& headers) const; bool DoDelete(size_t index, const std::string& uri, - const std::map<std::string, std::string>& headers) const; + const HttpHeaders& headers) const; bool DoDelete(const std::string& name, const std::string& uri, - const std::map<std::string, std::string>& headers) const; + const HttpHeaders& headers) const; }; #endif @@ -996,8 +998,6 @@ class HttpClient : public boost::noncopyable { public: - typedef std::map<std::string, std::string> HttpHeaders; - class IRequestBody : public boost::noncopyable { public: @@ -1397,7 +1397,10 @@ }; // helper method to convert Http headers from the plugin SDK to a std::map -void GetHttpHeaders(std::map<std::string, std::string>& result, const OrthancPluginHttpRequest* request); +void GetHttpHeaders(HttpHeaders& result, const OrthancPluginHttpRequest* request); + +// helper method to re-serialize the get arguments from the SDK into a string +void SerializeGetArguments(std::string& output, const OrthancPluginHttpRequest* request); #if HAS_ORTHANC_PLUGIN_WEBDAV == 1 class IWebDavCollection : public boost::noncopyable @@ -1508,4 +1511,97 @@ void ExtendOrthancExplorer(const std::string& pluginIdentifier, const std::string& javascript); + + +#if HAS_ORTHANC_PLUGIN_GENERIC_CALL_REST_API == 1 + class RestApiClient : public boost::noncopyable + { + private: + // Request + OrthancPluginHttpMethod method_; + std::string path_; + HttpHeaders requestHeaders_; + std::string requestBody_; + bool afterPlugins_; + + // Answer + uint16_t httpStatus_; + HttpHeaders answerHeaders_; + std::string answerBody_; + + public: + RestApiClient(); + + // used to forward a call from the plugin to the core + RestApiClient(const char* url, + const OrthancPluginHttpRequest* request); + + void SetMethod(OrthancPluginHttpMethod method) + { + method_ = method; + } + + OrthancPluginHttpMethod GetMethod() const + { + return method_; + } + + void SetPath(const std::string& path) + { + path_ = path; + } + + const std::string& GetPath() const + { + return path_; + } + + void AddRequestHeader(const std::string& key, + const std::string& value); + + const HttpHeaders& GetRequestHeaders() const + { + return requestHeaders_; + } + + void SetRequestBody(const std::string& body) + { + requestBody_ = body; + } + + void SwapRequestBody(std::string& body) + { + requestBody_.swap(body); + } + + void SetAfterPlugins(bool afterPlugins) + { + afterPlugins_ = afterPlugins; + } + + bool IsAfterPlugins() const + { + return afterPlugins_; + } + + const std::string& GetRequestBody() const + { + return requestBody_; + } + + bool Execute(); + + // Execute and forward the response as is + void Forward(OrthancPluginContext* context, OrthancPluginRestOutput* output); + + uint16_t GetHttpStatus() const; + + bool LookupAnswerHeader(std::string& value, + const std::string& key) const; + + const std::string& GetAnswerBody() const; + + bool GetAnswerJson(Json::Value& output) const; + }; +#endif }
--- a/RenderingPlugin/Resources/Orthanc/Plugins/OrthancPluginException.h Thu May 30 21:31:37 2024 +0200 +++ b/RenderingPlugin/Resources/Orthanc/Plugins/OrthancPluginException.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,8 +3,8 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2024-2024 Orthanc Team SRL, Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2024-2025 Orthanc Team SRL, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License as
--- a/RenderingPlugin/Resources/Orthanc/Plugins/OrthancPluginsExports.cmake Thu May 30 21:31:37 2024 +0200 +++ b/RenderingPlugin/Resources/Orthanc/Plugins/OrthancPluginsExports.cmake Fri Apr 18 14:17:06 2025 +0200 @@ -2,8 +2,8 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2024-2024 Orthanc Team SRL, Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2024-2025 Orthanc Team SRL, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU General Public License as
--- a/RenderingPlugin/Resources/SyncOrthancFolder.py Thu May 30 21:31:37 2024 +0200 +++ b/RenderingPlugin/Resources/SyncOrthancFolder.py Fri Apr 18 14:17:06 2025 +0200 @@ -4,7 +4,7 @@ # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium # Copyright (C) 2017-2023 Osimis S.A., Belgium -# Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium +# Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU General Public License as
--- a/RenderingPlugin/Sources/OrthancPluginConnection.cpp Thu May 30 21:31:37 2024 +0200 +++ b/RenderingPlugin/Sources/OrthancPluginConnection.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License as
--- a/RenderingPlugin/Sources/OrthancPluginConnection.h Thu May 30 21:31:37 2024 +0200 +++ b/RenderingPlugin/Sources/OrthancPluginConnection.h Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License as
--- a/RenderingPlugin/Sources/Plugin.cpp Thu May 30 21:31:37 2024 +0200 +++ b/RenderingPlugin/Sources/Plugin.cpp Fri Apr 18 14:17:06 2025 +0200 @@ -3,7 +3,7 @@ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium - * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * Copyright (C) 2021-2025 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License as
--- a/TODO Thu May 30 21:31:37 2024 +0200 +++ b/TODO Fri Apr 18 14:17:06 2025 +0200 @@ -1,4 +1,3 @@ -Update OrthancFramework to 1.12.1 to benefit from https://orthanc.uclouvain.be/hg/orthanc/rev/57c0fba5e5c7 ====================== == Stone Web viewer == @@ -8,6 +7,9 @@ Improvements ------------ +* Update OrthancFramework to 1.12.1 to benefit from: + https://orthanc.uclouvain.be/hg/orthanc/rev/57c0fba5e5c7 + * Save/load annotations as attachments of their parent series (including detection of collisions thanks to revisions). https://orthanc.uclouvain.be/book/faq/features.html#metadata-attachments @@ -43,6 +45,13 @@ * Order the studies in the left column according to their Instance Number (0020,0013). Suggestion by Joseph Maratt. +* Open using Orthanc parent/study/series identifier, or using DICOM + accession number: + https://discourse.orthanc-server.org/t/stone-web-viewer-what-is-the-link-to-use-through-the-access-number/4808 + +* Add configuration options to disable annotations and measurements: + https://discourse.orthanc-server.org/t/niveles-de-acceso-y-permisos-a-funcionalidades-del-stone-web-viewer/5106 + ------------ Known issues