29#include "common/support/CommonSupportStream.h"
32#include "spat/Frame.h"
33#include "spat/Matrix.h"
35#include "spat/Sphere.h"
45 template<
typename Valtype>
48 template<
typename Valtype>
51 template<
typename Valtype>
54 template<
typename Valtype>
57 template<
typename Valtype>
60 template<
typename Valtype>
63 template<
typename Valtype>
64 std::ostream& operator << ( std::ostream& os,
const Vector<Valtype>& v );
66 template<
typename Valtype>
69 template<
typename Valtype>
72 template<
typename Valtype>
75 template<
typename Valtype,
typename ValtypeT>
78 template<
typename Valtype,
typename ValtypeT>
81 template<
typename Valtype,
typename ValtypeT>
84 template<
typename Valtype,
typename ValtypeT>
87 template<
typename Valtype,
typename ValtypeT>
90 template<
typename Valtype,
typename ValtypeT>
93 template<
typename Valtype>
94 std::ostream& operator << ( std::ostream& os,
const Box<Valtype>& b );
96 template<
typename Valtype>
97 std::istream& operator >> ( std::istream& is,
Box<Valtype>& b );
99 template<
typename Valtype>
100 std::ostream& operator << ( std::ostream& os,
const Rect<Valtype>& r );
102 template<
typename Valtype>
103 std::istream& operator >> ( std::istream& is,
Rect<Valtype>& r );
105 template<
typename Valtype>
106 std::ostream& operator << ( std::ostream& os,
const Sphere<Valtype>& s );
108 template<
typename Valtype>
112 template<
typename Valtype,
typename ValtypeT>
118 template<
typename Valtype,
119 const unsigned short nCols,
120 const unsigned short nRows >
123 template<
typename Valtype,
124 const unsigned short nCols,
125 const unsigned short nRows >
130template<
typename Valtype>
132 os <<
"Position( " << p.x <<
", " << p.y <<
", " << p.z <<
" )";
136template<
typename Valtype>
139 common::StreamInHead( is,
"Position" );
143 is >> c; assert( c ==
',' );
145 is >> c; assert( c ==
',' );
147 is >> c; assert( c ==
')' );
151template<
typename Valtype>
153 os <<
"Position2D( " << p.x <<
", " << p.y <<
" )";
157template<
typename Valtype>
160 common::StreamInHead( is,
"Position2D" );
164 is >> c; assert( c ==
',' );
166 is >> c; assert( c ==
')' );
170template<
typename Valtype>
172 os <<
"PositionH( " << p.x <<
", " << p.y <<
", " << p.z <<
", " << p.w <<
" )";
176template<
typename Valtype>
179 common::StreamInHead( is,
"PositionH" );
183 is >> c; assert( c ==
',' );
185 is >> c; assert( c ==
',' );
187 is >> c; assert( c ==
',' );
189 is >> c; assert( c ==
')' );
193template<
typename Valtype>
194std::ostream& operator << ( std::ostream& os,
const Vector<Valtype>& v ){
195 os <<
"Vector( " << v.dx <<
", " << v.dy <<
", " << v.dz <<
" )";
199template<
typename Valtype>
202 common::StreamInHead( is,
"Vector" );
206 is >> c; assert( c ==
',' );
208 is >> c; assert( c ==
',' );
210 is >> c; assert( c ==
')' );
214template<
typename Valtype>
216 os <<
"Vector2D( " << v.dx <<
", " << v.dy <<
" )";
220template<
typename Valtype>
223 common::StreamInHead( is,
"Vector2D" );
227 is >> c; assert( c ==
',' );
229 is >> c; assert( c ==
')' );
233template<
typename Valtype,
typename ValtypeT>
235 os <<
"VectorBundle( " << vb.P <<
", " << vb.T <<
" )";
239template<
typename Valtype,
typename ValtypeT>
242 common::StreamInHead( is,
"VectorBundle" );
246 is >> c; assert( c ==
',' );
248 is >> c; assert( c ==
')' );
252template<
typename Valtype,
typename ValtypeT>
254 os <<
"VectorBundle2( " << vb.P <<
", " << vb.T <<
", " << vb.N <<
" )";
258template<
typename Valtype,
typename ValtypeT>
261 common::StreamInHead( is,
"VectorBundle2" );
265 is >> c; assert( c ==
',' );
267 is >> c; assert( c ==
',' );
269 is >> c; assert( c ==
')' );
273template<
typename Valtype,
typename ValtypeT>
275 os <<
"Frame( " << f.P <<
", " << f.T <<
", " << f.N <<
", " << f.B <<
" )";
279template<
typename Valtype,
typename ValtypeT>
282 common::StreamInHead( is,
"Frame" );
286 is >> c; assert( c ==
',' );
288 is >> c; assert( c ==
',' );
290 is >> c; assert( c ==
',' );
292 is >> c; assert( c ==
')' );
296template<
typename Valtype>
297std::ostream& operator << ( std::ostream& os,
const Box<Valtype>& b ){
298 os <<
"Box( " << b.m_WidthX <<
", " << b.m_WidthY <<
", " << b.m_WidthZ <<
" )";
302template<
typename Valtype>
303std::istream& operator >> ( std::istream& is,
Box<Valtype>& b )
305 common::StreamInHead( is,
"Box" );
309 is >> c; assert( c ==
',' );
311 is >> c; assert( c ==
',' );
313 is >> c; assert( c ==
')' );
317template<
typename Valtype>
318std::ostream& operator << ( std::ostream& os,
const Rect<Valtype>& r ){
319 os <<
"Rect( " << r.m_Width <<
", " << r.m_Height <<
" )";
323template<
typename Valtype>
324std::istream& operator >> ( std::istream& is,
Rect<Valtype>& r )
326 common::StreamInHead( is,
"Rect" );
330 is >> c; assert( c ==
',' );
332 is >> c; assert( c ==
')' );
336template<
typename Valtype>
337std::ostream& operator << ( std::ostream& os,
const Sphere<Valtype>& s ){
338 os <<
"Sphere( " << s.c <<
", " << s.r <<
" )";
342template<
typename Valtype>
345 common::StreamInHead( is,
"Sphere" );
349 is >> c; assert( c ==
',' );
351 is >> c; assert( c ==
')' );
355template<
typename Valtype,
typename ValtypeT>
357 os <<
"T*T: " << f.T*f.T <<
", T*N: " << f.T*f.N <<
", T*B: " << f.T*f.B << std::endl;
358 os <<
"N*T: " << f.N*f.T <<
", N*N: " << f.N*f.N <<
", T*B: " << f.N*f.B << std::endl;
359 os <<
"B*T: " << f.B*f.T <<
", B*N: " << f.B*f.N <<
", B*B: " << f.B*f.B << std::endl;
362template<
typename Valtype,
363 const unsigned short nCols,
364 const unsigned short nRows >
367 for(
unsigned short i = 0; i < nRows; ++i ){
369 for(
unsigned short j = 0; j < nCols; ++j ){
370 os <<
"(" << j <<
"," << i <<
") = " << matrix( j, i ) <<
"\t";
377template<
typename Valtype,
378 const unsigned short nCols,
379 const unsigned short nRows >
382 throw std::logic_error{
"Not implemented" };
Matrix template for arbitrary dimensions and value type.
Definition Matrix.h:63
The namespace provides classes and methods for spatial computations.
Definition Box.h:32
Axis aligned box.
Definition Box.h:41
A Frame ("TNBFrame") describes a location in 3d space and an orientation using a right handed coordin...
Definition Frame.h:52
Implements a 2D - position in cartesian coordinates.
Definition Position2D.h:45
Implements a 4D - position in homogenous coordinates.
Definition PositionH.h:41
Implements a 3D - position in cartesian coordinates.
Definition Position.h:46
Axis aligned rectangle.
Definition Rect.h:41
Sphere with center and radius.
Definition Sphere.h:39
Implements a 2D - vector in cartesian coordinates.
Definition Vector2D.h:46
Implements a tangential space bundle.
Definition VectorBundle2.h:43
Implements a Vector bundle.
Definition VectorBundle.h:42
Implements a 3D - vector in cartesian coordinates.
Definition Vector.h:48