34#ifndef SOMAIO_TRANSFORMATION_TRANSFORMATION_H
35#define SOMAIO_TRANSFORMATION_TRANSFORMATION_H
45#include <cartobase/smart/rcptr.h>
46#include <cartobase/type/types.h>
84 virtual std::vector<double>
85 transform(
const std::vector<double> & pos )
const = 0;
86 virtual std::vector<float>
87 transform(
const std::vector<float> & pos )
const;
88 virtual std::vector<int>
transform(
const std::vector<int> & pos )
const;
90 virtual std::vector<double>
92 virtual std::vector<float>
94 virtual std::vector<int>
114 throw std::logic_error(
"not implemented");
121 template <
typename T>
122 static std::vector<T>
vadd(
const std::vector<T> & v1,
123 const std::vector<T> & v2 );
125 template <
typename T>
126 static std::vector<T>
vsub(
const std::vector<T> & v1,
127 const std::vector<T> & v2 );
129 template <
typename T>
130 static std::vector<T>
vadd(
const std::vector<T> & v1,
133 template <
typename T>
134 static std::vector<T>
vsub(
const std::vector<T> & v1,
137 template <
typename T>
138 static std::vector<T>
vadd(
const T & v1,
139 const std::vector<T> & v2 );
141 template <
typename T>
142 static std::vector<T>
vsub(
const T & v1,
143 const std::vector<T> & v2 );
166 virtual std::vector<double>
167 transform(
const std::vector<double> & pos )
const;
168 virtual std::vector<float>
169 transform(
const std::vector<float> & pos )
const;
170 virtual std::vector<int>
transform(
const std::vector<int> & pos )
const;
172 virtual std::vector<double>
174 virtual std::vector<float>
176 virtual std::vector<int>
194 inline std::vector<float>
197 std::vector<double> tr
198 =
transform( std::vector<double>( pos.begin(), pos.end() ) );
199 return std::vector<float>( tr.begin(), tr.end() );
203 inline std::vector<int>
206 std::vector<double> tr
207 =
transform( std::vector<double>( pos.begin(), pos.end() ) );
208 std::vector<int> itr( tr.size() );
209 for(
size_t i=0; i<tr.size(); ++i )
210 itr[i] =
int( rint( tr[i] ) );
216 inline std::vector<double>
219 std::vector<double> tr =
transform( pos );
220 std::vector<double> tr0
221 =
transform( std::vector<double>( pos.size(), 0. ) );
222 for(
size_t i=0; i<tr.size(); ++i )
228 inline std::vector<float>
231 std::vector<double> tr
233 return std::vector<float>( tr.begin(), tr.end() );
237 inline std::vector<int>
240 std::vector<double> tr
242 std::vector<int> itr( tr.size() );
243 for(
size_t i=0; i<tr.size(); ++i )
244 itr[i] =
int( rint( tr[i] ) );
305 return Point3df( (
float) transformed[0], (
float) transformed[1],
306 (
float) transformed[2] );
313 return transform( pos[0], pos[1], pos[2] );
321 return Point3df( (
float) transformed[0], (
float) transformed[1],
322 (
float) transformed[2] );
330 return Point3d( (int16_t) rint( transformed[0] ),
331 (int16_t) rint( transformed[1] ),
332 (int16_t) rint( transformed[2] ) );
341 return Point3di( (
int) rint( transformed[0] ),
342 (
int) rint( transformed[1] ),
343 (
int) rint( transformed[2] ) );
351 return Point3di( (
int) rint( transformed[0] ),
352 (
int) rint( transformed[1] ),
353 (
int) rint( transformed[2] ) );
357 inline std::vector<double>
360 std::vector<double> tr = pos;
369 inline std::vector<float>
372 std::vector<float> tr = pos;
381 inline std::vector<int>
384 std::vector<int> tr = pos;
393 inline std::vector<double>
396 std::vector<double> tr = pos;
406 inline std::vector<float>
409 std::vector<float> tr = pos;
419 inline std::vector<int>
422 std::vector<int> tr = pos;
433 template <
typename T>
436 const std::vector<T> & v2 )
438 size_t n1 = v1.size(), n2 = v2.size(), n3 = std::max( n1, n2 ),
439 n4 = std::min( n1, n2 ), i;
440 std::vector<T> res( n3, 0 );
442 for( i=0; i<n4; ++i )
443 res[i] = v1[i] + v2[i];
455 template <
typename T>
458 const std::vector<T> & v2 )
460 size_t n1 = v1.size(), n2 = v2.size(), n3 = std::max( n1, n2 ),
461 n4 = std::min( n1, n2 ), i;
462 std::vector<T> res( n3, 0 );
464 for( i=0; i<n4; ++i )
465 res[i] = v1[i] - v2[i];
477 template <
typename T>
482 unsigned n1 = v1.size(), i;
483 std::vector<T> res( n1, 0 );
485 for( i=0; i<n1; ++i )
492 template <
typename T>
497 unsigned n1 = v1.size(), i;
498 std::vector<T> res( n1, 0 );
500 for( i=0; i<n1; ++i )
507 template <
typename T>
510 const std::vector<T> & v2 )
512 unsigned n1 = v2.size(), i;
513 std::vector<T> res( n1, 0 );
515 for( i=0; i<n1; ++i )
522 template <
typename T>
525 const std::vector<T> & v2 )
527 unsigned n1 = v2.size(), i;
528 std::vector<T> res( n1, 0 );
530 for( i=0; i<n1; ++i )
538 template <>
inline std::string DataTypeCode<Transformation3d>::objectType()
540 return "Transformation3d";
543 template <>
inline std::string DataTypeCode<Transformation3d>::dataType()
548 template <>
inline std::string DataTypeCode<Transformation3d>::name()
550 return "Transformation3d";
AimsVector< float, 3 > Point3df
AimsVector< int16_t, 3 > Point3d
AimsVector< int32_t, 3 > Point3di
AimsVector< double, 3 > Point3dd