namespace utils
Overview
General namespace for utilities. More…
namespace utils { // typedefs typedef utils::StrongOptionalType<float, class LogReader> ProgressPercentage; typedef DelegatedNotifier<const LogEntry::Type> LogEntryNotifier; typedef DelegatedNotifier<const ProgressPercentage> ProgressNotifier; // enums enum BaseAxis; enum Handedness; enum SpaceCategory; enum Units; // structs struct BasisDefinition; struct IntrinsicParams; template <typename C, typename T, T(C::*)() const getter, void(C::*)(const T&) setter> struct Property; template <typename C, typename T, T(C::*)() const getter, void(C::*)(T) setter> struct PropertyByValue; struct ScannerParams; struct SerializableJson; struct SpaceDefinition; template <typename PhantomType> struct StrongId; template <typename ValueType, typename PhantomType> struct StrongOptionalType; template <typename ValueType, typename PhantomType> struct StrongType; struct UnitNames; struct Version; // classes class CallbackTimer; template <typename T> class ConcurrentBinding; class ConsoleArgs; template <typename Type> class Couple; template <typename... Args> class DelegatedNotifier; class Dictionary; template <class T, class TMask = uint32_t> class EnumFlags; class EventHandler; class GlmQuatSerializable; class GlmVec3Serializable; template <typename IdType> class Identifiable; class IniParser; class Interval; class LogEntry; class LogReader; class LogWriter; class Logger; template <typename T> class NamedClass; template <typename... Args> class Notifier; class OnEnd; template <typename Type, typename SerializableType> class Serializer; template <typename Type> class Statistics; template <typename Type> class Triplet; // global variables const ScannerParams PHOXI_XS = []() { ScannerParams phoxi_xs; phoxi_xs.resolution = glm::uvec2(2064, 1544); phoxi_xs.fx = 3626.18f; phoxi_xs.fy = 3627.91f; phoxi_xs.cx = 1188.59f; phoxi_xs.cy = 684.239f; phoxi_xs.baseline = 85.0f; phoxi_xs.camera_angle = 0.0f; phoxi_xs.projector_angle = 17.0f; phoxi_xs.projector_fovx = 47.5f; phoxi_xs.projector_fovy = 36.0f; phoxi_xs.near_range = 161.0f; phoxi_xs.far_range = 205.0f; return phoxi_xs; }(); const ScannerParams PHOXI_S = []() { ScannerParams phoxi_s; phoxi_s.resolution = glm::uvec2(2064, 1544); phoxi_s.fx = 2245.92f; phoxi_s.fy = 2246.5f; phoxi_s.cx = 1042.98f; phoxi_s.cy = 772.933f; phoxi_s.baseline = 230.0f; phoxi_s.camera_angle = 15.45f; phoxi_s.projector_angle = 15.45f; phoxi_s.projector_fovx = 47.5f; phoxi_s.projector_fovy = 36.0f; phoxi_s.near_range = 384.0f; phoxi_s.far_range = 520.0f; return phoxi_s; }(); const ScannerParams PHOXI_M = []() { ScannerParams phoxi_m; phoxi_m.resolution = glm::uvec2(2064, 1544); phoxi_m.fx = 2268.68f; phoxi_m.fy = 2268.88f; phoxi_m.cx = 1032.65f; phoxi_m.cy = 799.183f; phoxi_m.baseline = 350.0f; phoxi_m.camera_angle = 11.75f; phoxi_m.projector_angle = 11.75f; phoxi_m.projector_fovx = 47.5f; phoxi_m.projector_fovy = 36.0f; phoxi_m.near_range = 458.0f; phoxi_m.far_range = 1118.0f; return phoxi_m; }(); const ScannerParams PHOXI_L = []() { ScannerParams phoxi_l; phoxi_l.resolution = glm::uvec2(2064, 1544); phoxi_l.fx = 2263.31f; phoxi_l.fy = 2263.29f; phoxi_l.cx = 1054.4f; phoxi_l.cy = 770.566f; phoxi_l.baseline = 550.0f; phoxi_l.camera_angle = 9.45f; phoxi_l.projector_angle = 9.45f; phoxi_l.projector_fovx = 47.5f; phoxi_l.projector_fovy = 36.0f; phoxi_l.near_range = 870.0f; phoxi_l.far_range = 2150.0f; return phoxi_l; }(); const ScannerParams PHOXI_XL = []() { ScannerParams phoxi_xl; phoxi_xl.resolution = glm::uvec2(2064, 1544); phoxi_xl.fx = 2245.37f; phoxi_xl.fy = 2244.88f; phoxi_xl.cx = 998.051f; phoxi_xl.cy = 756.269f; phoxi_xl.baseline = 850.0f; phoxi_xl.camera_angle = 7.5f; phoxi_xl.projector_angle = 7.5f; phoxi_xl.projector_fovx = 47.5f; phoxi_xl.projector_fovy = 36.0f; phoxi_xl.near_range = 1680.0f; phoxi_xl.far_range = 3780.0f; return phoxi_xl; }(); const uint8_t BASIS_DEFINITION_VERSION = 1; const uint8_t SPACE_DEFINITION_VERSION = 2; const SpaceDefinition PHOXI_MARKER_SPACE = []() { SpaceDefinition space; space.id = "PhoXi Marker"; space.category = SpaceCategory::marker; space.up = BaseAxis::positive_z; space.forward = BaseAxis::negative_x; space.units = Units::mm; space.handedness = Handedness::right; return space; }(); const SpaceDefinition COGS_MARKER_SPACE = []() { SpaceDefinition space; space.id = "COGS Marker"; space.category = SpaceCategory::marker; space.up = BaseAxis::positive_y; space.forward = BaseAxis::positive_z; space.units = Units::m; space.handedness = Handedness::right; return space; }(); const SpaceDefinition PHOXI_CAMERA_SPACE = []() { SpaceDefinition space; space.id = "PhoXi Camera"; space.category = SpaceCategory::camera; space.up = BaseAxis::negative_y; space.forward = BaseAxis::positive_z; space.units = Units::mm; space.handedness = Handedness::right; return space; }(); const SpaceDefinition COGS_CAMERA_SPACE = []() { SpaceDefinition space; space.id = "COGS Camera"; space.category = SpaceCategory::camera; space.up = BaseAxis::positive_y; space.forward = BaseAxis::negative_z; space.units = Units::m; space.handedness = Handedness::right; return space; }(); const std::map<std::string, SpaceDefinition> SPACE_DEFINITION_OF_ID = { {PHOXI_MARKER_SPACE.id, PHOXI_MARKER_SPACE}, {PHOXI_CAMERA_SPACE.id, PHOXI_CAMERA_SPACE}, {COGS_MARKER_SPACE.id, COGS_MARKER_SPACE}, {COGS_CAMERA_SPACE.id, COGS_CAMERA_SPACE} }; // global functions glm::vec3 BulletToGlmVec(const btVector3& bt_vec); glm::quat BulletToGlmQuat(const btQuaternion& bt_quat); Eigen::Vector3d BulletToEigenVec(const btVector3& bt_vec); Eigen::Quaterniond BulletToEigenQuat(const btQuaternion& bt_quat); btVector3 GlmToBulletVec(const glm::vec3& vec); btQuaternion GlmToBulletQuat(const glm::quat& glm_quat); bool HasPermissionToWriteHere(); std::string CvMatTypeToString(const int mat_type); gl::GLenum CvMatTypeToGlType(const int mat_type); unsigned int GetNumOfChannels(const int mat_type); glw::PTexture2D MatToTexture(const cv::Mat& image, bool flip_vertically); cv::Mat TextureToMat(const glw::PTexture2D& texture, bool flip_vertically, const int mat_type); template <typename T, int m, int n, typename OutT = float> glm::mat<m, n, OutT, glm::precision::highp> EigenToGlmMat(const Eigen::Matrix<T, m, n>& em); template <typename T, int m, int n> Eigen::Matrix<T, m, n> GlmToEigenMat(const glm::mat<m, n, float, glm::precision::highp>& glm_mat); template <typename T, int m> glm::vec<m, float, glm::precision::highp> EigenToGlmVec(const Eigen::Matrix<T, m, 1>& em); template <typename T> glm::quat EigenToGlmQuat(const Eigen::Quaternion<T>& q); Eigen::Vector3d GlmToEigenVec(const glm::vec3& glm_vec); template <typename T> Eigen::Quaternion<T> GlmToEigenQuat(const glm::quat& q); glm::vec2 GetPrincipalPoint(float focal_length, float fovx, float fovy); IntrinsicParams GetIntrinsicParamsFromResolution(const glm::uvec2& resolution, float fovx, float fovy); IntrinsicParams GetIntrinsicParamsFromDepth(float focal_length, float fovx, float fovy); UTILS_API bool operator==(const IntrinsicParams& p1, const IntrinsicParams& p2); UTILS_API bool operator!=(const IntrinsicParams& p1, const IntrinsicParams& p2); UTILS_API bool operator==(const ScannerParams& p1, const ScannerParams& p2); UTILS_API bool operator!=(const ScannerParams& p1, const ScannerParams& p2); static float GetUnitConversionRatio(utils::Units source_units, utils::Units target_units); static const UnitNames& GetUnitName(utils::Units unit); static size_t BaseAxisToId(BaseAxis axis); static float BaseAxisToSign(BaseAxis axis); static glm::vec3 BaseAxisToVec3(BaseAxis axis); static glm::vec4 BaseAxisToVec4(BaseAxis axis, float w = 0.0f); static bool AreCollinear(BaseAxis axis_a, BaseAxis axis_b); std::string SpaceCategoryToString(SpaceCategory categ); bool operator<(const Version& a, const Version& b); bool operator>(const Version& a, const Version& b); bool operator<=(const Version& a, const Version& b); bool operator>=(const Version& a, const Version& b); bool operator==(const Version& a, const Version& b); bool operator!=(const Version& a, const Version& b); } // namespace utils
Detailed Documentation
General namespace for utilities.
Global Variables
const ScannerParams PHOXI_XS = []() { ScannerParams phoxi_xs; phoxi_xs.resolution = glm::uvec2(2064, 1544); phoxi_xs.fx = 3626.18f; phoxi_xs.fy = 3627.91f; phoxi_xs.cx = 1188.59f; phoxi_xs.cy = 684.239f; phoxi_xs.baseline = 85.0f; phoxi_xs.camera_angle = 0.0f; phoxi_xs.projector_angle = 17.0f; phoxi_xs.projector_fovx = 47.5f; phoxi_xs.projector_fovy = 36.0f; phoxi_xs.near_range = 161.0f; phoxi_xs.far_range = 205.0f; return phoxi_xs; }()
Scanner parameter definition for PhoXi XS device.
const ScannerParams PHOXI_S = []() { ScannerParams phoxi_s; phoxi_s.resolution = glm::uvec2(2064, 1544); phoxi_s.fx = 2245.92f; phoxi_s.fy = 2246.5f; phoxi_s.cx = 1042.98f; phoxi_s.cy = 772.933f; phoxi_s.baseline = 230.0f; phoxi_s.camera_angle = 15.45f; phoxi_s.projector_angle = 15.45f; phoxi_s.projector_fovx = 47.5f; phoxi_s.projector_fovy = 36.0f; phoxi_s.near_range = 384.0f; phoxi_s.far_range = 520.0f; return phoxi_s; }()
Scanner parameter definition for PhoXi S device.
const ScannerParams PHOXI_M = []() { ScannerParams phoxi_m; phoxi_m.resolution = glm::uvec2(2064, 1544); phoxi_m.fx = 2268.68f; phoxi_m.fy = 2268.88f; phoxi_m.cx = 1032.65f; phoxi_m.cy = 799.183f; phoxi_m.baseline = 350.0f; phoxi_m.camera_angle = 11.75f; phoxi_m.projector_angle = 11.75f; phoxi_m.projector_fovx = 47.5f; phoxi_m.projector_fovy = 36.0f; phoxi_m.near_range = 458.0f; phoxi_m.far_range = 1118.0f; return phoxi_m; }()
Scanner parameter definition for PhoXi M device.
const ScannerParams PHOXI_L = []() { ScannerParams phoxi_l; phoxi_l.resolution = glm::uvec2(2064, 1544); phoxi_l.fx = 2263.31f; phoxi_l.fy = 2263.29f; phoxi_l.cx = 1054.4f; phoxi_l.cy = 770.566f; phoxi_l.baseline = 550.0f; phoxi_l.camera_angle = 9.45f; phoxi_l.projector_angle = 9.45f; phoxi_l.projector_fovx = 47.5f; phoxi_l.projector_fovy = 36.0f; phoxi_l.near_range = 870.0f; phoxi_l.far_range = 2150.0f; return phoxi_l; }()
Scanner parameter definition for PhoXi L device.
const ScannerParams PHOXI_XL = []() { ScannerParams phoxi_xl; phoxi_xl.resolution = glm::uvec2(2064, 1544); phoxi_xl.fx = 2245.37f; phoxi_xl.fy = 2244.88f; phoxi_xl.cx = 998.051f; phoxi_xl.cy = 756.269f; phoxi_xl.baseline = 850.0f; phoxi_xl.camera_angle = 7.5f; phoxi_xl.projector_angle = 7.5f; phoxi_xl.projector_fovx = 47.5f; phoxi_xl.projector_fovy = 36.0f; phoxi_xl.near_range = 1680.0f; phoxi_xl.far_range = 3780.0f; return phoxi_xl; }()
Scanner parameter definition for PhoXi XL device.
Global Functions
glm::vec3 BulletToGlmVec(const btVector3& bt_vec)
Converts bullet vector to glm vector.
glm::quat BulletToGlmQuat(const btQuaternion& bt_quat)
Converts bullet quaternion to glm quaternion.
Eigen::Vector3d BulletToEigenVec(const btVector3& bt_vec)
Converts bullet vector to Eigen vector.
Eigen::Quaterniond BulletToEigenQuat(const btQuaternion& bt_quat)
Converts bullet quaternion to Eigen quaternion.
btVector3 GlmToBulletVec(const glm::vec3& vec)
Converts glm vector to bullet vector.
btQuaternion GlmToBulletQuat(const glm::quat& glm_quat)
Converts glm quaternion to bullet quaternion.
bool HasPermissionToWriteHere()
Function returns if the current user has the right to write into the project directory.
template <typename T, int m, int n, typename OutT = float> glm::mat<m, n, OutT, glm::precision::highp> EigenToGlmMat(const Eigen::Matrix<T, m, n>& em)
Converts Eigen matrix to glm matrix.
template <typename T, int m, int n> Eigen::Matrix<T, m, n> GlmToEigenMat(const glm::mat<m, n, float, glm::precision::highp>& glm_mat)
Converts glm matrix to Eigen matrix.
template <typename T, int m> glm::vec<m, float, glm::precision::highp> EigenToGlmVec(const Eigen::Matrix<T, m, 1>& em)
Converts Eigen matrix to glm vector.
template <typename T> glm::quat EigenToGlmQuat(const Eigen::Quaternion<T>& q)
Converts Eigen quaternion to glm quaternion.
Eigen::Vector3d GlmToEigenVec(const glm::vec3& glm_vec)
Converts glm vector to Eigen vector.
template <typename T> Eigen::Quaternion<T> GlmToEigenQuat(const glm::quat& q)
Converts glm quaternion to Eigen quaternion.
glm::vec2 GetPrincipalPoint(float focal_length, float fovx, float fovy)
Returns intrinsic cx, cy parameters for defined projection depth and field of view angles.
IntrinsicParams GetIntrinsicParamsFromResolution(const glm::uvec2& resolution, float fovx, float fovy)
Calculates intrinsic projection parameters from resolution and field of view angles.
IntrinsicParams GetIntrinsicParamsFromDepth(float focal_length, float fovx, float fovy)
Calculates intrinsic projection parameters from projection depth and field of view angles.
UTILS_API bool operator==(const IntrinsicParams& p1, const IntrinsicParams& p2)
Compare equality of two parameter structures.
UTILS_API bool operator!=(const IntrinsicParams& p1, const IntrinsicParams& p2)
Compare unequality of two parameter structures.
UTILS_API bool operator==(const ScannerParams& p1, const ScannerParams& p2)
Compare equality of two parameter structures.
UTILS_API bool operator!=(const ScannerParams& p1, const ScannerParams& p2)
Compare unequality of two parameter structures.
static float GetUnitConversionRatio(utils::Units source_units, utils::Units target_units)
Gets ratio that describes relation between two provided units. target_value = source_value * ratio.
static const UnitNames& GetUnitName(utils::Units unit)
Gets ratio that describes relation between two provided unit: target_value = source_value * ratio.
static size_t BaseAxisToId(BaseAxis axis)
Converts base axis x,y,z hints to 0,1,2 respectively.
static float BaseAxisToSign(BaseAxis axis)
Converts base axis positive,negative hints to 1,-1 respectively.
static glm::vec3 BaseAxisToVec3(BaseAxis axis)
Converts base axis to vec3.
static glm::vec4 BaseAxisToVec4(BaseAxis axis, float w = 0.0f)
Converts base axis to vec4, with possible custom w element value.