cisst-saw
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
vctDataFunctionsTransformations.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* ex: set filetype=cpp softtabstop=4 shiftwidth=4 tabstop=4 cindent expandtab: */
3 
4 /*
5  Author(s): Anton Deguet
6  Created on: 2012-07-09
7 
8  (C) Copyright 2012-2014 Johns Hopkins University (JHU), All Rights
9  Reserved.
10 
11 --- begin cisst license - do not edit ---
12 
13 This software is provided "as is" under an open source license, with
14 no warranty. The complete license can be found in license.txt and
15 http://www.cisst.org/cisst/license.txt.
16 
17 --- end cisst license ---
18 
19 */
20 
21 #pragma once
22 
23 #ifndef _vctDataFunctionsTransformations_h
24 #define _vctDataFunctionsTransformations_h
25 
29 
30 #if CISST_HAS_JSON
32 #endif // CISST_HAS_JSON
33 
34 template <class _rotationType>
35 class cmnData<vctFrameBase<_rotationType> >
36 {
37 public:
38  enum {IS_SPECIALIZED = 1};
39 
43 
44  static void Copy(DataType & data, const DataType & source)
45  {
46  data.Assign(source);
47  }
48 
49  static void SerializeBinary(const DataType & data, std::ostream & outputStream)
50  throw (std::runtime_error)
51  {
52  cmnData<TranslationType>::SerializeBinary(data.Translation(), outputStream);
53  cmnData<RotationType>::SerializeBinary(data.Rotation(), outputStream);
54  }
55 
56  static void DeSerializeBinary(DataType & data, std::istream & inputStream,
57  const cmnDataFormat & localFormat, const cmnDataFormat & remoteFormat)
58  throw (std::runtime_error)
59  {
60  cmnData<TranslationType>::DeSerializeBinary(data.Translation(), inputStream, localFormat, remoteFormat);
61  cmnData<RotationType>::DeSerializeBinary(data.Rotation(), inputStream, localFormat, remoteFormat);
62  }
63 
64  static void SerializeText(const DataType & data, std::ostream & outputStream,
65  const char delimiter = ',')
66  throw (std::runtime_error)
67  {
68  cmnData<TranslationType>::SerializeText(data.Translation(), outputStream, delimiter);
69  outputStream << delimiter;
70  cmnData<RotationType>::SerializeText(data.Rotation(), outputStream, delimiter);
71  }
72 
73  static std::string HumanReadable(const DataType & data)
74  {
75  return data.ToString();
76  }
77 
78  static std::string SerializeDescription(const DataType & data, const char delimiter = ',',
79  const std::string & userDescription = "frm3")
80  {
81  const std::string prefix = (userDescription == "") ? "" : (userDescription + ".");
82  std::stringstream description;
83  description << cmnData<TranslationType>::SerializeDescription(data.Translation(), delimiter, prefix + "Translation")
84  << delimiter
85  << cmnData<RotationType>::SerializeDescription(data.Rotation(), delimiter, prefix + "Rotation");
86  return description.str();
87  }
88 
89  static void DeSerializeText(DataType & data, std::istream & inputStream,
90  const char delimiter = ',')
91  throw (std::runtime_error)
92  {
93  cmnData<TranslationType>::DeSerializeText(data.Translation(), inputStream, delimiter);
94  cmnDataDeSerializeTextDelimiter(inputStream, delimiter, "vctFrameBase");
95  cmnData<RotationType>::DeSerializeText(data.Rotation(), inputStream, delimiter);
96  }
97 
98  static bool ScalarNumberIsFixed(const DataType & data)
99  {
102  }
103 
104  static size_t ScalarNumber(const DataType & data)
105  {
108  }
109 
110  static std::string ScalarDescription(const DataType & data, const size_t & index,
111  const std::string & userDescription = "frm3")
112  throw (std::out_of_range)
113  {
114  std::string prefix = (userDescription == "") ? "" : (userDescription + ".");
115  const size_t scalarNumberTranslation = cmnData<TranslationType>::ScalarNumber(data.Translation());
116  if (index < scalarNumberTranslation) {
117  return prefix + cmnData<TranslationType>::ScalarDescription(data.Translation(), index, "Translation");
118  }
119  return prefix + cmnData<RotationType>::ScalarDescription(data.Rotation(), index - scalarNumberTranslation, "Rotation");
120  }
121 
122  static double Scalar(const DataType & data, const size_t & index)
123  throw (std::out_of_range)
124  {
125  const size_t scalarNumberTranslation = cmnData<TranslationType>::ScalarNumber(data.Translation());
126  if (index < scalarNumberTranslation) {
127  return cmnData<TranslationType>::Scalar(data.Translation(), index);
128  }
129  return cmnData<RotationType>::Scalar(data.Rotation(), index - scalarNumberTranslation);
130  }
131 };
132 
133 // pass through class for rotation matrix
134 template <class _elementType, bool _rowMajor>
135 class cmnData<vctMatrixRotation3<_elementType, _rowMajor> >
136 {
137 public:
138  enum {IS_SPECIALIZED = 1};
141 
142  static void Copy(DataType & data, const DataType & source)
143  {
144  cmnData<ContainerType>::Copy(data, source);
145  }
146 
147  static void SerializeBinary(const DataType & data, std::ostream & outputStream)
148  throw (std::runtime_error)
149  {
150  cmnData<ContainerType>::SerializeBinary(data, outputStream);
151  }
152 
153  static void DeSerializeBinary(DataType & data, std::istream & inputStream,
154  const cmnDataFormat & localFormat, const cmnDataFormat & remoteFormat)
155  throw (std::runtime_error)
156  {
157  cmnData<ContainerType>::DeSerializeBinary(data, inputStream, localFormat, remoteFormat);
158  }
159 
160  static void SerializeText(const DataType & data, std::ostream & outputStream,
161  const char delimiter = ',')
162  throw (std::runtime_error)
163  {
164  cmnData<ContainerType>::SerializeText(data, outputStream, delimiter);
165  }
166 
167  static std::string HumanReadable(const DataType & data)
168  {
170  }
171 
172  static std::string SerializeDescription(const DataType & data, const char delimiter = ',',
173  const std::string & userDescription = "mr3")
174  {
175  return cmnData<ContainerType>::SerializeDescription(data, delimiter, userDescription);
176  }
177 
178  static void DeSerializeText(DataType & data, std::istream & inputStream,
179  const char delimiter = ',')
180  throw (std::runtime_error)
181  {
182  return cmnData<ContainerType>::DeSerializeText(data, inputStream, delimiter);
183  }
184 
185  static bool ScalarNumberIsFixed(const DataType & data)
186  {
188  }
189 
190  static size_t ScalarNumber(const DataType & data)
191  {
193  }
194 
195  static std::string ScalarDescription(const DataType & data, const size_t & index,
196  const std::string & userDescription = "mr3")
197  throw (std::out_of_range)
198  {
199  return cmnData<ContainerType>::ScalarDescription(data, index, userDescription);
200  }
201 
202  static double Scalar(const DataType & data, const size_t & index)
203  throw (std::out_of_range)
204  {
205  return cmnData<ContainerType>::Scalar(data, index);
206  }
207 };
208 
209 
210 // pass through class for frame4x4
211 template <class _elementType, bool _rowMajor>
212 class cmnData<vctFrame4x4<_elementType, _rowMajor> >
213 {
214 public:
215  enum {IS_SPECIALIZED = 1};
218 
219  static void Copy(DataType & data, const DataType & source)
220  {
221  cmnData<ContainerType>::Copy(data, source);
222  }
223 
224  static void SerializeBinary(const DataType & data, std::ostream & outputStream)
225  throw (std::runtime_error)
226  {
227  cmnData<ContainerType>::SerializeBinary(data, outputStream);
228  }
229 
230  static void DeSerializeBinary(DataType & data, std::istream & inputStream,
231  const cmnDataFormat & localFormat, const cmnDataFormat & remoteFormat)
232  throw (std::runtime_error)
233  {
234  cmnData<ContainerType>::DeSerializeBinary(data, inputStream, localFormat, remoteFormat);
235  }
236 
237  static void SerializeText(const DataType & data, std::ostream & outputStream,
238  const char delimiter = ',')
239  throw (std::runtime_error)
240  {
241  cmnData<ContainerType>::SerializeText(data, outputStream, delimiter);
242  }
243 
244  static std::string HumanReadable(const DataType & data)
245  {
247  }
248 
249  static std::string SerializeDescription(const DataType & data, const char delimiter = ',',
250  const std::string & userDescription = "mr3")
251  {
252  return cmnData<ContainerType>::SerializeDescription(data, delimiter, userDescription);
253  }
254 
255  static void DeSerializeText(DataType & data, std::istream & inputStream,
256  const char delimiter = ',')
257  throw (std::runtime_error)
258  {
259  return cmnData<ContainerType>::DeSerializeText(data, inputStream, delimiter);
260  }
261 
262  static bool ScalarNumberIsFixed(const DataType & data)
263  {
265  }
266 
267  static size_t ScalarNumber(const DataType & data)
268  {
270  }
271 
272  static std::string ScalarDescription(const DataType & data, const size_t & index,
273  const std::string & userDescription = "mr3")
274  throw (std::out_of_range)
275  {
276  return cmnData<ContainerType>::ScalarDescription(data, index, userDescription);
277  }
278 
279  static double Scalar(const DataType & data, const size_t & index)
280  throw (std::out_of_range)
281  {
282  return cmnData<ContainerType>::Scalar(data, index);
283  }
284 };
285 
286 #endif // _vctDataFunctionsTransformations_h
static void SerializeBinary(const DataType &data, std::ostream &outputStream)
Definition: vctDataFunctionsTransformations.h:49
static std::string HumanReadable(const DataType &data)
Definition: vctDataFunctionsTransformations.h:167
vctMatrixRotation3< _elementType, _rowMajor > DataType
Definition: vctDataFunctionsTransformations.h:139
DataType::TranslationType TranslationType
Definition: vctDataFunctionsTransformations.h:41
Definition: cmnDataFormat.h:32
static std::string SerializeDescription(const DataType &data, const char delimiter= ',', const std::string &userDescription="mr3")
Definition: vctDataFunctionsTransformations.h:249
static size_t ScalarNumber(const DataType &data)
Definition: vctDataFunctionsTransformations.h:267
static std::string HumanReadable(const DataType &data)
Definition: vctDataFunctionsTransformations.h:73
static void SerializeText(const DataType &data, std::ostream &outputStream, const char delimiter= ',')
Definition: vctDataFunctionsTransformations.h:237
static size_t ScalarNumber(const DataType &data)
Definition: vctDataFunctionsTransformations.h:190
static std::string SerializeDescription(const DataType &data, const char delimiter= ',', const std::string &userDescription="frm3")
Definition: vctDataFunctionsTransformations.h:78
static void DeSerializeText(DataType &data, std::istream &inputStream, const char delimiter= ',')
Definition: vctDataFunctionsTransformations.h:89
static std::string HumanReadable(const DataType &data)
Definition: vctDataFunctionsTransformations.h:244
vctFrameBase< _rotationType > DataType
Definition: vctDataFunctionsTransformations.h:40
static void SerializeText(const DataType &data, std::ostream &outputStream, const char delimiter= ',')
Definition: vctDataFunctionsTransformations.h:64
static void Copy(DataType &data, const DataType &source)
Definition: vctDataFunctionsTransformations.h:44
static void SerializeBinary(const DataType &data, std::ostream &outputStream)
static void Copy(DataType &data, const DataType &source)
Definition: vctDataFunctionsTransformations.h:142
static std::string ScalarDescription(const DataType &data, const size_t &index, const std::string &userDescription="frm3")
Definition: vctDataFunctionsTransformations.h:110
static size_t ScalarNumber(const DataType &data)
Definition: vctDataFunctionsTransformations.h:104
Template base class for a 4x4 frame.
Definition: vctForwardDeclarations.h:236
static bool ScalarNumberIsFixed(const DataType &data)
Definition: vctDataFunctionsTransformations.h:262
ThisType & Assign(const ThisType &otherFrame)
Definition: vctFrameBase.h:111
static void SerializeText(const DataType &data, std::ostream &outputStream, const char delimiter= ',')
Definition: vctDataFunctionsTransformations.h:160
static void DeSerializeBinary(DataType &data, std::istream &inputStream, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat)
Definition: vctDataFunctionsTransformations.h:153
DataType::RotationType RotationType
Definition: vctDataFunctionsTransformations.h:42
static void SerializeText(const DataType &data, std::ostream &outputStream, const char delimiter= ',')
static void DeSerializeBinary(DataType &data, std::istream &inputStream, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat)
Definition: vctDataFunctionsTransformations.h:230
static std::string SerializeDescription(const DataType &data, const char delimiter= ',', const std::string &userDescription="mr3")
Definition: vctDataFunctionsTransformations.h:172
DataType::ContainerType ContainerType
Definition: vctDataFunctionsTransformations.h:217
static void SerializeBinary(const DataType &data, std::ostream &outputStream)
Definition: vctDataFunctionsTransformations.h:224
static bool ScalarNumberIsFixed(const DataType &data)
static void Copy(DataType &data, const DataType &source)
Definition: vctDataFunctionsTransformations.h:219
const TranslationType & Translation(void) const
Definition: vctFrameBase.h:188
static double Scalar(const DataType &data, const size_t &index)
Definition: vctDataFunctionsTransformations.h:202
static size_t ScalarNumber(const DataType &data)
DataType::ContainerType ContainerType
Definition: vctDataFunctionsTransformations.h:140
static double Scalar(const DataType &data, const size_t index)
Definition: cmnDataFunctions.h:53
static std::string ScalarDescription(const DataType &data, const size_t index, const std::string &userDescription="")
Definition: cmnDataFunctions.h:56
static bool ScalarNumberIsFixed(const DataType &data)
Definition: vctDataFunctionsTransformations.h:98
Implementation of a fixed-size matrix using template metaprogramming.
Definition: vctFixedSizeMatrix.h:52
static std::string ScalarDescription(const DataType &data, const size_t &index, const std::string &userDescription="mr3")
Definition: vctDataFunctionsTransformations.h:195
static std::string HumanReadable(const DataType &data)
static void DeSerializeBinary(DataType &data, std::istream &inputStream, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat)
Definition: vctDataFunctionsTransformations.h:56
std::string ToString(void) const
Definition: vctFrameBase.h:646
vctFrame4x4< _elementType, _rowMajor > DataType
Definition: vctDataFunctionsTransformations.h:216
static void DeSerializeText(DataType &data, std::istream &inputStream, const char delimiter= ',')
Template base class for a frame.
Definition: vctForwardDeclarations.h:232
static std::string SerializeDescription(const DataType &data, const char delimiter, const std::string &userDescription="")
static void DeSerializeBinary(DataType &data, std::istream &inputStream, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat)
static void SerializeBinary(const DataType &data, std::ostream &outputStream)
Definition: vctDataFunctionsTransformations.h:147
static double Scalar(const DataType &data, const size_t &index)
Definition: vctDataFunctionsTransformations.h:122
static void DeSerializeText(DataType &data, std::istream &inputStream, const char delimiter= ',')
Definition: vctDataFunctionsTransformations.h:255
static void Copy(DataType &data, const DataType &source)
static std::string ScalarDescription(const DataType &data, const size_t &index, const std::string &userDescription="mr3")
Definition: vctDataFunctionsTransformations.h:272
static double Scalar(const DataType &data, const size_t &index)
Definition: vctDataFunctionsTransformations.h:279
void CISST_EXPORT cmnDataDeSerializeTextDelimiter(std::istream &inputStream, const char delimiter, const char *className)
const RotationType & Rotation(void) const
Definition: vctFrameBase.h:196
static bool ScalarNumberIsFixed(const DataType &data)
Definition: vctDataFunctionsTransformations.h:185
_rotationType RotationType
Definition: vctFrameBase.h:56
Define a rotation matrix for a space of dimension 3.
Definition: vctForwardDeclarations.h:200
static void DeSerializeText(DataType &data, std::istream &inputStream, const char delimiter= ',')
Definition: vctDataFunctionsTransformations.h:178