[med-svn] [Git][med-team/sight][wip-24.1.0] New version 24.1.0 and fix for #1075792
Flavien Bridault (@fbridault-guest)
gitlab at salsa.debian.org
Tue Jul 16 05:29:47 BST 2024
Flavien Bridault pushed to branch wip-24.1.0 at Debian Med / sight
Commits:
69121d4e by Flavien Bridault at 2024-07-16T06:28:57+02:00
New version 24.1.0 and fix for #1075792
- - - - -
16 changed files:
- debian/changelog
- debian/control
- debian/libsight.install
- debian/not-installed
- + debian/patches/dcmktk3.6.8.patch
- debian/patches/fix-itk-build.patch
- debian/patches/fix-multi-arch-folder-detection.patch
- debian/patches/gcc13.patch
- debian/patches/lintian_warnings.patch
- debian/patches/move-sightlog-in-libexec.patch
- + debian/patches/opencv46.patch
- debian/patches/series
- debian/patches/vtk9.3.patch
- debian/rules
- debian/sightcalibrator.install
- debian/sightviewer.install
Changes:
=====================================
debian/changelog
=====================================
@@ -1,3 +1,10 @@
+sight (24.1.0-0) UNRELEASED; urgency=medium
+
+ * New upstream version
+ * d/p/: Added patch for dcmtk 3.6.8. (Closes: #1075792)
+
+ -- Flavien BRIDAULT <flavien.bridault at ircad.fr> Mon, 24 Jun 2024 15:47:24 +0200
+
sight (23.1.0-3) unstable; urgency=medium
* Team upload.
=====================================
debian/control
=====================================
@@ -22,6 +22,7 @@ Build-Depends: cmake (>=3.19.0),
libopenigtlink-dev,
libqt5opengl5-dev,
libqt5x11extras5-dev,
+ libqt5svg5-dev,
libvtk9-dev,
libvtkgdcm-dev,
libvtk9-qt-dev,
@@ -80,6 +81,7 @@ Depends: libsight (= ${binary:Version}),
libhdf5-dev,
libqt5opengl5-dev,
libqt5x11extras5-dev,
+ libqt5svg5-dev,
qttools5-dev,
libvtk9-dev,
libgdcm-dev,
=====================================
debian/libsight.install
=====================================
@@ -2,7 +2,8 @@
usr/bin/sightrun.bin => /usr/bin/sightrun
usr/bin/sightlog.bin => /usr/libexec/sightlog
usr/lib/*/libsight*.so.*
-usr/share/sight/[a-u]*
+usr/share/sight/[a-n]*
+usr/share/sight/[t-u]*
usr/share/sight/viz_qt3d
usr/share/sight/viz_scene3d/*.cfg
usr/share/sight/viz_scene3d/Media/compositors
=====================================
debian/not-installed
=====================================
@@ -1,21 +1,12 @@
-usr/bin/archiveextractor
+usr/bin/archive_extractor
usr/bin/ex*
usr/bin/tuto*
-usr/bin/DicomAnonymizer*
-usr/bin/NetworkProxy*
-usr/bin/networkproxy
-usr/bin/VersionGenerator*
-usr/bin/arucoMarker*
-usr/bin/arucomarker
-usr/bin/calDataGenerator*
-usr/bin/caldatagenerator
-usr/bin/charucoBoard*
-usr/bin/charucoboard
-usr/bin/dicomanonymizer*
+usr/bin/dicom_anonymizer*
+usr/bin/network_proxy*
+usr/bin/aruco_marker*
usr/bin/dicomxplorer*
usr/bin/sightlog
usr/bin/sightrun
-usr/bin/versiongenerator*
usr/share/sight/viz_scene3d/Media/fonts/DejaVuSans.ttf
-usr/share/sight/NetworkProxy*
-usr/share/sight/ArchiveExtractor*
+usr/share/sight/network_proxy*
+usr/share/sight/archive_extractor*
=====================================
debian/patches/dcmktk3.6.8.patch
=====================================
@@ -0,0 +1,16 @@
+Author: Flavien Bridault <fbridault at ircad.fr>
+Description: Remove deprecated transfer syntaxes, not used anyway.
+Forwarded: https://git.ircad.fr/sight/sight/-/issues/1295
+Bug-Debian: https://bugs.debian.org/1075792
+
+--- sight.orig/libs/io/dimse/series_enquirer.cpp
++++ sight/libs/io/dimse/series_enquirer.cpp
+@@ -137,8 +137,6 @@
+ transfer_syntaxes.DCMTK_EMPLACE_BACK(UID_JPEG2000Part2MulticomponentImageCompressionTransferSyntax);
+ transfer_syntaxes.DCMTK_EMPLACE_BACK(UID_JPIPReferencedTransferSyntax);
+ transfer_syntaxes.DCMTK_EMPLACE_BACK(UID_JPIPReferencedDeflateTransferSyntax);
+- transfer_syntaxes.DCMTK_EMPLACE_BACK(UID_RFC2557MIMEEncapsulationTransferSyntax);
+- transfer_syntaxes.DCMTK_EMPLACE_BACK(UID_XMLEncodingTransferSyntax);
+
+ // Add Verification SOP Class presentation context.
+ this->addPresentationContext(UID_VerificationSOPClass, transfer_syntaxes);
=====================================
debian/patches/fix-itk-build.patch
=====================================
@@ -12,9 +12,24 @@ Description: Remove service that requires ITKFFT which is not available on i386
if(ITK_VERSION_MAJOR GREATER 4)
find_package(ITK QUIET COMPONENTS ITKSmoothing ITKRegistrationMethodsv4 REQUIRED)
---- sight.orig/libs/filter/image/MIPMatchingRegistration.hpp
-+++ sight/libs/filter/image/MIPMatchingRegistration.hpp
-@@ -34,7 +34,6 @@
+--- sight.orig/modules/filter/image/rc/plugin.xml
++++ sight/modules/filter/image/rc/plugin.xml
+@@ -56,12 +56,6 @@
+ </extension>
+
+ <extension implements="sight::service::extension::factory">
+- <type>sight::service::registerer</type>
+- <service>sight::module::filter::image::mip_matching_registration</service>
+- <desc>This service uses a fast registration algorithm to quickly register two images together if the transform</desc>
+- </extension>
+-
+- <extension implements="sight::service::extension::factory">
+ <type>sight::service::filter</type>
+ <service>sight::module::filter::image::matrix_regressor</service>
+ <object>sight::data::vector</object>
+--- sight.orig/libs/filter/image/mip_matching_registration.hpp
++++ sight/libs/filter/image/mip_matching_registration.hpp
+@@ -35,7 +35,6 @@
#include <io/itk/itk.hpp>
@@ -22,12 +37,12 @@ Description: Remove service that requires ITKFFT which is not available on i386
#include <itkIdentityTransform.h>
#include <itkLinearInterpolateImageFunction.h>
#include <itkMaximumProjectionImageFilter.h>
---- sight.orig/modules/filter/image/SMIPMatchingRegistration.cpp
+--- sight.orig/libs/filter/image/test/ut/mip_matching_registration_test.cpp
+++ /dev/null
-@@ -1,97 +0,0 @@
+@@ -1,189 +0,0 @@
-/************************************************************************
- *
-- * Copyright (C) 2017-2022 IRCAD France
+- * Copyright (C) 2017-2023 IRCAD France
- * Copyright (C) 2017-2020 IHU Strasbourg
- *
- * This file is part of Sight.
@@ -47,88 +62,180 @@ Description: Remove service that requires ITKFFT which is not available on i386
- *
- ***********************************************************************/
-
--#include "SMIPMatchingRegistration.hpp"
+-#include "mip_matching_registration_test.hpp"
-
--#include <core/tools/Dispatcher.hpp>
+-#include "helper.hpp"
-
--#include <filter/image/MIPMatchingRegistration.hpp>
--#include <filter/image/Resampler.hpp>
+-#include <core/tools/dispatcher.hpp>
-
--#include <geometry/data/Matrix4.hpp>
+-#include <data/helper/medical_image.hpp>
+-#include <data/matrix4.hpp>
-
--#include <service/macros.hpp>
+-#include <filter/image/metric.hpp>
+-#include <filter/image/mip_matching_registration.hpp>
+-#include <filter/image/resampler.hpp>
-
--#include <functional>
--#include <numeric>
+-#include <io/itk/itk.hpp>
-
--namespace sight::module::filter::image
--{
+-#include <utest_data/generator/image.hpp>
-
--SMIPMatchingRegistration::SMIPMatchingRegistration() noexcept =
-- default;
+-#include <glm/gtc/matrix_access.hpp>
+-#include <glm/gtc/matrix_transform.hpp>
+-#include <glm/gtc/quaternion.hpp>
+-#include <glm/mat4x4.hpp>
-
--//------------------------------------------------------------------------------
+-#include <itkImage.h>
+-#include <itkRegionOfInterestImageFilter.h>
+-#include <itkResampleImageFilter.h>
-
--SMIPMatchingRegistration::~SMIPMatchingRegistration() noexcept =
-- default;
+-CPPUNIT_TEST_SUITE_REGISTRATION(sight::filter::image::ut::mip_matching_registration_test);
+-
+-namespace sight::filter::image::ut
+-{
-
-//------------------------------------------------------------------------------
-
--void SMIPMatchingRegistration::starting()
+-void mip_matching_registration_test::setUp()
-{
-}
-
-//------------------------------------------------------------------------------
-
--void SMIPMatchingRegistration::stopping()
+-void mip_matching_registration_test::tearDown()
-{
-}
-
-//------------------------------------------------------------------------------
-
--void SMIPMatchingRegistration::configuring()
+-void mip_matching_registration_test::identity_test()
-{
+- data::image::csptr moving = create_sphere_image<std::uint16_t, 3>();
+- data::image::csptr fixed = data::object::copy(moving);
+- data::matrix4::sptr mat = std::make_shared<data::matrix4>();
+-
+- filter::image::registration_dispatch::parameters params;
+- params.fixed = fixed;
+- params.moving = moving;
+- params.transform = std::make_shared<data::matrix4>();
+- core::type type = moving->type();
+- core::tools::dispatcher<core::tools::supported_dispatcher_types, registration_dispatch>::invoke(type, params);
+-
+- for(std::size_t i = 0 ; i != 3 ; ++i)
+- {
+- CPPUNIT_ASSERT_EQUAL_MESSAGE(
+- "Translation value is not equal to '0' ",
+- 0.,
+- (*params.transform)(i, 3)
+- );
+- }
-}
-
-//------------------------------------------------------------------------------
-
--void SMIPMatchingRegistration::updating()
+-void mip_matching_registration_test::translate_transform_test()
-{
-- const auto fixed = m_target.lock();
-- const auto moving = m_source.lock();
-- auto transform = m_transform.lock();
--
-- SIGHT_ASSERT("Missing required input 'fixed'", fixed);
-- SIGHT_ASSERT("Missing required input 'moving'", moving);
-- SIGHT_ASSERT("Missing required inout 'transform'", transform);
--
-- sight::filter::image::RegistrationDispatch::Parameters params;
-- params.fixed = fixed.get_shared();
-- params.moving = moving.get_shared();
-- params.transform = transform.get_shared();
+- data::image::csptr moving = create_sphere_image<std::uint16_t, 3>();
+- data::image::sptr fixed = std::make_shared<data::image>();
-
-- core::Type type = moving->getType();
-- core::tools::Dispatcher<core::tools::SupportedDispatcherTypes, sight::filter::image::RegistrationDispatch>
-- ::invoke(type, params);
+- data::matrix4::sptr transform = std::make_shared<data::matrix4>();
+- (*transform)(0, 3) = 4.;
+- (*transform)(1, 3) = 12.;
+- (*transform)(2, 3) = 7.;
+- sight::filter::image::resampler::resample(moving, fixed, transform);
-
-- transform->signal<data::Matrix4::ModifiedSignalType>(data::Matrix4::s_MODIFIED_SIG)->asyncEmit();
+- std::array<double, 3> expected {{4., 12., 7.}};
+- filter::image::registration_dispatch::parameters params;
+- params.fixed = fixed;
+- params.moving = moving;
+- params.transform = std::make_shared<data::matrix4>();
+- core::type type = moving->type();
+- core::tools::dispatcher<core::tools::supported_dispatcher_types, registration_dispatch>::invoke(type, params);
+- for(std::size_t i = 0 ; i < 3 ; ++i)
+- {
+- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
+- "Actual transform does not match expected results",
+- expected[i],
+- (*params.transform)(i, 3),
+- 1e-2
+- );
+- }
-}
-
-//------------------------------------------------------------------------------
-
--void SMIPMatchingRegistration::computeRegistration(core::HiResClock::HiResClockType /*timestamp*/)
+-void mip_matching_registration_test::translate_transform_with_scales_test()
-{
-- this->updating();
+- using image_t = itk::Image<std::uint16_t, 3>;
+-
+- // Create the moving image
+- auto moving_spacing = image_t::SpacingType(1.);
+- moving_spacing[1] = 1.3;
+- data::image::sptr moving = create_sphere_image<std::uint16_t, 3>(moving_spacing);
+- data::image::sptr fixed = std::make_shared<data::image>();
+- moving->set_origin({107., 50., -30.});
+-
+- // Translate the image a bit
+- std::array<double, 3> v_trans {{4., 19., 7.}};
+- data::matrix4::sptr transform = std::make_shared<data::matrix4>();
+- (*transform)(0, 3) = v_trans[0];
+- (*transform)(1, 3) = v_trans[1];
+- (*transform)(2, 3) = v_trans[2];
+- sight::filter::image::resampler::resample(moving, fixed, transform);
+- auto fixed_origin = std::array<double, 3> {{20., 10., 35.}};
+- auto moving_origin = moving->origin();
+- fixed->set_origin(fixed_origin);
+- std::array<float, 3> expected {
+- {
+- float(moving_origin[0] + v_trans[0] - fixed_origin[0]),
+- float(moving_origin[1] + v_trans[1] - fixed_origin[1]),
+- float(moving_origin[2] + v_trans[2] - fixed_origin[2])
+- }
+- };
+-
+- auto itk_fixed = io::itk::move_to_itk<image_t>(fixed);
+-
+- // Resample the image to get a different spacing
+- image_t::SizeType new_size {};
+- image_t::SpacingType new_spacing(2.);
+- for(uint8_t i = 0 ; i != 3 ; ++i)
+- {
+- new_size[i] = static_cast<unsigned int>(moving_spacing[i] / new_spacing[i] * double(moving->size()[i]));
+- }
+-
+- auto resample = itk::ResampleImageFilter<image_t, image_t>::New();
+- resample->SetInput(itk_fixed);
+- resample->SetSize(new_size);
+- resample->SetOutputSpacing(new_spacing);
+- resample->SetOutputOrigin(itk_fixed->GetOrigin());
+- resample->Update();
+- auto* resampled = resample->GetOutput();
+- auto resampled_f4s_fixed = io::itk::move_from_itk<image_t>(resampled, true);
+-
+- filter::image::registration_dispatch::parameters params;
+- params.fixed = resampled_f4s_fixed;
+- params.moving = moving;
+- params.transform = std::make_shared<data::matrix4>();
+- core::type type = moving->type();
+- core::tools::dispatcher<core::tools::supported_dispatcher_types, registration_dispatch>::invoke(type, params);
+- for(std::size_t i = 0 ; i < 3 ; ++i)
+- {
+- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
+- "Actual transform does not match expected results",
+- double(expected[i]),
+- (*params.transform)(i, 3),
+- double(moving_spacing[i])
+- );
+- }
-}
-
--} // namespace sight::module::filter::image
---- sight.orig/modules/filter/image/SMIPMatchingRegistration.hpp
+-} // namespace sight::filter::image::ut
+--- sight.orig/libs/filter/image/test/ut/mip_matching_registration_test.hpp
+++ /dev/null
-@@ -1,119 +0,0 @@
+@@ -1,48 +0,0 @@
-/************************************************************************
- *
-- * Copyright (C) 2018-2022 IRCAD France
-- * Copyright (C) 2018-2019 IHU Strasbourg
+- * Copyright (C) 2021-2023 IRCAD France
+- * Copyright (C) 2018 IHU Strasbourg
- *
- * This file is part of Sight.
- *
@@ -149,107 +256,36 @@ Description: Remove service that requires ITKFFT which is not available on i386
-
-#pragma once
-
--#include "modules/filter/image/config.hpp"
--
--#include <data/Image.hpp>
--#include <data/Matrix4.hpp>
--
--#include <service/IRegisterer.hpp>
+-#include <cppunit/extensions/HelperMacros.h>
-
--namespace sight::module::filter::image
+-namespace sight::filter::image::ut
-{
-
--/**
-- * @brief This service uses a fast registration algorithm to quickly register two images together if the transform
-- * between both is pure translation.
-- *
-- * @section Signals Signals
-- *
-- * @section Slots Slots
-- * - \b update: compute the registration
-- *
-- * @section XML XML Configuration
-- *
-- * @code{.xml}
-- <service uid="..." type="sight::module::filter::image::SFastRegistration">
-- <in key="source" uid="..." />
-- <in key="target" uid="..." />
-- <in key="transform" uid="..." />
-- </service>
-- * @endcode
-- *
-- * @subsection Input Input
-- * - \b source [sight::data::Image]: Input image that will be aligned to the target.
-- * - \b target [sight::data::Image]: Input image to which the source will be aligned.
-- *
-- * @subsection In-Out In-Out
-- * - \b transform [sight::data::Matrix4]: initial registration. The computed registration will be
-- * concatenated to the initial registration matrix.
-- */
--class MODULE_FILTER_IMAGE_CLASS_API SMIPMatchingRegistration : public service::IRegisterer
+-class mip_matching_registration_test : public CPPUNIT_NS::TestFixture
-{
--public:
--
-- SIGHT_DECLARE_SERVICE(SMIPMatchingRegistration, service::IRegisterer);
--
-- /**
-- * @brief Constructor
-- */
-- MODULE_FILTER_IMAGE_API SMIPMatchingRegistration() noexcept;
-- /**
-- * @brief Destructor
-- */
-- MODULE_FILTER_IMAGE_API ~SMIPMatchingRegistration() noexcept override;
--
--protected:
--
-- /**
-- * @brief Starts the service.
-- *
-- * @throw core::tools::Failed
-- */
-- MODULE_FILTER_IMAGE_API void starting() override;
--
-- /**
-- * @brief Stops the service.
-- *
-- * @throw core::tools::Failed
-- */
-- MODULE_FILTER_IMAGE_API void stopping() override;
--
-- /**
-- * @brief Configures the service.
-- *
-- * @throw core::tools::Failed
-- */
-- MODULE_FILTER_IMAGE_API void configuring() override;
--
-- /**
-- * @brief Compute the registration.
-- *
-- * @throw core::tools::Failed
-- */
-- MODULE_FILTER_IMAGE_API void updating() override;
+-CPPUNIT_TEST_SUITE(mip_matching_registration_test);
+-CPPUNIT_TEST(identity_test);
+-CPPUNIT_TEST(translate_transform_test);
+-CPPUNIT_TEST(translate_transform_with_scales_test);
+-CPPUNIT_TEST_SUITE_END();
-
-- /**
-- * @brief Compute the registration by calling the `update` slot. The timestamp parameter is discarded.
-- */
-- MODULE_FILTER_IMAGE_API void computeRegistration(core::HiResClock::HiResClockType timestamp) override;
+-public:
-
--private:
+- void setUp() override;
+- void tearDown() override;
-
-- sight::data::ptr<sight::data::Image, sight::data::Access::in> m_source {this, "fixed"};
-- sight::data::ptr<sight::data::Image, sight::data::Access::in> m_target {this, "moving"};
-- sight::data::ptr<sight::data::Matrix4, sight::data::Access::inout> m_transform {this, "transform"};
+- static void identity_test();
+- static void translate_transform_test();
+- static void translate_transform_with_scales_test();
-};
-
--} // namespace sight::module::filter::image
---- sight.orig/libs/filter/image/test/tu/MIPMatchingRegistrationTest.cpp
+-} // namespace sight::filter::image::ut
+--- sight.orig/modules/filter/image/mip_matching_registration.cpp
+++ /dev/null
-@@ -1,189 +0,0 @@
+@@ -1,97 +0,0 @@
-/************************************************************************
- *
-- * Copyright (C) 2017-2022 IRCAD France
+- * Copyright (C) 2017-2023 IRCAD France
- * Copyright (C) 2017-2020 IHU Strasbourg
- *
- * This file is part of Sight.
@@ -269,180 +305,88 @@ Description: Remove service that requires ITKFFT which is not available on i386
- *
- ***********************************************************************/
-
--#include "MIPMatchingRegistrationTest.hpp"
--
--#include "helper.hpp"
--
--#include <core/tools/Dispatcher.hpp>
+-#include "mip_matching_registration.hpp"
-
--#include <data/helper/MedicalImage.hpp>
--#include <data/Matrix4.hpp>
+-#include <core/tools/dispatcher.hpp>
-
--#include <filter/image/Metric.hpp>
--#include <filter/image/MIPMatchingRegistration.hpp>
--#include <filter/image/Resampler.hpp>
+-#include <filter/image/mip_matching_registration.hpp>
+-#include <filter/image/resampler.hpp>
-
--#include <io/itk/itk.hpp>
--
--#include <utestData/generator/Image.hpp>
+-#include <geometry/data/matrix4.hpp>
-
--#include <glm/gtc/matrix_access.hpp>
--#include <glm/gtc/matrix_transform.hpp>
--#include <glm/gtc/quaternion.hpp>
--#include <glm/mat4x4.hpp>
--
--#include <itkImage.h>
--#include <itkRegionOfInterestImageFilter.h>
--#include <itkResampleImageFilter.h>
+-#include <service/macros.hpp>
-
--CPPUNIT_TEST_SUITE_REGISTRATION(sight::filter::image::ut::MIPMatchingRegistrationTest);
+-#include <functional>
+-#include <numeric>
-
--namespace sight::filter::image::ut
+-namespace sight::module::filter::image
-{
-
+-mip_matching_registration::mip_matching_registration() noexcept =
+- default;
+-
-//------------------------------------------------------------------------------
-
--void MIPMatchingRegistrationTest::setUp()
--{
--}
+-mip_matching_registration::~mip_matching_registration() noexcept =
+- default;
-
-//------------------------------------------------------------------------------
-
--void MIPMatchingRegistrationTest::tearDown()
+-void mip_matching_registration::starting()
-{
-}
-
-//------------------------------------------------------------------------------
-
--void MIPMatchingRegistrationTest::identityTest()
+-void mip_matching_registration::stopping()
-{
-- data::Image::csptr moving = createSphereImage<std::uint16_t, 3>();
-- data::Image::csptr fixed = data::Object::copy(moving);
-- data::Matrix4::sptr mat = data::Matrix4::New();
--
-- filter::image::RegistrationDispatch::Parameters params;
-- params.fixed = fixed;
-- params.moving = moving;
-- params.transform = data::Matrix4::New();
-- core::Type type = moving->getType();
-- core::tools::Dispatcher<core::tools::SupportedDispatcherTypes, RegistrationDispatch>::invoke(type, params);
--
-- for(std::size_t i = 0 ; i != 3 ; ++i)
-- {
-- CPPUNIT_ASSERT_EQUAL_MESSAGE(
-- "Translation value is not equal to '0' ",
-- 0.,
-- (*params.transform)(i, 3)
-- );
-- }
-}
-
-//------------------------------------------------------------------------------
-
--void MIPMatchingRegistrationTest::translateTransformTest()
+-void mip_matching_registration::configuring()
-{
-- data::Image::csptr moving = createSphereImage<std::uint16_t, 3>();
-- data::Image::sptr fixed = data::Image::New();
--
-- data::Matrix4::sptr transform = data::Matrix4::New();
-- (*transform)(0, 3) = 4.;
-- (*transform)(1, 3) = 12.;
-- (*transform)(2, 3) = 7.;
-- sight::filter::image::Resampler::resample(moving, fixed, transform);
--
-- std::array<double, 3> expected {{4., 12., 7.}};
-- filter::image::RegistrationDispatch::Parameters params;
-- params.fixed = fixed;
-- params.moving = moving;
-- params.transform = data::Matrix4::New();
-- core::Type type = moving->getType();
-- core::tools::Dispatcher<core::tools::SupportedDispatcherTypes, RegistrationDispatch>::invoke(type, params);
-- for(std::size_t i = 0 ; i < 3 ; ++i)
-- {
-- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
-- "Actual transform does not match expected results",
-- expected[i],
-- (*params.transform)(i, 3),
-- 1e-2
-- );
-- }
-}
-
-//------------------------------------------------------------------------------
-
--void MIPMatchingRegistrationTest::translateTransformWithScalesTest()
+-void mip_matching_registration::updating()
-{
-- using ImageType = itk::Image<std::uint16_t, 3>;
+- const auto fixed = m_target.lock();
+- const auto moving = m_source.lock();
+- auto transform = m_transform.lock();
-
-- // Create the moving image
-- auto movingSpacing = ImageType::SpacingType(1.);
-- movingSpacing[1] = 1.3;
-- data::Image::sptr moving = createSphereImage<std::uint16_t, 3>(movingSpacing);
-- data::Image::sptr fixed = data::Image::New();
-- moving->setOrigin({107., 50., -30.});
+- SIGHT_ASSERT("Missing required input 'fixed'", fixed);
+- SIGHT_ASSERT("Missing required input 'moving'", moving);
+- SIGHT_ASSERT("Missing required inout 'transform'", transform);
-
-- // Translate the image a bit
-- std::array<double, 3> vTrans {{4., 19., 7.}};
-- data::Matrix4::sptr transform = data::Matrix4::New();
-- (*transform)(0, 3) = vTrans[0];
-- (*transform)(1, 3) = vTrans[1];
-- (*transform)(2, 3) = vTrans[2];
-- sight::filter::image::Resampler::resample(moving, fixed, transform);
-- auto fixedOrigin = std::array<double, 3> {{20., 10., 35.}};
-- auto movingOrigin = moving->getOrigin();
-- fixed->setOrigin(fixedOrigin);
-- std::array<float, 3> expected {
-- {
-- float(movingOrigin[0] + vTrans[0] - fixedOrigin[0]),
-- float(movingOrigin[1] + vTrans[1] - fixedOrigin[1]),
-- float(movingOrigin[2] + vTrans[2] - fixedOrigin[2])
-- }
-- };
+- sight::filter::image::registration_dispatch::parameters params;
+- params.fixed = fixed.get_shared();
+- params.moving = moving.get_shared();
+- params.transform = transform.get_shared();
-
-- auto itkFixed = io::itk::moveToItk<ImageType>(fixed);
+- core::type type = moving->type();
+- core::tools::dispatcher<core::tools::supported_dispatcher_types, sight::filter::image::registration_dispatch>
+- ::invoke(type, params);
-
-- // Resample the image to get a different spacing
-- ImageType::SizeType newSize {};
-- ImageType::SpacingType newSpacing(2.);
-- for(uint8_t i = 0 ; i != 3 ; ++i)
-- {
-- newSize[i] = static_cast<unsigned int>(movingSpacing[i] / newSpacing[i] * double(moving->getSize()[i]));
-- }
+- transform->signal<data::matrix4::modified_signal_t>(data::matrix4::MODIFIED_SIG)->async_emit();
+-}
-
-- auto resample = itk::ResampleImageFilter<ImageType, ImageType>::New();
-- resample->SetInput(itkFixed);
-- resample->SetSize(newSize);
-- resample->SetOutputSpacing(newSpacing);
-- resample->SetOutputOrigin(itkFixed->GetOrigin());
-- resample->Update();
-- auto* resampled = resample->GetOutput();
-- auto resampledF4sFixed = io::itk::moveFromItk<ImageType>(resampled, true);
+-//------------------------------------------------------------------------------
-
-- filter::image::RegistrationDispatch::Parameters params;
-- params.fixed = resampledF4sFixed;
-- params.moving = moving;
-- params.transform = data::Matrix4::New();
-- core::Type type = moving->getType();
-- core::tools::Dispatcher<core::tools::SupportedDispatcherTypes, RegistrationDispatch>::invoke(type, params);
-- for(std::size_t i = 0 ; i < 3 ; ++i)
-- {
-- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
-- "Actual transform does not match expected results",
-- double(expected[i]),
-- (*params.transform)(i, 3),
-- double(movingSpacing[i])
-- );
-- }
+-void mip_matching_registration::compute_registration(core::clock::type /*timestamp*/)
+-{
+- this->updating();
-}
-
--} // namespace sight::filter::image::ut
---- sight.orig/libs/filter/image/test/tu/MIPMatchingRegistrationTest.hpp
+-} // namespace sight::module::filter::image
+--- sight.orig/modules/filter/image/mip_matching_registration.hpp
+++ /dev/null
-@@ -1,48 +0,0 @@
+@@ -1,117 +0,0 @@
-/************************************************************************
- *
-- * Copyright (C) 2021-2022 IRCAD France
-- * Copyright (C) 2018 IHU Strasbourg
+- * Copyright (C) 2018-2024 IRCAD France
+- * Copyright (C) 2018-2019 IHU Strasbourg
- *
- * This file is part of Sight.
- *
@@ -463,49 +407,160 @@ Description: Remove service that requires ITKFFT which is not available on i386
-
-#pragma once
-
--#include <cppunit/extensions/HelperMacros.h>
+-#include <data/image.hpp>
+-#include <data/matrix4.hpp>
-
--namespace sight::filter::image::ut
--{
+-#include <service/registerer.hpp>
-
--class MIPMatchingRegistrationTest : public CPPUNIT_NS::TestFixture
+-namespace sight::module::filter::image
-{
--CPPUNIT_TEST_SUITE(MIPMatchingRegistrationTest);
--CPPUNIT_TEST(identityTest);
--CPPUNIT_TEST(translateTransformTest);
--CPPUNIT_TEST(translateTransformWithScalesTest);
--CPPUNIT_TEST_SUITE_END();
-
+-/**
+- * @brief This service uses a fast registration algorithm to quickly register two images together if the transform
+- * between both is pure translation.
+- *
+- * @section Signals Signals
+- *
+- * @section Slots Slots
+- * - \b update: compute the registration
+- *
+- * @section XML XML Configuration
+- *
+- * @code{.xml}
+- <service uid="..." type="sight::module::filter::image::SFastRegistration">
+- <in key="source" uid="..." />
+- <in key="target" uid="..." />
+- <in key="transform" uid="..." />
+- </service>
+- * @endcode
+- *
+- * @subsection Input Input
+- * - \b source [sight::data::image]: Input image that will be aligned to the target.
+- * - \b target [sight::data::image]: Input image to which the source will be aligned.
+- *
+- * @subsection In-Out In-Out
+- * - \b transform [sight::data::matrix4]: initial registration. The computed registration will be
+- * concatenated to the initial registration matrix.
+- */
+-class mip_matching_registration : public service::registerer
+-{
-public:
-
-- void setUp() override;
-- void tearDown() override;
+- SIGHT_DECLARE_SERVICE(mip_matching_registration, service::registerer);
+-
+- /**
+- * @brief Constructor
+- */
+- mip_matching_registration() noexcept;
+- /**
+- * @brief Destructor
+- */
+- ~mip_matching_registration() noexcept override;
+-
+-protected:
-
-- static void identityTest();
-- static void translateTransformTest();
-- static void translateTransformWithScalesTest();
+- /**
+- * @brief Starts the service.
+- *
+- * @throw core::tools::failed
+- */
+- void starting() override;
+-
+- /**
+- * @brief Stops the service.
+- *
+- * @throw core::tools::failed
+- */
+- void stopping() override;
+-
+- /**
+- * @brief Configures the service.
+- *
+- * @throw core::tools::failed
+- */
+- void configuring() override;
+-
+- /**
+- * @brief Compute the registration.
+- *
+- * @throw core::tools::failed
+- */
+- void updating() override;
+-
+- /**
+- * @brief Compute the registration by calling the `update` slot. The timestamp parameter is discarded.
+- */
+- void compute_registration(core::clock::type _timestamp) override;
+-
+-private:
+-
+- sight::data::ptr<sight::data::image, sight::data::access::in> m_source {this, "fixed"};
+- sight::data::ptr<sight::data::image, sight::data::access::in> m_target {this, "moving"};
+- sight::data::ptr<sight::data::matrix4, sight::data::access::inout> m_transform {this, "transform"};
-};
-
--} // namespace sight::filter::image::ut
---- sight.orig/modules/filter/image/rc/plugin.xml
-+++ sight/modules/filter/image/rc/plugin.xml
-@@ -57,12 +57,6 @@
- </extension>
+-} // namespace sight::module::filter::image
+--- sight.orig/libs/filter/image/spheroid_extraction.cpp
++++ sight/libs/filter/image/spheroid_extraction.cpp
+@@ -57,10 +57,9 @@
+ using image_t = typename itk::Image<PIXELTYPE, 3>;
+ using binary_image_t = typename itk::Image<std::uint16_t, 3>;
+
+- typename image_t::Pointer inputImage = io::itk::move_to_itk<image_t>(params.inputImage);
++ auto inputImage = io::itk::move_to_itk<image_t>(params.inputImage);
+
+- typename itk::BinaryThresholdImageFilter<image_t, binary_image_t>::Pointer thresholdFilter =
+- itk::BinaryThresholdImageFilter<image_t, binary_image_t>::New();
++ auto thresholdFilter = itk::BinaryThresholdImageFilter<image_t, binary_image_t>::New();
+
+ auto threshold = PIXELTYPE(params.threshold);
+ thresholdFilter->SetLowerThreshold(threshold);
+@@ -76,25 +75,24 @@
+ itk::ConnectedComponentImageFilter<binary_image_t, binary_image_t>::Pointer cc =
+ itk::ConnectedComponentImageFilter<binary_image_t, binary_image_t>::New();
+
+- cc->set_input(thresholdFilter->GetOutput());
++ cc->SetInput(thresholdFilter->GetOutput());
+ cc->FullyConnectedOn();
+ cc->Update();
+
+ using label_stats_filter_t = itk::LabelGeometryImageFilter<binary_image_t, image_t>;
+- typename label_stats_filter_t::Pointer labelGeometryFilter = label_stats_filter_t::New();
++ auto labelGeometryFilter = label_stats_filter_t::New();
+
+ labelGeometryFilter->SetInput(cc->GetOutput());
+ labelGeometryFilter->SetIntensityInput(inputImage);
+ labelGeometryFilter->Update();
+
+- typename label_stats_filter_t::labels_t labels = labelGeometryFilter->GetLabels();
++ auto labels = labelGeometryFilter->GetLabels();
+
+ SIGHT_DEBUG("Number of labels : " << labelGeometryFilter->GetNumberOfLabels());
+
+- typename label_stats_filter_t::labels_t::iterator labelsIt;
+- for(labelsIt = labels.begin() ; labelsIt != labels.end() ; ++labelsIt)
++ for(auto labelsIt = labels.begin() ; labelsIt != labels.end() ; ++labelsIt)
+ {
+- typename label_stats_filter_t::label_pixel_t labelValue = *labelsIt;
++ auto labelValue = *labelsIt;
+
+ const double radiusMean = (params.radiusMax + params.radiusMin) / 2.;
+ const double meanElongation = (params.elongationMax + params.elongationMin) / 2.;
+@@ -133,7 +131,7 @@
+ }
+
+ data::point::sptr point = std::make_shared<data::point>(realPointCoords);
+- params.outputPointList->getPoints().push_back(point);
++ params.outputPointList->get_points().push_back(point);
+ }
+ }
+ }
+@@ -162,7 +160,7 @@
+ params.elongationMax = _elongationMax;
+
+ core::tools::dispatcher<core::tools::supported_dispatcher_types, SpheroidExtractor>::invoke(
+- _image->getType(),
++ _image->type(),
+ params
+ );
- <extension implements="sight::service::extension::Factory">
-- <type>sight::service::IRegisterer</type>
-- <service>sight::module::filter::image::SMIPMatchingRegistration</service>
-- <desc>This service uses a fast registration algorithm to quickly register two images together if the transform</desc>
-- </extension>
--
-- <extension implements="sight::service::extension::Factory">
- <type>sight::service::IFilter</type>
- <service>sight::module::filter::image::SMatrixRegressor</service>
- <object>sight::data::Vector</object>
-@@ -96,4 +90,4 @@
- <object key="target">sight::data::Object</object>
- <desc>Apply a threshold on an image.</desc>
- </extension>
--</plugin>
-\ No newline at end of file
-+</plugin>
=====================================
debian/patches/fix-multi-arch-folder-detection.patch
=====================================
@@ -1,35 +1,38 @@
---- sight.orig/libs/core/core/runtime/detail/Runtime.cpp
-+++ sight/libs/core/core/runtime/detail/Runtime.cpp
-@@ -60,23 +60,22 @@
+--- sight.orig/libs/__/core/runtime/detail/runtime.cpp
++++ sight/libs/__/core/runtime/detail/runtime.cpp
+@@ -60,26 +60,25 @@
// In most cases, we can rely on finding sight_core library and then go upward in the filesystem tree
// The lib location looks like 'SIGHT_DIR/lib/<arch>/libsight_core.*', where arch is optional
-- const std::string corePath = boost::dll::this_line_location().generic_string();
-- const std::string libPrefix("/" MODULE_LIB_PREFIX "/");
-- auto it = std::search(corePath.rbegin(), corePath.rend(), libPrefix.rbegin(), libPrefix.rend());
-+ const std::string corePath = boost::dll::this_line_location().string();
-+ const std::string libPrefix(MODULE_LIB_PREFIX);
-+ auto it = std::search(corePath.begin(), corePath.end(), libPrefix.begin(), libPrefix.end());
+- const std::string core_path = boost::dll::this_line_location().generic_string();
+- const std::string lib_prefix("/" MODULE_LIB_PREFIX "/");
+- auto it = std::search(core_path.rbegin(), core_path.rend(), lib_prefix.rbegin(), lib_prefix.rend());
++ const std::string core_path = boost::dll::this_line_location().string();
++ const std::string lib_prefix(MODULE_LIB_PREFIX);
++ auto it = std::search(core_path.begin(), core_path.end(), lib_prefix.begin(), lib_prefix.end());
-- if(it == corePath.rend())
-+ if(it == corePath.end())
+- if(it == core_path.rend())
++ if(it == core_path.end())
{
// But if we link statically, for instance linking with sight_core as an object library, then
// boost::dll::this_line_location() will return the location of the current executable
// In this case, we know that have to locate the bin directory instead of the library directory
-- const std::string binPrefix("/" MODULE_BIN_PREFIX "/");
-- it = std::search(corePath.rbegin(), corePath.rend(), binPrefix.rbegin(), binPrefix.rend());
-- SIGHT_FATAL_IF("Failed to locate Sight runtime. We tried to guess it from: " + corePath, it == corePath.rend());
-+ const std::string binPrefix(MODULE_BIN_PREFIX);
-+ it = std::search(corePath.begin(), corePath.end(), binPrefix.begin(), binPrefix.end());
-+ SIGHT_FATAL_IF("Failed to locate Sight runtime. We tried to guess it from: " + corePath, it == corePath.end());
+- const std::string bin_prefix("/" MODULE_BIN_PREFIX "/");
+- it = std::search(core_path.rbegin(), core_path.rend(), bin_prefix.rbegin(), bin_prefix.rend());
++ const std::string bin_prefix(MODULE_BIN_PREFIX);
++ it = std::search(core_path.begin(), core_path.end(), bin_prefix.begin(), bin_prefix.end());
+ SIGHT_FATAL_IF(
+ "Failed to locate Sight runtime. We tried to guess it from: " + core_path,
+- it == core_path.rend()
++ it == core_path.end()
+ );
}
-- const auto dist = std::distance(it, corePath.rend());
-- const std::filesystem::path libPath(corePath.begin(), corePath.begin() + dist - 1);
-- m_workingPath = libPath.parent_path().make_preferred();
-+ const std::filesystem::path libPath(corePath.begin(), it);
-+ m_workingPath = libPath.parent_path();
- SIGHT_INFO("Located Sight runtime in folder: " + m_workingPath.string());
+- const auto dist = std::distance(it, core_path.rend());
+- const std::filesystem::path lib_path(core_path.begin(), core_path.begin() + dist - 1);
+- m_working_path = std::filesystem::weakly_canonical(lib_path.parent_path().make_preferred());
++ const std::filesystem::path lib_path(core_path.begin(), it);
++ m_working_path = lib_path.parent_path();
+ SIGHT_INFO("Located Sight runtime in folder: " + m_working_path.string());
}
=====================================
debian/patches/gcc13.patch
=====================================
@@ -1,5 +1,37 @@
---- sight.orig/libs/core/core/crypto/secure_string.hpp
-+++ sight/libs/core/core/crypto/secure_string.hpp
+Author: Flavien Bridault <fbridault at ircad.fr>
+Description: Fix for GCC13.
+Applied-Upstream: https://git.ircad.fr/sight/sight/-/commit/4570ebc3f1666ddf4af5e4d6a207a116b24a5d23
+--- sight.orig/libs/__/core/com/slot_base.hpp
++++ sight/libs/__/core/com/slot_base.hpp
+@@ -33,6 +33,7 @@
+ #include <core/mt/types.hpp>
+ #include <core/spy_log.hpp>
+
++#include <format>
+ #include <future>
+ #include <queue>
+ #include <set>
+@@ -225,7 +226,7 @@
+ template<typename F>
+ std::string get_type_name() const
+ {
+- return std::string("function_type(") + std::string(typeid(F).name()) + std::string(")");
++ return std::format("function_type({})", typeid(F).name());
+ }
+
+ slot_base(unsigned int _arity) :
+--- sight.orig/libs/__/core/crypto/obfuscated_string.hpp
++++ sight/libs/__/core/crypto/obfuscated_string.hpp
+@@ -29,6 +29,7 @@
+
+ #include <array>
+ #include <iostream>
++#include <cstdint>
+
+ namespace sight::core::crypto
+ {
+--- sight.orig/libs/__/core/crypto/secure_string.hpp
++++ sight/libs/__/core/crypto/secure_string.hpp
@@ -97,10 +97,4 @@
{
clear();
@@ -11,19 +43,9 @@
- // NOLINTNEXTLINE(bugprone-sizeof-container)
- std::fill_n(p, sizeof(*this), static_cast<char>(0));
}
---- sight.orig/libs/core/core/crypto/obfuscated_string.hpp
-+++ sight/libs/core/core/crypto/obfuscated_string.hpp
-@@ -28,6 +28,7 @@
-
- #include <array>
- #include <iostream>
-+#include <cstdint>
-
- namespace sight::core::crypto
- {
---- sight.orig/libs/core/data/Series.cpp
-+++ sight/libs/core/data/Series.cpp
-@@ -1050,7 +1050,7 @@
+--- sight.orig/libs/__/data/series.cpp
++++ sight/libs/__/data/series.cpp
+@@ -1312,7 +1312,7 @@
{
try
{
@@ -32,7 +54,16 @@
return sop_class.m_keyword;
}
catch(...)
-@@ -2187,7 +2187,7 @@
+@@ -1335,7 +1335,7 @@
+
+ void series::set_sop_keyword(dicom::sop::Keyword _keyword)
+ {
+- const auto& sop = dicom::sop::get(_keyword);
++ const auto sop = dicom::sop::get(_keyword);
+
+ m_pimpl->set_value<gdcm::Keywords::SOPClassUID>(std::string(sop.m_uid));
+ }
+@@ -2477,7 +2477,7 @@
if(!trimmed.empty())
{
@@ -41,8 +72,19 @@
{
sop_keywords.insert(sop_keyword);
}
---- sight.orig/libs/io/dicom/Reader.cpp
-+++ sight/libs/io/dicom/Reader.cpp
+--- sight.orig/libs/filter/image/flipper.cpp
++++ sight/libs/filter/image/flipper.cpp
+@@ -59,7 +59,7 @@
+ typename itk::FlipImageFilter<image_t>::FlipAxesArrayType axes;
+ for(std::size_t i = 0 ; i < axes.Size() && i < _params.i_flip_axes.size() ; i++)
+ {
+- axes[i] = _params.i_flip_axes[i];
++ axes[static_cast<unsigned int>(i)] = _params.i_flip_axes[i];
+ }
+
+ flip_filter->SetFlipAxes(axes);
+--- sight.orig/libs/io/dicom/reader/file.cpp
++++ sight/libs/io/dicom/reader/file.cpp
@@ -169,7 +169,7 @@
}
@@ -52,69 +94,19 @@
if(sop_keyword == data::dicom::sop::Keyword::INVALID)
{
---- sight.orig/libs/io/itk/NiftiImageReader.cpp
-+++ sight/libs/io/itk/NiftiImageReader.cpp
-@@ -118,7 +118,7 @@
+--- sight.orig/libs/io/itk/nifti_image_reader.cpp
++++ sight/libs/io/itk/nifti_image_reader.cpp
+@@ -107,7 +107,7 @@
assert(!m_object.expired());
assert(m_object.lock());
-- const core::Type& type = NiftiLoaderFunctor::getImageType(file.string());
-+ const core::Type type = NiftiLoaderFunctor::getImageType(file.string());
+- const core::type& type = nifti_loader_functor::get_image_type(file.string());
++ const core::type type = nifti_loader_functor::get_image_type(file.string());
- NiftiLoaderFunctor::Parameter param;
- param.filename = file.string();
---- sight.orig/libs/filter/image/Flipper.cpp
-+++ sight/libs/filter/image/Flipper.cpp
-@@ -59,7 +59,7 @@
- typename itk::FlipImageFilter<ImageType>::FlipAxesArrayType axes;
- for(std::size_t i = 0 ; i < axes.Size() && i < params.i_flipAxes.size() ; i++)
- {
-- axes[i] = params.i_flipAxes[i];
-+ axes[static_cast<unsigned int>(i)] = params.i_flipAxes[i];
- }
-
- flipFilter->SetFlipAxes(axes);
---- sight.orig/libs/filter/image/MinMaxPropagation.cpp
-+++ sight/libs/filter/image/MinMaxPropagation.cpp
-@@ -33,7 +33,7 @@
-
- #include <itkFloodFilledImageFunctionConditionalIterator.h>
- #include <itkImage.h>
--#include <itkImageFunction.hxx>
-+#include <itkImageFunction.h>
-
- #include <algorithm>
- #include <numeric>
-@@ -115,7 +115,7 @@
- double distance2 = 0;
- for(typename TImage::IndexValueType i = 0 ; i < IndexType::Dimension ; ++i)
- {
-- const double realDim = double(imgSize[std::uint32_t(i)]) * imgSpacing[i];
-+ const double realDim = static_cast<double>((imgSize[static_cast<std::uint32_t>(i)])) * imgSpacing[static_cast<std::uint32_t>(i)];
- distance2 += realDim * realDim;
- }
-
---- sight.orig/libs/core/core/com/SlotBase.hpp
-+++ sight/libs/core/core/com/SlotBase.hpp
-@@ -32,6 +32,7 @@
- #include <core/mt/types.hpp>
- #include <core/spyLog.hpp>
-
-+#include <format>
- #include <future>
- #include <queue>
- #include <set>
-@@ -224,7 +225,7 @@
- template<typename F>
- std::string getTypeName() const
- {
-- return std::string("function_type(") + std::string(typeid(F).name()) + std::string(")");
-+ return std::format("function_type({})", typeid(F).name());
- }
-
- SlotBase(unsigned int arity) :
---- sight.orig/libs/io/session/detail/core/SessionSerializer.cpp
-+++ sight/libs/io/session/detail/core/SessionSerializer.cpp
+ nifti_loader_functor::parameter param;
+ param.filename = file.string();
+--- sight.orig/libs/io/session/detail/core/session_serializer.cpp
++++ sight/libs/io/session/detail/core/session_serializer.cpp
@@ -28,6 +28,7 @@
#include <boost/property_tree/json_parser.hpp>
@@ -125,17 +117,55 @@
namespace sight::io::session::detail
@@ -249,13 +250,8 @@
// Throw an exception in debug, but just report an error in release when encryption is not supported, but asked
- if(!password.empty())
+ if(!_password.empty())
{
- const std::string& message =
- "Archive format '"
-- + std::string(Archive::archiveFormatToString(archiveFormat))
+- + std::string(archive::archive_format_to_string(_archive_format))
- + "' doesn't support encryption.";
-
- SIGHT_ASSERT(message, false);
- SIGHT_ERROR(message);
+ SIGHT_ERROR(std::format("Archive format '{}' doesn't support encryption.",
-+ Archive::archiveFormatToString(archiveFormat)));
++ archive::archive_format_to_string(_archive_format)));
}
// Create the archive that will hold all binary files
+--- sight.orig/libs/filter/image/min_max_propagation.cpp
++++ sight/libs/filter/image/min_max_propagation.cpp
+@@ -38,7 +38,7 @@
+
+ #include <itkFloodFilledImageFunctionConditionalIterator.h>
+ #include <itkImage.h>
+-#include <itkImageFunction.hxx>
++#include <itkImageFunction.h>
+
+ #include <algorithm>
+ #include <numeric>
+@@ -134,7 +134,7 @@
+ double distance2 = 0;
+ for(typename TImage::IndexValueType i = 0 ; i < index_t::Dimension ; ++i)
+ {
+- const double real_dim = double(img_size[std::uint32_t(i)]) * img_spacing[i];
++ const double real_dim = static_cast<double>((img_size[static_cast<std::uint32_t>(i)])) * img_spacing[static_cast<std::uint32_t>(i)];
+ distance2 += real_dim * real_dim;
+ }
+
+--- sight.orig/cmake/build/macros.cmake
++++ sight/cmake/build/macros.cmake
+@@ -1121,6 +1121,15 @@
+ "$<$<CONFIG:Release,RelWithDebInfo,MinSizeRel>:-Wno-restrict;-Wno-stringop-overflow;-Wno-array-bounds>"
+ )
+ endif()
++
++ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.3)
++ # disable specific buggy warnings with GCC13.3
++ target_compile_options(
++ ${PROJECT}
++ PRIVATE
++ "$<$<CONFIG:Release,RelWithDebInfo,MinSizeRel>:-Wno-array-bounds>"
++ )
++ endif()
+ endmacro()
+
+ # Find link and manual dependencies for a target
=====================================
debian/patches/lintian_warnings.patch
=====================================
@@ -9,16 +9,16 @@ Forwarded: not-needed
from jinja2 import Environment, PackageLoader, Template
from pprint import pprint
---- sight.orig/libs/viz/scene3d/cmake/resources.cfg.in
-+++ sight/libs/viz/scene3d/cmake/resources.cfg.in
+--- sight.orig/libs/viz/scene3d/rc/resources.cfg
++++ sight/libs/viz/scene3d/rc/resources.cfg
@@ -1,5 +1,5 @@
[Sight]
-FileSystem=Media/fonts/
+FileSystem=/usr/share/fonts/truetype/dejavu/
FileSystem=Media/
- FileSystem=Media/glsl/common
-@@ -29,4 +29,4 @@
+ FileSystem=Media/textures/
+@@ -30,4 +30,4 @@
FileSystem=Media/compositors/frag
FileSystem=Media/compositors/postFX
@@ -27,7 +27,7 @@ Forwarded: not-needed
+FileSystem=Media/meshes
--- sight.orig/cmake/build/macros.cmake
+++ sight/cmake/build/macros.cmake
-@@ -794,7 +794,7 @@
+@@ -788,7 +788,7 @@
# Install shortcut
string(TOLOWER ${SIGHT_TARGET} APP_NAME)
=====================================
debian/patches/move-sightlog-in-libexec.patch
=====================================
@@ -1,8 +1,8 @@
Author: Flavien Bridault <fbridault at ircad.fr>
Description: sightlog is installed in /usr/libexec, this updates its path in the loading code.
Forwarded: not-needed
---- sight.orig/libs/core/core/log/SpyLogger.cpp
-+++ sight/libs/core/core/log/SpyLogger.cpp
+--- sight.orig/libs/__/core/log/spy_logger.cpp
++++ sight/libs/__/core/log/spy_logger.cpp
@@ -418,6 +418,7 @@
{
decltype(boost::this_process::path()) bin_paths;
@@ -10,4 +10,4 @@ Forwarded: not-needed
+ bin_paths.push_back("/usr/libexec");
// Also append all known location from runtime
- const auto& paths = core::runtime::getBinariesPaths();
+ const auto& paths = core::runtime::get_binaries_paths();
=====================================
debian/patches/opencv46.patch
=====================================
@@ -0,0 +1,11 @@
+--- sight.orig/utils/aruco_marker/src/main.cpp
++++ sight/utils/aruco_marker/src/main.cpp
+@@ -68,7 +68,7 @@
+
+ cv::Mat marker;
+
+-#if CV_MAJOR_VERSION > 4 || (CV_MAJOR_VERSION == 4 && CV_VERSION_MINOR > 5)
++#if CV_MAJOR_VERSION > 4 || (CV_MAJOR_VERSION == 4 && CV_VERSION_MINOR > 6)
+ //Use the aruco original dictionary
+ const auto& dictionary = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_ARUCO_ORIGINAL);
+
=====================================
debian/patches/series
=====================================
@@ -1,3 +1,5 @@
+dcmktk3.6.8.patch
+opencv46.patch
fix-multi-arch-folder-detection.patch
move-sightlog-in-libexec.patch
lintian_warnings.patch
=====================================
debian/patches/vtk9.3.patch
=====================================
@@ -3,55 +3,52 @@ Author: Anton Gladky <gladk at debian.org>
Bug-Debian: https://bugs.debian.org/1073822
-Index: sight-23.1.0/libs/core/core/runtime/detail/io/Validator.cpp
-===================================================================
---- sight-23.1.0.orig/libs/core/core/runtime/detail/io/Validator.cpp
-+++ sight-23.1.0/libs/core/core/runtime/detail/io/Validator.cpp
-@@ -110,7 +110,7 @@ void Validator::initializeContext()
+--- sight.orig/libs/__/core/runtime/detail/io/validator.cpp
++++ sight/libs/__/core/runtime/detail/io/validator.cpp
+@@ -110,7 +110,7 @@
}
// Set the structured error callback
-- xmlSchemaSetParserStructuredErrors(m_schemaParserContext.get(), Validator::ErrorHandler, this);
-+ xmlSchemaSetParserStructuredErrors(m_schemaParserContext.get(), reinterpret_cast<xmlStructuredErrorFunc>(Validator::ErrorHandler), this);
+- xmlSchemaSetParserStructuredErrors(m_schema_parser_context.get(), validator::error_handler, this);
++ xmlSchemaSetParserStructuredErrors(m_schema_parser_context.get(), reinterpret_cast<xmlStructuredErrorFunc>(validator::error_handler), this);
}
// Load XML schema content
-@@ -127,7 +127,7 @@ void Validator::initializeContext()
- if((m_schemaValidContext = SchemaValidCtxtSptr(xmlSchemaNewValidCtxt(m_schema.get()), xmlSchemaFreeValidCtxt)))
+@@ -127,7 +127,7 @@
+ if((m_schema_valid_context = schema_valid_ctxt_sptr(xmlSchemaNewValidCtxt(m_schema.get()), xmlSchemaFreeValidCtxt)))
{
// Set the structured error callback
-- xmlSchemaSetValidStructuredErrors(m_schemaValidContext.get(), Validator::ErrorHandler, this);
-+ xmlSchemaSetValidStructuredErrors(m_schemaValidContext.get(), reinterpret_cast<xmlStructuredErrorFunc>(Validator::ErrorHandler), this);
+- xmlSchemaSetValidStructuredErrors(m_schema_valid_context.get(), validator::error_handler, this);
++ xmlSchemaSetValidStructuredErrors(m_schema_valid_context.get(), reinterpret_cast<xmlStructuredErrorFunc>(validator::error_handler), this);
}
}
-@@ -201,7 +201,7 @@ bool Validator::validate(xmlNodePtr node
+@@ -201,7 +201,7 @@
//------------------------------------------------------------------------------
--void Validator::ErrorHandler(void* userData, xmlErrorPtr error)
-+void Validator::ErrorHandler(void* userData, const xmlErrorPtr error)
+-void validator::error_handler(void* _user_data, xmlErrorPtr _error)
++void validator::error_handler(void* _user_data, const xmlErrorPtr _error)
{
- auto* validator = reinterpret_cast<Validator*>(userData);
+ auto* validator = reinterpret_cast<class validator*>(_user_data);
-Index: sight-23.1.0/libs/core/core/runtime/detail/io/Validator.hpp
-===================================================================
---- sight-23.1.0.orig/libs/core/core/runtime/detail/io/Validator.hpp
-+++ sight-23.1.0/libs/core/core/runtime/detail/io/Validator.hpp
-@@ -26,6 +26,7 @@
+--- sight.orig/libs/__/core/runtime/detail/io/validator.hpp
++++ sight/libs/__/core/runtime/detail/io/validator.hpp
+@@ -25,7 +25,7 @@
+ #include <sight/core/config.hpp>
#include <libxml/tree.h>
- #include <libxml/xmlschemastypes.h>
+-#include <libxml/xmlschemastypes.h>
+#include <libxml/xmlschemas.h>
#include <filesystem>
#include <sstream>
-@@ -131,7 +132,7 @@ private:
- SchemaSptr m_schema;
- SchemaValidCtxtSptr m_schemaValidContext;
+@@ -131,7 +131,7 @@
+ schema_sptr m_schema;
+ schema_valid_ctxt_sptr m_schema_valid_context;
-- static void ErrorHandler(void* userData, xmlErrorPtr error);
-+ static void ErrorHandler(void* userData, const xmlErrorPtr error);
+- static void error_handler(void* _user_data, xmlErrorPtr _error);
++ static void error_handler(void* _user_data, const xmlErrorPtr _error);
};
} // namespace sight::core::runtime::detail::io
=====================================
debian/rules
=====================================
@@ -40,4 +40,4 @@ override_dh_install:
dh_install
sed -i -e 's@^me=.*$$@me=/usr/bin@' \
-e 's@^rootdir=.*$$@rootdir=/usr@' \
- debian/sightviewer/usr/bin/sightviewer
+ debian/sightviewer/usr/bin/sight_viewer
=====================================
debian/sightcalibrator.install
=====================================
@@ -1,3 +1,3 @@
-usr/bin/sightcalibrator
-usr/share/sight/SightCalibrator*
-usr/share/man/man1/sightcalibrator.1
+usr/bin/sight_calibrator
+usr/share/sight/sight_calibrator*
+usr/share/man/man1/sight_calibrator.1
=====================================
debian/sightviewer.install
=====================================
@@ -1,3 +1,3 @@
-usr/bin/sightviewer
-usr/share/sight/SightViewer*
-usr/share/man/man1/sightviewer.1
+usr/bin/sight_viewer
+usr/share/sight/sight_viewer*
+usr/share/man/man1/sight_viewer.1
View it on GitLab: https://salsa.debian.org/med-team/sight/-/commit/69121d4e6e407c7d6503b66b891e5a971c579051
--
This project does not include diff previews in email notifications.
View it on GitLab: https://salsa.debian.org/med-team/sight/-/commit/69121d4e6e407c7d6503b66b891e5a971c579051
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20240716/0dfd08cd/attachment-0001.htm>
More information about the debian-med-commit
mailing list