BIMHome v1.0.0
BIMHome接口文档说明
Converter.h
浏览该文件的文档.
1/************************************************************************
2* @file Converter.h
3*
4* @brief 向量转换相关定义
5*
6* @details 向量转换相关定义
7*
8* @author wukx
9*
10* @version v1.0
11*
12* @date 2016.9.29
13*
14* @license 北京华科软科技有限公司
15*
16*************************************************************************/
17
18#ifndef BIMHOMEBASE_CONVERTER_H
19#define BIMHOMEBASE_CONVERTER_H
20
21#include <tuple>
22#include <Base/Rotation.h>
23#include <Base/Vector3D.h>
24
25
26namespace Base
27{
34 template <class vecT>
35 struct vec_traits { };
36
42 template <>
44 {
46 typedef float float_type;
51 vec_traits(const vec_type& v) : v(v) {}
56 inline std::tuple<float_type, float_type, float_type> get() const
57 {
58 return std::make_tuple(v.x, v.y, v.z);
59 }
60 private:
61 const vec_type& v;
62 };
63
69 template <>
71 {
73 typedef double float_type;
78 vec_traits(const vec_type& v) : v(v) {}
83 inline std::tuple<float_type, float_type, float_type> get() const
84 {
85 return std::make_tuple(v.x, v.y, v.z);
86 }
87 private:
88 const vec_type& v;
89 };
90
96 template <>
98 {
100 typedef double float_type;
105 vec_traits(const vec_type& v) : v(v) {}
110 inline std::tuple<float_type, float_type, float_type, float_type> get() const
111 {
112 float_type q1, q2, q3, q4;
113 v.getValue(q1, q2, q3, q4);
114 return std::make_tuple(q1, q2, q3, q4);
115 }
116 private:
117 const vec_type& v;
118 };
119
128 template <class _Vec, typename float_type>
129 _Vec make_vec(const std::tuple<float_type, float_type, float_type>&& t)
130 {
131 typedef vec_traits<_Vec> traits_type;
132 typedef typename traits_type::float_type float_traits_type;
133 return _Vec(float_traits_type(std::get<0>(t)),
134 float_traits_type(std::get<1>(t)),
135 float_traits_type(std::get<2>(t)));
136 }
137
146 template <class _Vec, typename float_type>
147 _Vec make_vec(const std::tuple<float_type, float_type, float_type, float_type>&& t)
148 {
149 typedef vec_traits<_Vec> traits_type;
150 typedef typename traits_type::float_type float_traits_type;
151 return _Vec(float_traits_type(std::get<0>(t)),
152 float_traits_type(std::get<1>(t)),
153 float_traits_type(std::get<2>(t)),
154 float_traits_type(std::get<3>(t)));
155 }
156
165 template <class _Vec1, class _Vec2>
166 inline _Vec1 convertTo(const _Vec2& v)
167 {
168 typedef vec_traits<_Vec2> traits_type;
169 typedef typename traits_type::float_type float_type;
170 traits_type t(v);
171 auto tuple = t.get();
172 return make_vec<_Vec1, float_type>(std::move(tuple));
173 }
174
175}
176
177#endif // BIMHOMEBASE_CONVERTER_H
Definition Rotation.h:32
Vector3 类,表示三维空间中的向量
Definition Vector3D.h:149
_Vec1 convertTo(const _Vec2 &v)
转换向量
Definition Converter.h:166
_Vec make_vec(const std::tuple< float_type, float_type, float_type > &&t)
创建向量
Definition Converter.h:129
Definition BaseFigureFactory.h:24
double float_type
浮点数类型
Definition Converter.h:100
Rotation vec_type
向量类型
Definition Converter.h:99
vec_traits(const vec_type &v)
构造函数
Definition Converter.h:105
const vec_type & v
向量引用
Definition Converter.h:117
std::tuple< float_type, float_type, float_type, float_type > get() const
获取四元数的分量
Definition Converter.h:110
double float_type
浮点数类型
Definition Converter.h:73
std::tuple< float_type, float_type, float_type > get() const
获取向量的分量
Definition Converter.h:83
vec_traits(const vec_type &v)
构造函数
Definition Converter.h:78
const vec_type & v
向量引用
Definition Converter.h:88
Vector3d vec_type
向量类型
Definition Converter.h:72
float float_type
浮点数类型
Definition Converter.h:46
Vector3f vec_type
向量类型
Definition Converter.h:45
std::tuple< float_type, float_type, float_type > get() const
获取向量的分量
Definition Converter.h:56
vec_traits(const vec_type &v)
构造函数
Definition Converter.h:51
const vec_type & v
向量引用
Definition Converter.h:61
向量特性模板结构
Definition Converter.h:35