Ariles
rosmsg_geometry_msgs.h
Go to the documentation of this file.
1 /**
2  @file
3  @author Alexander Sherikov
4 
5  @copyright 2017-2018 Alexander Sherikov, Licensed under the Apache License, Version 2.0.
6  (see @ref LICENSE or http://www.apache.org/licenses/LICENSE-2.0)
7 
8  @brief
9 */
10 
11 #pragma once
12 
13 #include <Eigen/Core>
14 #include <Eigen/Geometry>
15 
16 namespace ariles2
17 {
18  namespace copyfrom
19  {
20  template <class t_Visitor, typename t_Scalar, int t_flags>
22  t_Visitor & /*visitor*/,
23  Eigen::Matrix<t_Scalar, 3, 1, t_flags> &left,
24  const geometry_msgs::Vector3 &right,
25  const typename t_Visitor::Parameters & /*param*/)
26  {
27  ARILES2_TRACE_FUNCTION;
28  left.x() = right.x;
29  left.y() = right.y;
30  left.z() = right.z;
31  }
32 
33  template <class t_Visitor, typename t_Scalar, int t_flags>
35  t_Visitor & /*visitor*/,
36  Eigen::Matrix<t_Scalar, Eigen::Dynamic, 1, t_flags> &left,
37  const geometry_msgs::Vector3 &right,
38  const typename t_Visitor::Parameters & /*param*/)
39  {
40  ARILES2_TRACE_FUNCTION;
41  left.resize(3);
42  left(0) = right.x;
43  left(1) = right.y;
44  left(2) = right.z;
45  }
46 
47 
48  template <class t_Visitor, typename t_Scalar, int t_options>
50  const t_Visitor & /*visitor*/,
51  Eigen::Quaternion<t_Scalar, t_options> &left,
52  const geometry_msgs::Quaternion &right,
53  const typename t_Visitor::Parameters & /*param*/)
54  {
55  ARILES2_TRACE_FUNCTION;
56  left.x() = right.x;
57  left.y() = right.y;
58  left.z() = right.z;
59  left.w() = right.w;
60  }
61 
62 
63  template <class t_Visitor, typename t_Scalar, int t_mode, int t_options>
65  const t_Visitor &visitor,
66  Eigen::Transform<t_Scalar, 3, t_mode, t_options> &left,
67  const geometry_msgs::Transform &right,
68  const typename t_Visitor::Parameters &param)
69  {
70  ARILES2_TRACE_FUNCTION;
71 
72  Eigen::Quaternion<t_Scalar> quaternion;
73  Eigen::Matrix<t_Scalar, 3, 1> translation;
74 
75  apply_copyfrom(visitor, quaternion, right.rotation, param);
76  apply_copyfrom(visitor, translation, right.translation, param);
77 
78  left(3, 3) = 1.0;
79  left.linear() = quaternion.toRotationMatrix();
80  left.translation() = translation;
81  }
82  } // namespace copyfrom
83 
84 
85  namespace copyto
86  {
87  template <class t_Visitor, typename t_Scalar, int t_flags>
89  t_Visitor & /*visitor*/,
90  const Eigen::Matrix<t_Scalar, 3, 1, t_flags> &left,
91  geometry_msgs::Vector3 &right,
92  const typename t_Visitor::Parameters & /*param*/)
93  {
94  ARILES2_TRACE_FUNCTION;
95  right.x = left.x();
96  right.y = left.y();
97  right.z = left.z();
98  }
99 
100  template <class t_Visitor, typename t_XprType, bool t_InnerPanel>
102  t_Visitor & /*visitor*/,
103  const Eigen::Block<t_XprType, 3, 1, t_InnerPanel> &left,
104  geometry_msgs::Vector3 &right,
105  const typename t_Visitor::Parameters & /*param*/)
106  {
107  ARILES2_TRACE_FUNCTION;
108  right.x = left(0);
109  right.y = left(1);
110  right.z = left(2);
111  }
112 
113  template <class t_Visitor, typename t_Scalar, int t_flags>
115  t_Visitor & /*visitor*/,
116  const Eigen::Matrix<t_Scalar, Eigen::Dynamic, 1, t_flags> &left,
117  geometry_msgs::Vector3 &right,
118  const typename t_Visitor::Parameters & /*param*/)
119  {
120  ARILES2_TRACE_FUNCTION;
121  ARILES2_ASSERT(3 == left.size(), "Wrong entry size.");
122  right.x = left(0);
123  right.y = left(1);
124  right.z = left(2);
125  }
126 
127 
128  template <class t_Visitor, typename t_Scalar, int t_options>
130  const t_Visitor & /*visitor*/,
131  const Eigen::Quaternion<t_Scalar, t_options> &left,
132  geometry_msgs::Quaternion &right,
133  const typename t_Visitor::Parameters & /*param*/)
134  {
135  ARILES2_TRACE_FUNCTION;
136  right.x = left.x();
137  right.y = left.y();
138  right.z = left.z();
139  right.w = left.w();
140  }
141 
142 
143  template <class t_Visitor, typename t_Scalar, int t_mode, int t_options>
145  const t_Visitor &visitor,
146  const Eigen::Transform<t_Scalar, 3, t_mode, t_options> &left,
147  geometry_msgs::Transform &right,
148  const typename t_Visitor::Parameters &param)
149  {
150  ARILES2_TRACE_FUNCTION;
151  apply_copyto(visitor, Eigen::Quaternion<t_Scalar>(left.linear()), right.rotation, param);
152  apply_copyto(visitor, left.translation(), right.translation, param);
153  }
154  } // namespace copyto
155 } // namespace ariles2
ariles2::copyfrom::apply_copyfrom
void ARILES2_VISIBILITY_ATTRIBUTE apply_copyfrom(t_Visitor &visitor, t_Left &left, const t_Right &right, const typename t_Visitor::Parameters &param, ARILES2_IS_BASE_ENABLER(ariles2::Ariles, t_Left))
Definition: basic.h:323
ariles2
Definition: basic.h:16
t_Visitor
ARILES2_VISIBILITY_ATTRIBUTE
#define ARILES2_VISIBILITY_ATTRIBUTE
Definition: helpers.h:138
ariles2::copyto::apply_copyto
void ARILES2_VISIBILITY_ATTRIBUTE apply_copyto(t_Visitor &visitor, const t_Left &left, t_Right &right, const typename t_Visitor::Parameters &param, ARILES2_IS_BASE_ENABLER(ariles2::Ariles, t_Left))
Definition: basic.h:369