106 return static_cast<std::make_signed_t<T>>(x); |
106 return static_cast<std::make_signed_t<T>>(x); |
107 } |
107 } |
108 |
108 |
109 |
109 |
110 /** |
110 /** |
111 * @brief casts double and long double - and only those types - to float |
111 * @brief casts floating point values to float, converting non-floating point values causes an error |
112 * @param[in] x double or long double to cast |
112 * @param[in] x floating point value to cast |
113 * @returns float |
113 * @returns float |
114 */ |
114 */ |
115 template<typename T> |
115 template<typename T> |
116 auto doubleToFloat(T x) |
116 auto toFloat(T x) -> std::enable_if_t<std::is_floating_point_v<T>, float> |
117 -> std::enable_if_t< |
|
118 std::is_same_v<std::decay_t<T>, double> || |
|
119 std::is_same_v<std::decay_t<T>, long double |
|
120 >, float> |
|
121 { |
117 { |
122 return static_cast<float>(x); |
118 return static_cast<float>(x); |
123 } |
119 } |
124 |
120 |
125 /** |
121 /** |
126 * @brief Casts float - and only float - to double |
122 * @brief casts floating point values to double, converting non-floating point values causes an error |
127 * @param[in] x float to cast |
123 * @param[in] x floating point value to cast |
128 * @returns double |
124 * @returns double |
129 */ |
125 */ |
130 template<typename T> |
126 template<typename T> |
131 auto floatToDouble(T x) |
127 auto toDouble(T x) -> std::enable_if_t<std::is_floating_point_v<T>, double> |
132 -> std::enable_if_t<std::is_same_v<std::decay_t<T>, float>, double> |
|
133 { |
128 { |
134 return static_cast<double>(x); |
129 return static_cast<double>(x); |
135 } |
130 } |
|
131 |
|
132 template<int N, typename T, glm::qualifier Q> |
|
133 inline QPoint toQPoint(const glm::vec<N, T, Q>& vec) |
|
134 { |
|
135 return {static_cast<int>(vec.x), static_cast<int>(vec.y)}; |
|
136 } |
|
137 |
|
138 template<int N, typename T, glm::qualifier Q> |
|
139 inline QPointF toQPointF(const glm::vec<N, T, Q>& vec) |
|
140 { |
|
141 return {toDouble(vec.x), toDouble(vec.y)}; |
|
142 } |
|
143 |
|
144 inline glm::vec2 toVec2(const QPoint& point) |
|
145 { |
|
146 return {point.x(), point.y()}; |
|
147 } |
|
148 |
|
149 inline glm::vec2 toVec2(const QPointF& point) |
|
150 { |
|
151 return {point.x(), point.y()}; |
|
152 } |
|
153 |
136 Q_DECLARE_METATYPE(glm::vec3) |
154 Q_DECLARE_METATYPE(glm::vec3) |
137 Q_DECLARE_METATYPE(glm::mat4) |
155 Q_DECLARE_METATYPE(glm::mat4) |