7#include "../_cexports/c_core_3d.h"
9#include "../string.hpp"
10#include "../affine_matrix_3d.hpp"
11#include "../matrix_3d.hpp"
12#include "../matrix_3d_h.hpp"
14#include "../size_2d.hpp"
15#include "../point_2d.hpp"
17#include "../core_3d.hpp"
18#include "../utilities/system_info.hpp"
19#include "../shims/stdoptional.hpp"
21#include "../_detail/detail_dyn_loader.hpp"
30 inline HandleGuard<Calibrator3D>::HandleGuard(
void *handle) noexcept
31 : HandleGuard<Calibrator3D>(handle, [](
void *handle) { CVB_CALL_CAPI(
ReleaseObject(handle)); })
38 typedef cvbres_t(CVB_API *FP_CVMWrite3DCalibrator)(CVC3DCALIBRATOR Calibrator,
const char *FileName);
39 typedef cvbres_t(CVB_API *FP_CVMWrite3DCalibratorW)(CVC3DCALIBRATOR Calibrator,
const wchar_t *FileName);
41 inline cvbres_t _ppCVMWrite3DCalibratorTyped(CVC3DCALIBRATOR Calibrator,
const char *FileName)
43 Internal::DynLoader loader(CVB_LIT(
"CVMetric"));
44 auto call =
reinterpret_cast<FP_CVMWrite3DCalibrator
>(loader.LoadSymbol(CVB_LIT(
"CVMWrite3DCalibrator")));
46 throw std::runtime_error(
"failed to load symbol: CVMWrite3DCalibrator");
47 return call(Calibrator, FileName);
50 inline cvbres_t _ppCVMWrite3DCalibratorTyped(CVC3DCALIBRATOR Calibrator,
const wchar_t *FileName)
52 Internal::DynLoader loader(CVB_LIT(
"CVMetric"));
53 auto call =
reinterpret_cast<FP_CVMWrite3DCalibratorW
>(loader.LoadSymbol(CVB_LIT(
"CVMWrite3DCalibratorW")));
55 throw std::runtime_error(
"failed to load symbol: CVMWrite3DCalibratorW");
56 return call(Calibrator, FileName);
68 friend class Calibrator3DFactory;
76 using GuardType = HandleGuard<Calibrator3D>;
78 Calibrator3D(HandleGuard<Calibrator3D> &&guard, ProtectedTag) noexcept
83 Calibrator3D(
const Calibrator3D &otehr) =
delete;
84 Calibrator3D &operator=(
const Calibrator3D &otehr) =
delete;
85 Calibrator3D(Calibrator3D &&otehr) =
delete;
86 Calibrator3D &operator=(Calibrator3D &&otehr) =
delete;
87 virtual ~Calibrator3D() =
default;
95 const auto value = Internal::DoResCallValueOut<double>([&](
double &rangeMapIgnoreValue) {
96 return CVB_CALL_CAPI(CVC3DCalibratorGetRangeMapIgnoreValue(handle_.Handle(), rangeMapIgnoreValue));
120 CVB_CALL_CAPI(CVC3DCalibratorSetRangeMapIgnoreValue(
132 Internal::DoResCall([&]() {
133 return CVB_CALL_CAPI(CVC3DCalibratorGetExtrinsicMatrix(
134 Handle(), *
reinterpret_cast<CExports::CVC3DTransformation *
>(&transformation)));
136 return transformation;
147 Internal::DoResCall([&]() {
148 return CVB_CALL_CAPI(CVC3DCalibratorSetExtrinsicMatrix(
149 Handle(), *
reinterpret_cast<const CExports::CVC3DTransformation *
>(&transformation)));
162 Internal::DoResCall([&]() {
return CVB_CALL_CAPI(CVMWrite3DCalibratorTyped(
Handle(), fileName.c_str())); });
187 return handle_.Handle();
191 enum class CalibratorType
203 static CalibratorType TypeId(
void *handle)
205 return static_cast<CalibratorType
>(Internal::DoResCallValueOut<Cvb::CExports::CVC3DCalibratorType>(
206 [&](Cvb::CExports::CVC3DCalibratorType &type) {
207 return CVB_CALL_CAPI(CVC3DGetCalibratorType(handle, type));
212 HandleGuard<Calibrator3D> handle_;
66 class Calibrator3D {
…};
Affine transformation for 3D containing a transformation matrix and a translation vector.
Definition affine_matrix_3d.hpp:140
Base calibration class to apply 3D calibration to point clouds.
Definition decl_calibrator_3d.hpp:67
Cvb::optional< double > RangeMapIgnoreValue() const
Gets value to be ignored in range map.
Definition decl_calibrator_3d.hpp:93
void SetRangeMapIgnoreValue(Cvb::optional< double > rangeMapIgnoreValue)
Sets value to be ignored in range map in the calibrator.
Definition decl_calibrator_3d.hpp:118
static Calibrator3DPtr FromHandle(HandleGuard< Calibrator3D > &&guard)
Creates a calibrator from a classic API handle.
Definition detail_calibrator_3d.hpp:17
void Save(const String &fileName) const
Write the current content calibrator to a file.
Definition decl_calibrator_3d.hpp:160
AffineMatrix3D ExtrinsicMatrix() const
Gets the extrinsic transformation matrix (rigid body transformation) of the calibrator.
Definition decl_calibrator_3d.hpp:129
void * Handle() const noexcept
Returns C-API style handle to Node Object.
Definition decl_calibrator_3d.hpp:185
static std::shared_ptr< T > Load(const String &fileName)
Loads a 3D calibration from file.
Definition detail_calibrator_3d.hpp:43
void SetExtrinsicMatrix(const AffineMatrix3D &transformation)
Sets the extrinsic transformation matrix (rigid body transformation with rotation and translation) of...
Definition decl_calibrator_3d.hpp:145
This class is a replacement for C++17 std::optional.
Definition optional.hpp:61
T value_or(U &&default_value) const
Gets the contained value if has_value() is true; default_value otherwise.
Definition optional.hpp:385
cvbbool_t ReleaseObject(OBJ &Object)
Root namespace for the Image Manager interface.
Definition c_bayer_to_rgb.h:17
std::string String
String for wide characters or unicode characters.
Definition string.hpp:49
std::shared_ptr< Calibrator3D > Calibrator3DPtr
Convenience shared pointer for Calibrator3D.
Definition core_3d.hpp:52
@ Unknown
Definition global.hpp:136