15 #ifndef __IPSDKGEOMETRY_CUBE3D_H__ 16 #define __IPSDKGEOMETRY_CUBE3D_H__ 20 #pragma warning (push) 21 #pragma warning (disable : 4251) 24 #include <IPSDKGeometry/Entity/3d/BaseTypedGeometryEntity3d.h> 25 #include <IPSDKGeometry/Entity/3d/Point/Point3d.h> 68 inline void setCenter(
const Point3d<T>& centerPt);
69 inline void setCenter(
const T xCenter,
const T yCenter,
const T zCenter);
70 inline void setHalfLength(
const T halfLength);
71 inline void setAlpha(
const ipReal64 theta);
72 inline void setBeta(
const ipReal64 theta);
73 inline void setChi(
const ipReal64 theta);
74 inline T getHalfLength()
const;
75 inline T getLength()
const;
79 inline T centerX()
const;
80 inline T centerY()
const;
81 inline T centerZ()
const;
122 template <
typename T>
126 return g_coordinateSystem3dType;
129 template <
typename T>
133 return g_entity3dType;
136 template <
typename T>
140 _centerPt = centerPt;
143 template <
typename T>
150 template <
typename T>
154 _centerPt.setCoords(xCenter, yCenter, zCenter);
157 template <
typename T>
161 _halfLength = halfLength;
164 template <
typename T>
171 template <
typename T>
178 template <
typename T>
185 template <
typename T>
192 template <
typename T>
199 template <
typename T>
206 template <
typename T>
213 template <
typename T>
220 template <
typename T>
227 template <
typename T>
231 return 2*_halfLength;
234 template <
typename T>
241 template <
typename T>
248 template <
typename T>
255 template <
typename T>
260 const ipReal64 cosAlpha = std::cos(_alpha);
261 const ipReal64 sinAlpha = std::sin(_alpha);
262 const ipReal64 cosBeta = std::cos(_beta);
263 const ipReal64 sinBeta = std::sin(_beta);
264 const ipReal64 cosChi = std::cos(_chi);
265 const ipReal64 sinChi = std::sin(_chi);
267 const ipReal64 rxx = cosChi*cosBeta;
268 const ipReal64 rxy = cosChi*sinBeta*sinAlpha - sinChi*cosAlpha;
269 const ipReal64 rxz = cosChi*sinBeta*cosAlpha + sinChi*sinAlpha;
270 const ipReal64 ryx = sinChi*cosBeta;
271 const ipReal64 ryy = sinChi*sinBeta*sinAlpha + cosChi*cosAlpha;
272 const ipReal64 ryz = sinChi*sinBeta*cosAlpha - cosChi*sinAlpha;
274 const ipReal64 rzy = cosBeta*sinAlpha;
275 const ipReal64 rzz = cosBeta*cosAlpha;
277 const ipReal64 px = _centerPt._x+_halfLength;
278 const ipReal64 py = _centerPt._y-_halfLength;
279 const ipReal64 pz = _centerPt._z-_halfLength;
281 const T x =
static_cast<T
>(rxx * px + rxy * py + rxz * pz);
282 const T y =
static_cast<T
>(ryx * px + ryy * py + ryz * pz);
283 const T z =
static_cast<T
>(rzx * px + rzy * py + rzz * pz);
288 template <
typename T>
293 const ipReal64 cosAlpha = std::cos(_alpha);
294 const ipReal64 sinAlpha = std::sin(_alpha);
295 const ipReal64 cosBeta = std::cos(_beta);
296 const ipReal64 sinBeta = std::sin(_beta);
297 const ipReal64 cosChi = std::cos(_chi);
298 const ipReal64 sinChi = std::sin(_chi);
300 const ipReal64 rxx = cosChi*cosBeta;
301 const ipReal64 rxy = cosChi*sinBeta*sinAlpha - sinChi*cosAlpha;
302 const ipReal64 rxz = cosChi*sinBeta*cosAlpha + sinChi*sinAlpha;
303 const ipReal64 ryx = sinChi*cosBeta;
304 const ipReal64 ryy = sinChi*sinBeta*sinAlpha + cosChi*cosAlpha;
305 const ipReal64 ryz = sinChi*sinBeta*cosAlpha - cosChi*sinAlpha;
307 const ipReal64 rzy = cosBeta*sinAlpha;
308 const ipReal64 rzz = cosBeta*cosAlpha;
310 const ipReal64 px = _centerPt._x+_halfLength;
311 const ipReal64 py = _centerPt._y+_halfLength;
312 const ipReal64 pz = _centerPt._z-_halfLength;
314 const T x =
static_cast<T
>(rxx * px + rxy * py + rxz * pz);
315 const T y =
static_cast<T
>(ryx * px + ryy * py + ryz * pz);
316 const T z =
static_cast<T
>(rzx * px + rzy * py + rzz * pz);
321 template <
typename T>
326 const ipReal64 cosAlpha = std::cos(_alpha);
327 const ipReal64 sinAlpha = std::sin(_alpha);
328 const ipReal64 cosBeta = std::cos(_beta);
329 const ipReal64 sinBeta = std::sin(_beta);
330 const ipReal64 cosChi = std::cos(_chi);
331 const ipReal64 sinChi = std::sin(_chi);
333 const ipReal64 rxx = cosChi*cosBeta;
334 const ipReal64 rxy = cosChi*sinBeta*sinAlpha - sinChi*cosAlpha;
335 const ipReal64 rxz = cosChi*sinBeta*cosAlpha + sinChi*sinAlpha;
336 const ipReal64 ryx = sinChi*cosBeta;
337 const ipReal64 ryy = sinChi*sinBeta*sinAlpha + cosChi*cosAlpha;
338 const ipReal64 ryz = sinChi*sinBeta*cosAlpha - cosChi*sinAlpha;
340 const ipReal64 rzy = cosBeta*sinAlpha;
341 const ipReal64 rzz = cosBeta*cosAlpha;
343 const ipReal64 px = _centerPt._x+_halfLength;
344 const ipReal64 py = _centerPt._y-_halfLength;
345 const ipReal64 pz = _centerPt._z+_halfLength;
347 const T x =
static_cast<T
>(rxx * px + rxy * py + rxz * pz);
348 const T y =
static_cast<T
>(ryx * px + ryy * py + ryz * pz);
349 const T z =
static_cast<T
>(rzx * px + rzy * py + rzz * pz);
354 template <
typename T>
359 const ipReal64 cosAlpha = std::cos(_alpha);
360 const ipReal64 sinAlpha = std::sin(_alpha);
361 const ipReal64 cosBeta = std::cos(_beta);
362 const ipReal64 sinBeta = std::sin(_beta);
363 const ipReal64 cosChi = std::cos(_chi);
364 const ipReal64 sinChi = std::sin(_chi);
366 const ipReal64 rxx = cosChi*cosBeta;
367 const ipReal64 rxy = cosChi*sinBeta*sinAlpha - sinChi*cosAlpha;
368 const ipReal64 rxz = cosChi*sinBeta*cosAlpha + sinChi*sinAlpha;
369 const ipReal64 ryx = sinChi*cosBeta;
370 const ipReal64 ryy = sinChi*sinBeta*sinAlpha + cosChi*cosAlpha;
371 const ipReal64 ryz = sinChi*sinBeta*cosAlpha - cosChi*sinAlpha;
373 const ipReal64 rzy = cosBeta*sinAlpha;
374 const ipReal64 rzz = cosBeta*cosAlpha;
376 const ipReal64 px = _centerPt._x+_halfLength;
377 const ipReal64 py = _centerPt._y+_halfLength;
378 const ipReal64 pz = _centerPt._z+_halfLength;
380 const T x =
static_cast<T
>(rxx * px + rxy * py + rxz * pz);
381 const T y =
static_cast<T
>(ryx * px + ryy * py + ryz * pz);
382 const T z =
static_cast<T
>(rzx * px + rzy * py + rzz * pz);
387 template <
typename T>
392 const ipReal64 cosAlpha = std::cos(_alpha);
393 const ipReal64 sinAlpha = std::sin(_alpha);
394 const ipReal64 cosBeta = std::cos(_beta);
395 const ipReal64 sinBeta = std::sin(_beta);
396 const ipReal64 cosChi = std::cos(_chi);
397 const ipReal64 sinChi = std::sin(_chi);
399 const ipReal64 rxx = cosChi*cosBeta;
400 const ipReal64 rxy = cosChi*sinBeta*sinAlpha - sinChi*cosAlpha;
401 const ipReal64 rxz = cosChi*sinBeta*cosAlpha + sinChi*sinAlpha;
402 const ipReal64 ryx = sinChi*cosBeta;
403 const ipReal64 ryy = sinChi*sinBeta*sinAlpha + cosChi*cosAlpha;
404 const ipReal64 ryz = sinChi*sinBeta*cosAlpha - cosChi*sinAlpha;
406 const ipReal64 rzy = cosBeta*sinAlpha;
407 const ipReal64 rzz = cosBeta*cosAlpha;
409 const ipReal64 px = _centerPt._x-_halfLength;
410 const ipReal64 py = _centerPt._y-_halfLength;
411 const ipReal64 pz = _centerPt._z-_halfLength;
413 const T x =
static_cast<T
>(rxx * px + rxy * py + rxz * pz);
414 const T y =
static_cast<T
>(ryx * px + ryy * py + ryz * pz);
415 const T z =
static_cast<T
>(rzx * px + rzy * py + rzz * pz);
420 template <
typename T>
425 const ipReal64 cosAlpha = std::cos(_alpha);
426 const ipReal64 sinAlpha = std::sin(_alpha);
427 const ipReal64 cosBeta = std::cos(_beta);
428 const ipReal64 sinBeta = std::sin(_beta);
429 const ipReal64 cosChi = std::cos(_chi);
430 const ipReal64 sinChi = std::sin(_chi);
432 const ipReal64 rxx = cosChi*cosBeta;
433 const ipReal64 rxy = cosChi*sinBeta*sinAlpha - sinChi*cosAlpha;
434 const ipReal64 rxz = cosChi*sinBeta*cosAlpha + sinChi*sinAlpha;
435 const ipReal64 ryx = sinChi*cosBeta;
436 const ipReal64 ryy = sinChi*sinBeta*sinAlpha + cosChi*cosAlpha;
437 const ipReal64 ryz = sinChi*sinBeta*cosAlpha - cosChi*sinAlpha;
439 const ipReal64 rzy = cosBeta*sinAlpha;
440 const ipReal64 rzz = cosBeta*cosAlpha;
442 const ipReal64 px = _centerPt._x-_halfLength;
443 const ipReal64 py = _centerPt._y+_halfLength;
444 const ipReal64 pz = _centerPt._z-_halfLength;
446 const T x =
static_cast<T
>(rxx * px + rxy * py + rxz * pz);
447 const T y =
static_cast<T
>(ryx * px + ryy * py + ryz * pz);
448 const T z =
static_cast<T
>(rzx * px + rzy * py + rzz * pz);
453 template <
typename T>
458 const ipReal64 cosAlpha = std::cos(_alpha);
459 const ipReal64 sinAlpha = std::sin(_alpha);
460 const ipReal64 cosBeta = std::cos(_beta);
461 const ipReal64 sinBeta = std::sin(_beta);
462 const ipReal64 cosChi = std::cos(_chi);
463 const ipReal64 sinChi = std::sin(_chi);
465 const ipReal64 rxx = cosChi*cosBeta;
466 const ipReal64 rxy = cosChi*sinBeta*sinAlpha - sinChi*cosAlpha;
467 const ipReal64 rxz = cosChi*sinBeta*cosAlpha + sinChi*sinAlpha;
468 const ipReal64 ryx = sinChi*cosBeta;
469 const ipReal64 ryy = sinChi*sinBeta*sinAlpha + cosChi*cosAlpha;
470 const ipReal64 ryz = sinChi*sinBeta*cosAlpha - cosChi*sinAlpha;
472 const ipReal64 rzy = cosBeta*sinAlpha;
473 const ipReal64 rzz = cosBeta*cosAlpha;
475 const ipReal64 px = _centerPt._x-_halfLength;
476 const ipReal64 py = _centerPt._y-_halfLength;
477 const ipReal64 pz = _centerPt._z+_halfLength;
479 const T x =
static_cast<T
>(rxx * px + rxy * py + rxz * pz);
480 const T y =
static_cast<T
>(ryx * px + ryy * py + ryz * pz);
481 const T z =
static_cast<T
>(rzx * px + rzy * py + rzz * pz);
486 template <
typename T>
491 const ipReal64 cosAlpha = std::cos(_alpha);
492 const ipReal64 sinAlpha = std::sin(_alpha);
493 const ipReal64 cosBeta = std::cos(_beta);
494 const ipReal64 sinBeta = std::sin(_beta);
495 const ipReal64 cosChi = std::cos(_chi);
496 const ipReal64 sinChi = std::sin(_chi);
498 const ipReal64 rxx = cosChi*cosBeta;
499 const ipReal64 rxy = cosChi*sinBeta*sinAlpha - sinChi*cosAlpha;
500 const ipReal64 rxz = cosChi*sinBeta*cosAlpha + sinChi*sinAlpha;
501 const ipReal64 ryx = sinChi*cosBeta;
502 const ipReal64 ryy = sinChi*sinBeta*sinAlpha + cosChi*cosAlpha;
503 const ipReal64 ryz = sinChi*sinBeta*cosAlpha - cosChi*sinAlpha;
505 const ipReal64 rzy = cosBeta*sinAlpha;
506 const ipReal64 rzz = cosBeta*cosAlpha;
508 const ipReal64 px = _centerPt._x-_halfLength;
509 const ipReal64 py = _centerPt._y+_halfLength;
510 const ipReal64 pz = _centerPt._z+_halfLength;
512 const T x =
static_cast<T
>(rxx * px + rxy * py + rxz * pz);
513 const T y =
static_cast<T
>(ryx * px + ryy * py + ryz * pz);
514 const T z =
static_cast<T
>(rzx * px + rzy * py + rzz * pz);
525 #pragma warning (pop) 527 #endif // __IPSDKGEOMETRY_CUBE3D_H__ T getHalfLength() const
access to the cube parameters
Definition: Cube3d.h:222
T centerZ() const
access to the cube parameters
Definition: Cube3d.h:201
Point3dData< T > bottomLeftBackCorner() const
compute cube corners coordinates For instance, the topLeftFrontCorner() method calculates the square ...
Definition: Cube3d.h:455
Point3dData< T > topLeftFrontCorner() const
compute cube corners coordinates For instance, the topLeftFrontCorner() method calculates the square ...
Definition: Cube3d.h:257
Point3dData< T > bottomRightBackCorner() const
compute cube corners coordinates For instance, the topLeftFrontCorner() method calculates the square ...
Definition: Cube3d.h:488
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
void setCenter(const Point3dData< T > ¢erPt)
access to the cube parameters
Definition: Cube3d.h:138
eCoordinateSystem3dType
Enumerate describing coordinate system 3d type.
Definition: GeometryEntity3dTypes.h:74
Basic operators used for cube 3d management.
ipReal64 _chi
orientation angle along the z axis
Definition: Cube3d.h:115
Point class associated to cartesian 3d coordinates.
Definition: GeometryEntity3dTypes.h:29
#define IPSDK_DECLARE_GEOMETRY_ENTITY_3D(libraryName, className)
Macro allowing to declare a geometry entity 3d.
Definition: GeometryEntity3dHdrMacros.h:131
ipReal64 _alpha
orientation angle along the x axis
Definition: Cube3d.h:109
Point3dData< T > topRightBackCorner() const
compute cube corners coordinates For instance, the topLeftFrontCorner() method calculates the square ...
Definition: Cube3d.h:422
double ipReal64
Base types definition.
Definition: BaseTypes.h:57
Cube.
Definition: GeometryEntity3dTypes.h:52
const Point3dData< T > & getCoords() const
access to point coordinates
Definition: Point3d.h:142
T centerX() const
access to the cube parameters
Definition: Cube3d.h:187
Point3dData< T > bottomRightFrontCorner() const
compute cube corners coordinates For instance, the topLeftFrontCorner() method calculates the square ...
Definition: Cube3d.h:356
Definition of import/export macro for library.
void setChi(const ipReal64 theta)
access to the cube parameters
Definition: Cube3d.h:180
#define IPSDKGEOMETRY_API
Import/Export macro for library IPSDKGeometry.
Definition: IPSDKGeometryExports.h:25
T centerY() const
access to the cube parameters
Definition: Cube3d.h:194
T getLength() const
access to the cube parameters
Definition: Cube3d.h:229
T _halfLength
half length of a side of the cube
Definition: Cube3d.h:106
ipReal64 getBeta() const
access to the cube parameters
Definition: Cube3d.h:243
const Point3dData< T > & center() const
access to the cube parameters
Definition: Cube3d.h:208
ipReal64 getAlpha() const
access to the cube parameters
Definition: Cube3d.h:236
eEntity3dType
Enumerate describing entity 3d type.
Definition: GeometryEntity3dTypes.h:38
ipReal64 getChi() const
access to the cube parameters
Definition: Cube3d.h:250
Point3dData< T > topRightFrontCorner() const
compute cube corners coordinates For instance, the topLeftFrontCorner() method calculates the square ...
Definition: Cube3d.h:290
Point3dData< T > _centerPt
center of the cube
Definition: Cube3d.h:103
void setAlpha(const ipReal64 theta)
access to the cube parameters
Definition: Cube3d.h:166
ipReal64 _beta
orientation angle along the y axis
Definition: Cube3d.h:112
Base class for typed 3d geometry entities.
Definition: BaseTypedGeometryEntity3d.h:27
Cartesian coordinate system.
Definition: GeometryEntity3dTypes.h:76
eCoordinateSystem3dType getCoordinateSystem3dType() const
method allowing to retrieve coordinate system 3d type
Definition: Cube3d.h:124
eEntity3dType getEntity3dType() const
method allowing to retrieve entity 3d type
Definition: Cube3d.h:131
Point3dData< T > topLeftBackCorner() const
compute cube corners coordinates For instance, the topLeftFrontCorner() method calculates the square ...
Definition: Cube3d.h:389
Lightweight structure used to store Point3d data.
Definition: GeometryEntity3dTypes.h:27
3d cube class associated to cartesian 3d coordinates
Definition: Cube3d.h:35
Point3dData< T > bottomLeftFrontCorner() const
compute cube corners coordinates For instance, the topLeftFrontCorner() method calculates the square ...
Definition: Cube3d.h:323
void setBeta(const ipReal64 theta)
access to the cube parameters
Definition: Cube3d.h:173
void setHalfLength(const T halfLength)
access to the cube parameters
Definition: Cube3d.h:159