#pragma once #include #include constexpr double degToRad(double degrees) { return degrees * (3.14159265 / 180.0); } using stHelixPosition = struct _stHelixPosition { // MUST be 3 elements: X, Y, Z std::array arrCenterPosition; std::array arrNormal; double AngleDegree{ 0. }; // angle in degree double deltaHeight{ 0. }; // height change double endRadius{ 0. }; // end radius // unsigned long ulDwell{ 0 }; // dwell time in ms }; using stPointPosition = struct _stPointPosition { // axis position for each point (number of position MUST match number of axis) std::vector vecAxisPosition; // unsigned long ulDwell{ 0 }; // dwell time in ms }; using stAxSpeed = struct _stAxSpeed { double dStartSpeed{ 0. }; // axis start speed double dMaxSpeed{ 0. }; // axis max speed double dEndSpeed{ 0. }; // axis end speed // reserved double dSCurve{ 0.5 }; // s-curve double dAcc{ 0. }; // axis acceleration double dDec{ 0. }; // axis deceleration }; using stMotionPath = struct _stMotionPath { // point path std::vector vecAxisId; // list of axis id std::vector vecPointPath; // list of axis position for each point std::vector vecHelixPath; // list of helix position for each point // speed profile stAxSpeed AxSpeed; // speed for each axis int nId{}; // Point Table Id for ECAT bool bUseAbsolutePos{}; // true: absolute position, false: relative position (default) };