#ifndef IHANDEYECALIB_H #define IHANDEYECALIB_H #include #include "HandEyeCalib_global.h" #include "HandEyeCalibTypes.h" // Public hand-eye calibration interface used by apps and tools in this repo. // Keep this surface focused on workflows that are actually consumed. class IHandEyeCalib { public: virtual ~IHandEyeCalib() = default; virtual int CalculateRT(const std::vector& eyePoints, const std::vector& robotPoints, HECCalibResult& result) = 0; virtual int CalculateRT(const std::vector& pointPairs, HECCalibResult& result) = 0; virtual void TransformPoint(const HECRotationMatrix& R, const HECTranslationVector& T, const HECPoint3D& srcPoint, HECPoint3D& dstPoint) = 0; virtual void RotatePoint(const HECRotationMatrix& R, const HECPoint3D& srcPoint, HECPoint3D& dstPoint) = 0; virtual void RotationMatrixToEuler(const HECRotationMatrix& R, HECEulerOrder order, HECEulerAngles& angles) = 0; virtual void EulerToRotationMatrix(const HECEulerAngles& angles, HECEulerOrder order, HECRotationMatrix& R) = 0; virtual bool TransformPose(const HECCalibResult& calibResult, const HECPoint3D& eyeCenter, const HECPoint3D& longAxisDir, const HECPoint3D& normalDir, int dirVectorInvert, HECEulerOrder eulerOrder, HECLongAxisDir longAxisMapping, HECPoseResult& poseResult) = 0; virtual double CalculateError(const std::vector& eyePoints, const std::vector& robotPoints, const HECCalibResult& calibResult) = 0; virtual int CalculateEyeInHand(const std::vector& calibData, HECCalibResult& result) = 0; virtual HECTCPCalibResult CalculateTCP(const HECTCPCalibData& data) = 0; virtual int CalculateEyeToHandWithPose(const std::vector& calibData, HECCalibResult& result) = 0; }; IHandEyeCalib* CreateHandEyeCalibInstance(); void DestroyHandEyeCalibInstance(IHandEyeCalib* instance); #endif // IHANDEYECALIB_H