HDualQuaternion.h 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. /***********************************************************
  2. * File generated by the HALCON-Compiler hcomp version 20.11
  3. * Usage: Interface to C++
  4. *
  5. * Software by: MVTec Software GmbH, www.mvtec.com
  6. ***********************************************************/
  7. #ifndef HCPP_HDUALQUATERNION
  8. #define HCPP_HDUALQUATERNION
  9. namespace HalconCpp
  10. {
  11. // Represents a dual quaternion.
  12. class LIntExport HDualQuaternion : public HDataBase
  13. {
  14. public:
  15. // Create an uninitialized instance
  16. HDualQuaternion():HDataBase() {}
  17. // Copy constructor
  18. HDualQuaternion(const HDualQuaternion& source) : HDataBase(source) {}
  19. // Constructor from HTuple
  20. explicit HDualQuaternion(const HTuple& tuple) : HDataBase(tuple) {}
  21. // Deep copy of all data represented by this object instance
  22. HDualQuaternion Clone() const;
  23. /*****************************************************************************
  24. * Operator-based class constructors
  25. *****************************************************************************/
  26. // pose_to_dual_quat: Convert a 3D pose to a unit dual quaternion.
  27. explicit HDualQuaternion(const HPose& Pose);
  28. // screw_to_dual_quat: Convert a screw into a dual quaternion.
  29. explicit HDualQuaternion(const HString& ScrewFormat, const HTuple& AxisDirectionX, const HTuple& AxisDirectionY, const HTuple& AxisDirectionZ, const HTuple& AxisMomentOrPointX, const HTuple& AxisMomentOrPointY, const HTuple& AxisMomentOrPointZ, const HTuple& Rotation, const HTuple& Translation);
  30. // screw_to_dual_quat: Convert a screw into a dual quaternion.
  31. explicit HDualQuaternion(const HString& ScrewFormat, double AxisDirectionX, double AxisDirectionY, double AxisDirectionZ, double AxisMomentOrPointX, double AxisMomentOrPointY, double AxisMomentOrPointZ, double Rotation, double Translation);
  32. // screw_to_dual_quat: Convert a screw into a dual quaternion.
  33. explicit HDualQuaternion(const char* ScrewFormat, double AxisDirectionX, double AxisDirectionY, double AxisDirectionZ, double AxisMomentOrPointX, double AxisMomentOrPointY, double AxisMomentOrPointZ, double Rotation, double Translation);
  34. #ifdef _WIN32
  35. // screw_to_dual_quat: Convert a screw into a dual quaternion.
  36. explicit HDualQuaternion(const wchar_t* ScrewFormat, double AxisDirectionX, double AxisDirectionY, double AxisDirectionZ, double AxisMomentOrPointX, double AxisMomentOrPointY, double AxisMomentOrPointZ, double Rotation, double Translation);
  37. #endif
  38. /*****************************************************************************
  39. * Operator overloads (non-member overloads reside in HOperatorOverloads.h)
  40. *****************************************************************************/
  41. // Convert to matrix
  42. operator HHomMat3D() const;
  43. // Convert to pose
  44. operator HPose() const;
  45. // Conjugate dual quaternion
  46. HDualQuaternion operator ~ () const;
  47. // Create a dual quaternion from eight double values, where
  48. // (RealW, RealX, RealY, RealZ) are the elements of the real part and
  49. // (DualW, DualX, DualY, DualZ) are the elements of the dual part.
  50. explicit HDualQuaternion(double RealW, double RealX,
  51. double RealY, double RealZ,
  52. double DualW, double DualX,
  53. double DualY, double DualZ);
  54. // Create a dual quaternion from two quaternions for the real and the
  55. // dual part.
  56. explicit HDualQuaternion(HQuaternion QuatReal, HQuaternion QuatDual);
  57. /***************************************************************************
  58. * Operators *
  59. ***************************************************************************/
  60. // Deserialize a serialized dual quaternion.
  61. void DeserializeDualQuat(const HSerializedItem& SerializedItemHandle);
  62. // Multiply two dual quaternions.
  63. static HDualQuaternionArray DualQuatCompose(const HDualQuaternionArray& DualQuaternionLeft, const HDualQuaternionArray& DualQuaternionRight);
  64. // Multiply two dual quaternions.
  65. HDualQuaternion DualQuatCompose(const HDualQuaternion& DualQuaternionRight) const;
  66. // Conjugate a dual quaternion.
  67. static HDualQuaternionArray DualQuatConjugate(const HDualQuaternionArray& DualQuaternion);
  68. // Conjugate a dual quaternion.
  69. HDualQuaternion DualQuatConjugate() const;
  70. // Interpolate two dual quaternions.
  71. HDualQuaternionArray DualQuatInterpolate(const HDualQuaternion& DualQuaternionEnd, const HTuple& InterpPos) const;
  72. // Interpolate two dual quaternions.
  73. HDualQuaternion DualQuatInterpolate(const HDualQuaternion& DualQuaternionEnd, double InterpPos) const;
  74. // Normalize a dual quaternion.
  75. static HDualQuaternionArray DualQuatNormalize(const HDualQuaternionArray& DualQuaternion);
  76. // Normalize a dual quaternion.
  77. HDualQuaternion DualQuatNormalize() const;
  78. // Convert a unit dual quaternion into a homogeneous transformation matrix.
  79. HHomMat3D DualQuatToHomMat3d() const;
  80. // Convert a dual quaternion to a 3D pose.
  81. static HPoseArray DualQuatToPose(const HDualQuaternionArray& DualQuaternion);
  82. // Convert a dual quaternion to a 3D pose.
  83. HPose DualQuatToPose() const;
  84. // Convert a unit dual quaternion into a screw.
  85. void DualQuatToScrew(const HString& ScrewFormat, double* AxisDirectionX, double* AxisDirectionY, double* AxisDirectionZ, double* AxisMomentOrPointX, double* AxisMomentOrPointY, double* AxisMomentOrPointZ, double* Rotation, double* Translation) const;
  86. // Convert a unit dual quaternion into a screw.
  87. void DualQuatToScrew(const char* ScrewFormat, double* AxisDirectionX, double* AxisDirectionY, double* AxisDirectionZ, double* AxisMomentOrPointX, double* AxisMomentOrPointY, double* AxisMomentOrPointZ, double* Rotation, double* Translation) const;
  88. #ifdef _WIN32
  89. // Convert a unit dual quaternion into a screw.
  90. void DualQuatToScrew(const wchar_t* ScrewFormat, double* AxisDirectionX, double* AxisDirectionY, double* AxisDirectionZ, double* AxisMomentOrPointX, double* AxisMomentOrPointY, double* AxisMomentOrPointZ, double* Rotation, double* Translation) const;
  91. #endif
  92. // Transform a 3D line with a unit dual quaternion.
  93. void DualQuatTransLine3d(const HString& LineFormat, const HTuple& LineDirectionX, const HTuple& LineDirectionY, const HTuple& LineDirectionZ, const HTuple& LineMomentOrPointX, const HTuple& LineMomentOrPointY, const HTuple& LineMomentOrPointZ, HTuple* TransLineDirectionX, HTuple* TransLineDirectionY, HTuple* TransLineDirectionZ, HTuple* TransLineMomentOrPointX, HTuple* TransLineMomentOrPointY, HTuple* TransLineMomentOrPointZ) const;
  94. // Transform a 3D line with a unit dual quaternion.
  95. void DualQuatTransLine3d(const HString& LineFormat, double LineDirectionX, double LineDirectionY, double LineDirectionZ, double LineMomentOrPointX, double LineMomentOrPointY, double LineMomentOrPointZ, double* TransLineDirectionX, double* TransLineDirectionY, double* TransLineDirectionZ, double* TransLineMomentOrPointX, double* TransLineMomentOrPointY, double* TransLineMomentOrPointZ) const;
  96. // Transform a 3D line with a unit dual quaternion.
  97. void DualQuatTransLine3d(const char* LineFormat, double LineDirectionX, double LineDirectionY, double LineDirectionZ, double LineMomentOrPointX, double LineMomentOrPointY, double LineMomentOrPointZ, double* TransLineDirectionX, double* TransLineDirectionY, double* TransLineDirectionZ, double* TransLineMomentOrPointX, double* TransLineMomentOrPointY, double* TransLineMomentOrPointZ) const;
  98. #ifdef _WIN32
  99. // Transform a 3D line with a unit dual quaternion.
  100. void DualQuatTransLine3d(const wchar_t* LineFormat, double LineDirectionX, double LineDirectionY, double LineDirectionZ, double LineMomentOrPointX, double LineMomentOrPointY, double LineMomentOrPointZ, double* TransLineDirectionX, double* TransLineDirectionY, double* TransLineDirectionZ, double* TransLineMomentOrPointX, double* TransLineMomentOrPointY, double* TransLineMomentOrPointZ) const;
  101. #endif
  102. // Convert a 3D pose to a unit dual quaternion.
  103. static HDualQuaternionArray PoseToDualQuat(const HPoseArray& Pose);
  104. // Convert a 3D pose to a unit dual quaternion.
  105. void PoseToDualQuat(const HPose& Pose);
  106. // Convert a screw into a dual quaternion.
  107. void ScrewToDualQuat(const HString& ScrewFormat, const HTuple& AxisDirectionX, const HTuple& AxisDirectionY, const HTuple& AxisDirectionZ, const HTuple& AxisMomentOrPointX, const HTuple& AxisMomentOrPointY, const HTuple& AxisMomentOrPointZ, const HTuple& Rotation, const HTuple& Translation);
  108. // Convert a screw into a dual quaternion.
  109. void ScrewToDualQuat(const HString& ScrewFormat, double AxisDirectionX, double AxisDirectionY, double AxisDirectionZ, double AxisMomentOrPointX, double AxisMomentOrPointY, double AxisMomentOrPointZ, double Rotation, double Translation);
  110. // Convert a screw into a dual quaternion.
  111. void ScrewToDualQuat(const char* ScrewFormat, double AxisDirectionX, double AxisDirectionY, double AxisDirectionZ, double AxisMomentOrPointX, double AxisMomentOrPointY, double AxisMomentOrPointZ, double Rotation, double Translation);
  112. #ifdef _WIN32
  113. // Convert a screw into a dual quaternion.
  114. void ScrewToDualQuat(const wchar_t* ScrewFormat, double AxisDirectionX, double AxisDirectionY, double AxisDirectionZ, double AxisMomentOrPointX, double AxisMomentOrPointY, double AxisMomentOrPointZ, double Rotation, double Translation);
  115. #endif
  116. // Serialize a dual quaternion.
  117. HSerializedItem SerializeDualQuat() const;
  118. };
  119. class LIntExport HDualQuaternionArray : public HDataArray
  120. {
  121. public:
  122. HDualQuaternionArray();
  123. HDualQuaternionArray(HDualQuaternion* classes, Hlong length);
  124. /* Define a default constructor to prevent compilers that support
  125. * C++11 R-Value References v3.0 declaring an implicite move
  126. * assignment/constructor. */
  127. ~HDualQuaternionArray() {}
  128. protected:
  129. virtual void CreateArray(Hlong length);
  130. virtual int GetFixedSize() const;
  131. };
  132. }
  133. #endif