cisst-saw
Loading...
Searching...
No Matches
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-2018 Johns Hopkins University (JHU), All Rights Reserved.
9
10--- begin cisst license - do not edit ---
11
12This software is provided "as is" under an open source license, with
13no warranty. The complete license can be found in license.txt and
14http://www.cisst.org/cisst/license.txt.
15
16--- end cisst license ---
17*/
18
19#pragma once
20
21#ifndef _vctDataFunctionsTransformations_h
22#define _vctDataFunctionsTransformations_h
23
27
28#if CISST_HAS_JSON
30#endif // CISST_HAS_JSON
31
32template <class _rotationType>
33class cmnData<vctFrameBase<_rotationType> >
34{
35public:
36 enum {IS_SPECIALIZED = 1};
37
41
42 static void Copy(DataType & data, const DataType & source)
43 {
44 data.Assign(source);
45 }
46
47 static void SerializeBinary(const DataType & data, std::ostream & outputStream)
48 CISST_THROW(std::runtime_error)
49 {
50 cmnData<TranslationType>::SerializeBinary(data.Translation(), outputStream);
51 cmnData<RotationType>::SerializeBinary(data.Rotation(), outputStream);
52 }
53
54 static void DeSerializeBinary(DataType & data, std::istream & inputStream,
55 const cmnDataFormat & localFormat, const cmnDataFormat & remoteFormat)
56 CISST_THROW(std::runtime_error)
57 {
58 cmnData<TranslationType>::DeSerializeBinary(data.Translation(), inputStream, localFormat, remoteFormat);
59 cmnData<RotationType>::DeSerializeBinary(data.Rotation(), inputStream, localFormat, remoteFormat);
60 }
61
62 static void SerializeText(const DataType & data, std::ostream & outputStream,
63 const char delimiter = ',')
64 CISST_THROW(std::runtime_error)
65 {
66 cmnData<TranslationType>::SerializeText(data.Translation(), outputStream, delimiter);
67 outputStream << delimiter;
68 cmnData<RotationType>::SerializeText(data.Rotation(), outputStream, delimiter);
69 }
70
71 static std::string HumanReadable(const DataType & data)
72 {
73 return data.ToString();
74 }
75
76 static std::string SerializeDescription(const DataType & data, const char delimiter = ',',
77 const std::string & userDescription = "frm3")
78 {
79 const std::string prefix = (userDescription == "") ? "" : (userDescription + ".");
80 std::stringstream description;
81 description << cmnData<TranslationType>::SerializeDescription(data.Translation(), delimiter, prefix + "Translation")
82 << delimiter
83 << cmnData<RotationType>::SerializeDescription(data.Rotation(), delimiter, prefix + "Rotation");
84 return description.str();
85 }
86
87 static void DeSerializeText(DataType & data, std::istream & inputStream,
88 const char delimiter = ',')
89 CISST_THROW(std::runtime_error)
90 {
91 cmnData<TranslationType>::DeSerializeText(data.Translation(), inputStream, delimiter);
92 cmnDataDeSerializeTextDelimiter(inputStream, delimiter, "vctFrameBase");
93 cmnData<RotationType>::DeSerializeText(data.Rotation(), inputStream, delimiter);
94 }
95
101
102 static size_t ScalarNumber(const DataType & data)
103 {
106 }
107
108 static std::string ScalarDescription(const DataType & data, const size_t & index,
109 const std::string & userDescription = "frm3")
110 CISST_THROW(std::out_of_range)
111 {
112 std::string prefix = (userDescription == "") ? "" : (userDescription + ".");
113 const size_t scalarNumberTranslation = cmnData<TranslationType>::ScalarNumber(data.Translation());
114 if (index < scalarNumberTranslation) {
115 return prefix + cmnData<TranslationType>::ScalarDescription(data.Translation(), index, "Translation");
116 }
117 return prefix + cmnData<RotationType>::ScalarDescription(data.Rotation(), index - scalarNumberTranslation, "Rotation");
118 }
119
120 static double Scalar(const DataType & data, const size_t & index)
121 CISST_THROW(std::out_of_range)
122 {
123 const size_t scalarNumberTranslation = cmnData<TranslationType>::ScalarNumber(data.Translation());
124 if (index < scalarNumberTranslation) {
125 return cmnData<TranslationType>::Scalar(data.Translation(), index);
126 }
127 return cmnData<RotationType>::Scalar(data.Rotation(), index - scalarNumberTranslation);
128 }
129};
130
131// pass through class for rotation matrix
132template <class _elementType, bool _rowMajor>
133class cmnData<vctMatrixRotation3<_elementType, _rowMajor> >
134{
135public:
136 enum {IS_SPECIALIZED = 1};
139
140 static void Copy(DataType & data, const DataType & source)
141 {
142 cmnData<ContainerType>::Copy(data, source);
143 }
144
145 static void SerializeBinary(const DataType & data, std::ostream & outputStream)
146 CISST_THROW(std::runtime_error)
147 {
148 cmnData<ContainerType>::SerializeBinary(data, outputStream);
149 }
150
151 static void DeSerializeBinary(DataType & data, std::istream & inputStream,
152 const cmnDataFormat & localFormat, const cmnDataFormat & remoteFormat)
153 CISST_THROW(std::runtime_error)
154 {
155 cmnData<ContainerType>::DeSerializeBinary(data, inputStream, localFormat, remoteFormat);
156 }
157
158 static void SerializeText(const DataType & data, std::ostream & outputStream,
159 const char delimiter = ',')
160 CISST_THROW(std::runtime_error)
161 {
162 cmnData<ContainerType>::SerializeText(data, outputStream, delimiter);
163 }
164
165 static std::string HumanReadable(const DataType & data)
166 {
168 }
169
170 static std::string SerializeDescription(const DataType & data, const char delimiter = ',',
171 const std::string & userDescription = "mr3")
172 {
173 return cmnData<ContainerType>::SerializeDescription(data, delimiter, userDescription);
174 }
175
176 static void DeSerializeText(DataType & data, std::istream & inputStream,
177 const char delimiter = ',')
178 CISST_THROW(std::runtime_error)
179 {
180 return cmnData<ContainerType>::DeSerializeText(data, inputStream, delimiter);
181 }
182
183 static bool ScalarNumberIsFixed(const DataType & data)
184 {
186 }
187
188 static size_t ScalarNumber(const DataType & data)
189 {
191 }
192
193 static std::string ScalarDescription(const DataType & data, const size_t & index,
194 const std::string & userDescription = "mr3")
195 CISST_THROW(std::out_of_range)
196 {
197 return cmnData<ContainerType>::ScalarDescription(data, index, userDescription);
198 }
199
200 static double Scalar(const DataType & data, const size_t & index)
201 CISST_THROW(std::out_of_range)
202 {
203 return cmnData<ContainerType>::Scalar(data, index);
204 }
205};
206
207
208// pass through class for frame4x4
209template <class _elementType, bool _rowMajor>
210class cmnData<vctFrame4x4<_elementType, _rowMajor> >
211{
212public:
213 enum {IS_SPECIALIZED = 1};
216
217 static void Copy(DataType & data, const DataType & source)
218 {
219 cmnData<ContainerType>::Copy(data, source);
220 }
221
222 static void SerializeBinary(const DataType & data, std::ostream & outputStream)
223 CISST_THROW(std::runtime_error)
224 {
225 cmnData<ContainerType>::SerializeBinary(data, outputStream);
226 }
227
228 static void DeSerializeBinary(DataType & data, std::istream & inputStream,
229 const cmnDataFormat & localFormat, const cmnDataFormat & remoteFormat)
230 CISST_THROW(std::runtime_error)
231 {
232 cmnData<ContainerType>::DeSerializeBinary(data, inputStream, localFormat, remoteFormat);
233 }
234
235 static void SerializeText(const DataType & data, std::ostream & outputStream,
236 const char delimiter = ',')
237 CISST_THROW(std::runtime_error)
238 {
239 cmnData<ContainerType>::SerializeText(data, outputStream, delimiter);
240 }
241
242 static std::string HumanReadable(const DataType & data)
243 {
245 }
246
247 static std::string SerializeDescription(const DataType & data, const char delimiter = ',',
248 const std::string & userDescription = "mr3")
249 {
250 return cmnData<ContainerType>::SerializeDescription(data, delimiter, userDescription);
251 }
252
253 static void DeSerializeText(DataType & data, std::istream & inputStream,
254 const char delimiter = ',')
255 CISST_THROW(std::runtime_error)
256 {
257 return cmnData<ContainerType>::DeSerializeText(data, inputStream, delimiter);
258 }
259
260 static bool ScalarNumberIsFixed(const DataType & data)
261 {
263 }
264
265 static size_t ScalarNumber(const DataType & data)
266 {
268 }
269
270 static std::string ScalarDescription(const DataType & data, const size_t & index,
271 const std::string & userDescription = "mr3")
272 CISST_THROW(std::out_of_range)
273 {
274 return cmnData<ContainerType>::ScalarDescription(data, index, userDescription);
275 }
276
277 static double Scalar(const DataType & data, const size_t & index)
278 CISST_THROW(std::out_of_range)
279 {
280 return cmnData<ContainerType>::Scalar(data, index);
281 }
282};
283
284#endif // _vctDataFunctionsTransformations_h
static std::string ScalarDescription(const DataType &data, const size_t &index, const std::string &userDescription="mr3") CISST_THROW(std
Definition vctDataFunctionsTransformations.h:270
static void SerializeText(const DataType &data, std::ostream &outputStream, const char delimiter=',') CISST_THROW(std
Definition vctDataFunctionsTransformations.h:235
static size_t ScalarNumber(const DataType &data)
Definition vctDataFunctionsTransformations.h:265
static void Copy(DataType &data, const DataType &source)
Definition vctDataFunctionsTransformations.h:217
static void SerializeBinary(const DataType &data, std::ostream &outputStream) CISST_THROW(std
Definition vctDataFunctionsTransformations.h:222
static std::string HumanReadable(const DataType &data)
Definition vctDataFunctionsTransformations.h:242
static void DeSerializeBinary(DataType &data, std::istream &inputStream, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat) CISST_THROW(std
Definition vctDataFunctionsTransformations.h:228
static bool ScalarNumberIsFixed(const DataType &data)
Definition vctDataFunctionsTransformations.h:260
static std::string SerializeDescription(const DataType &data, const char delimiter=',', const std::string &userDescription="mr3")
Definition vctDataFunctionsTransformations.h:247
vctFrame4x4< _elementType, _rowMajor > DataType
Definition vctDataFunctionsTransformations.h:214
@ IS_SPECIALIZED
Definition vctDataFunctionsTransformations.h:213
static double Scalar(const DataType &data, const size_t &index) CISST_THROW(std
Definition vctDataFunctionsTransformations.h:277
static void DeSerializeText(DataType &data, std::istream &inputStream, const char delimiter=',') CISST_THROW(std
Definition vctDataFunctionsTransformations.h:253
DataType::ContainerType ContainerType
Definition vctDataFunctionsTransformations.h:215
static std::string ScalarDescription(const DataType &data, const size_t &index, const std::string &userDescription="frm3") CISST_THROW(std
Definition vctDataFunctionsTransformations.h:108
DataType::TranslationType TranslationType
Definition vctDataFunctionsTransformations.h:39
static void SerializeText(const DataType &data, std::ostream &outputStream, const char delimiter=',') CISST_THROW(std
Definition vctDataFunctionsTransformations.h:62
static void DeSerializeBinary(DataType &data, std::istream &inputStream, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat) CISST_THROW(std
Definition vctDataFunctionsTransformations.h:54
static size_t ScalarNumber(const DataType &data)
Definition vctDataFunctionsTransformations.h:102
static std::string SerializeDescription(const DataType &data, const char delimiter=',', const std::string &userDescription="frm3")
Definition vctDataFunctionsTransformations.h:76
static void DeSerializeText(DataType &data, std::istream &inputStream, const char delimiter=',') CISST_THROW(std
Definition vctDataFunctionsTransformations.h:87
static double Scalar(const DataType &data, const size_t &index) CISST_THROW(std
Definition vctDataFunctionsTransformations.h:120
static void SerializeBinary(const DataType &data, std::ostream &outputStream) CISST_THROW(std
Definition vctDataFunctionsTransformations.h:47
vctFrameBase< _rotationType > DataType
Definition vctDataFunctionsTransformations.h:38
DataType::RotationType RotationType
Definition vctDataFunctionsTransformations.h:40
@ IS_SPECIALIZED
Definition vctDataFunctionsTransformations.h:36
static void Copy(DataType &data, const DataType &source)
Definition vctDataFunctionsTransformations.h:42
static std::string HumanReadable(const DataType &data)
Definition vctDataFunctionsTransformations.h:71
static bool ScalarNumberIsFixed(const DataType &data)
Definition vctDataFunctionsTransformations.h:96
static std::string HumanReadable(const DataType &data)
Definition vctDataFunctionsTransformations.h:165
static void DeSerializeText(DataType &data, std::istream &inputStream, const char delimiter=',') CISST_THROW(std
Definition vctDataFunctionsTransformations.h:176
static size_t ScalarNumber(const DataType &data)
Definition vctDataFunctionsTransformations.h:188
vctMatrixRotation3< _elementType, _rowMajor > DataType
Definition vctDataFunctionsTransformations.h:137
DataType::ContainerType ContainerType
Definition vctDataFunctionsTransformations.h:138
static double Scalar(const DataType &data, const size_t &index) CISST_THROW(std
Definition vctDataFunctionsTransformations.h:200
static std::string ScalarDescription(const DataType &data, const size_t &index, const std::string &userDescription="mr3") CISST_THROW(std
Definition vctDataFunctionsTransformations.h:193
static std::string SerializeDescription(const DataType &data, const char delimiter=',', const std::string &userDescription="mr3")
Definition vctDataFunctionsTransformations.h:170
static void DeSerializeBinary(DataType &data, std::istream &inputStream, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat) CISST_THROW(std
Definition vctDataFunctionsTransformations.h:151
static bool ScalarNumberIsFixed(const DataType &data)
Definition vctDataFunctionsTransformations.h:183
static void Copy(DataType &data, const DataType &source)
Definition vctDataFunctionsTransformations.h:140
static void SerializeBinary(const DataType &data, std::ostream &outputStream) CISST_THROW(std
Definition vctDataFunctionsTransformations.h:145
static void SerializeText(const DataType &data, std::ostream &outputStream, const char delimiter=',') CISST_THROW(std
Definition vctDataFunctionsTransformations.h:158
@ IS_SPECIALIZED
Definition vctDataFunctionsTransformations.h:136
Definition cmnDataFormat.h:30
Definition cmnDataFunctions.h:51
static void Copy(DataType &data, const DataType &source)
static size_t DeSerializeBinary(DataType &data, const char *buffer, size_t bufferSize, const cmnDataFormat &CMN_UNUSED(localFormat), const cmnDataFormat &CMN_UNUSED(remoteFormat))
static std::string SerializeDescription(const DataType &data, const char delimiter, const std::string &userDescription="")
static std::string HumanReadable(const DataType &data)
static bool ScalarNumberIsFixed(const DataType &data)
static size_t SerializeBinary(const DataType &data, char *buffer, size_t bufferSize)
static std::string static ScalarDescription(const DataType &data, const size_t index, const std::string &userDescription="") CISST_THROW(std double static Scalar(const DataType &data, const size_t index) CISST_THROW(std size_t ScalarNumber(const DataType &data)
Definition cmnDataFunctions.h:162
Template base class for a 4x4 frame.
Definition vctFrame4x4.h:51
vctFixedSizeMatrix< value_type, ROWS, COLS, _rowMajor > ContainerType
Definition vctFrame4x4.h:59
Template base class for a frame.
Definition vctFrameBase.h:49
_rotationType RotationType
Definition vctFrameBase.h:54
vctFixedSizeVector< value_type, DIMENSION > TranslationType
Definition vctFrameBase.h:55
const RotationType & Rotation(void) const
Definition vctFrameBase.h:205
ThisType & Assign(const ThisType &otherFrame)
Definition vctFrameBase.h:109
const TranslationType & Translation(void) const
Definition vctFrameBase.h:186
std::string ToString(void) const
Definition vctFrameBase.h:666
Define a rotation matrix for a space of dimension 3.
Definition vctMatrixRotation3.h:51
vctFixedSizeMatrix< value_type, ROWS, COLS, _rowMajor > ContainerType
Definition vctMatrixRotation3.h:57
#define CISST_THROW(exceptionParameter)
Somewhat portable compilation warning message. This works with very recent versions of gcc (4....
Definition cmnPortability.h:559
STL namespace.