File: calibration_info.hpp

package info (click to toggle)
sight 25.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 42,180 kB
  • sloc: cpp: 289,476; xml: 17,257; ansic: 9,878; python: 1,379; sh: 144; makefile: 33
file content (174 lines) | stat: -rw-r--r-- 5,706 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
/************************************************************************
 *
 * Copyright (C) 2014-2024 IRCAD France
 * Copyright (C) 2014-2020 IHU Strasbourg
 *
 * This file is part of Sight.
 *
 * Sight 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.
 *
 * Sight 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 Sight. If not, see <https://www.gnu.org/licenses/>.
 *
 ***********************************************************************/

#pragma once

#include <sight/data/config.hpp>

#include "data/image.hpp"
#include "data/object.hpp"
#include "data/point_list.hpp"

#include <core/com/signal.hpp>
#include <core/com/signals.hpp>
#include <core/macros.hpp>

#include <list>

namespace sight::data
{

/**
 * @brief class for handle calibration information , this class handle two lists the first one contains images
 * and the second one contains pointList
 *
 */
class SIGHT_DATA_CLASS_API calibration_info final : public object
{
public:

    SIGHT_DECLARE_CLASS(calibration_info, object);

    ///typedefs
    using image_container_t      = std::list<image::sptr>;
    using point_list_container_t = std::list<point_list::sptr>;

    /**
     * @name Signals API
     * @{
     */
    SIGHT_DATA_API static const core::com::signals::key_t ADDED_RECORD_SIG;
    using added_record_signal_t = core::com::signal<void ()>;

    SIGHT_DATA_API static const core::com::signals::key_t REMOVED_RECORD_SIG;
    using removed_record_signal_t = core::com::signal<void ()>;

    SIGHT_DATA_API static const core::com::signals::key_t RESET_RECORD_SIG;
    using reset_record_signal_t = core::com::signal<void ()>;

    SIGHT_DATA_API static const core::com::signals::key_t GET_RECORD_SIG;
    using get_record_signal_t = core::com::signal<void (std::size_t)>;

    /**
     * @}
     */

    ///Constructor
    SIGHT_DATA_API calibration_info();

    ///Destructor
    SIGHT_DATA_API ~calibration_info() noexcept override = default;

    /**
     * @brief add an Image and a pointList into calibration_info
     * @param[in] _img the new image
     * @param[in] _pl the corresponding point list
     */
    SIGHT_DATA_API void add_record(const image::sptr& _img, const point_list::sptr& _pl);

    /**
     * @brief remove the desired record (both image and pointList)
     * @param[in] _idx index of the record to be removed
     */
    SIGHT_DATA_API void remove_record(std::size_t _idx);

    /// Reset all records
    SIGHT_DATA_API void reset_records();

    ///Get all the images
    ///@{
    SIGHT_DATA_API std::list<image::sptr> get_image_container();
    SIGHT_DATA_API std::list<image::csptr> get_image_container() const;
    ///@}

    ///Get all the pointLists
    ///@{
    SIGHT_DATA_API std::list<point_list::sptr> get_point_list_container();
    SIGHT_DATA_API std::list<point_list::csptr> get_point_list_container() const;
    ///@}

    /**
     * @brief Get the pointList corresponding to the specified image, if the specified image is not found
     * a null pointer is returned
     * @param[in] _img image
     * @return pointList corresponding to the image
     *
     */
    SIGHT_DATA_API point_list::csptr get_point_list(const image::csptr& _img) const;

    /**
     * @brief Get the image corresponding to the specified pointList, if the specified pointList is not found
     *  a null pointer is returned
     * @param[in] _pl the pointList
     * @return image corresponding to the pointList
     */
    SIGHT_DATA_API image::csptr get_image(const point_list::csptr& _pl) const;

    /**
     * @brief Get the image corresponding to the specified index, if the index is not found
     *  a null pointer is returned
     * @param[in] _idx index of image
     * @return image corresponding to the index
     * @{
     */
    SIGHT_DATA_API image::sptr get_image(std::size_t _idx);
    SIGHT_DATA_API image::csptr get_image(std::size_t _idx) const;
    /// @}

    /// Equality comparison operators
    /// @{
    SIGHT_DATA_API bool operator==(const calibration_info& _other) const noexcept;
    SIGHT_DATA_API bool operator!=(const calibration_info& _other) const noexcept;

    /// @}

    /// Defines shallow copy
    /// @throws data::exception if an errors occurs during copy
    /// @param[in] _source the source object to copy
    SIGHT_DATA_API void shallow_copy(const object::csptr& _source) override;

    /// Defines deep copy
    /// @throws data::exception if an errors occurs during copy
    /// @param _source source object to copy
    /// @param _cache cache used to deduplicate pointers
    SIGHT_DATA_API void deep_copy(
        const object::csptr& _source,
        const std::unique_ptr<deep_copy_cache_t>& _cache = std::make_unique<deep_copy_cache_t>()
    ) override;

protected:

    ///List of Image
    std::list<image::sptr> m_image_container;
    ///List of pointList
    std::list<point_list::sptr> m_point_list_container_t;
    ///added record signal
    added_record_signal_t::sptr m_sig_added_record;
    /// removed record signal
    removed_record_signal_t::sptr m_sig_removed_record;
    ///reset records signal
    reset_record_signal_t::sptr m_sig_reset_record;
    ///get record signal
    get_record_signal_t::sptr m_sig_get_record;
};

} // namespace sight::data