#ifndef DATAOPERAT_H #define DATAOPERAT_H #include "machine/comm/datadef.h" #include #include #include #include #include #include #define QUI_TYPE_LINE 1 //直线 #define QUI_TYPE_STEP 4 //跨步 #define QUI_TYPE_HSTEP 5 //翻头跨步 #define QUI_TYPE_ARC 2 //三点圆弧 #define QUI_TYPE_BES 6 //贝塞尔曲线 #define QUI_TYPE_SPLINE 7 //样条曲线 #define ERROR_NOTHING 0 //成功 #define ZERO 1e-6 #define LINEDUAN_NUM_LIMIT 5 // 计算分段数固定:不进行特殊计算 #define LINEDUAN_STITCHLEN_LIMIT 6 // 针迹步长固定 #define LINEDUAN_STITCHLEN_LIMIT_END 7 // 针迹步长固定(最后线段) #define OBJECT_STITCHLEN_NEW_BIG 8 // 固定针迹长度(大等分) #define OBJECT_STITCHLEN_NEW_SAME 9 // 固定针迹长度(等距分) #define OBJECT_STITCHLEN_NEW_SAMALL 10 // 固定针迹长度(小等分) #define ADJUSTLINE_ADD_DUAN_LIMIT 11 // 自动单针指定分段添加 typedef struct { double x; double y; } Point2D; typedef struct { double x; double y; int ctrl; } QuiPoint; int isThreePointOnALine(const double threex[],const double threey[]); int getArcCenter(const double x[], const double y[], double * pxc, double * pyc, double * pr); int getArcMinMax(const double x[], const double y[], double * pminx, double * pmaxx, double * pminy, double * pmaxy); void rotatec(double xin, double yin, double * px, double * py, double angle); int arcDir(const double x[], const double y[]); Point2D pointOnCubicBezier(Point2D* cp, double t); void computeBezier(Point2D* cp, long numberOfPoints, Point2D* curve); int getBezierMinMax(const double x[], const double y[], double * pminx, double * pmaxx, double * pminy, double * pmaxy); int getSplineMinMax(QList &ptList, double * pminx, double * pmaxx, double * pminy, double * pmaxy); int calcLine(double x0, double y0, double x1, double y1, s16 step, QByteArray &absAry, WORD datatype); int calcCurve(double threex[], double threey[], s16 step, QByteArray &absAry); int calcBezier(double threex[], double threey[], s16 step, QByteArray &absAry); void getBezierPointList(double threex[], double threey[], s16 step, QList &outList); //样条拟合 void getSplineNew(QList &ptList, QList &splineList); void getShap(int nCtrlPntNum, QPointF *pPoint, QList &splineList, double dfMinX, double dfMinY); //线段拟合 void getCurvePointFillLine(QList &inList, double indRunLen, QList &outList, int iSumParm, BYTE biLenLimit); int getTotalDistanceFillLine(QList *pPointList, double &dTotal); void pointToPoint(const QPointF &inPoint, QPointF &outPoint); long doubleToLong(double indValue);//浮点数转整形 double round(double indValue);//四舍五入 void distPointToPoint(const QPointF &p1, const QPointF &p2, double &outd); bool getPointInSectFillLine(const QPointF &p1, const QPointF &p2, const double &d, QPointF &outp); //距p1点距离为d的点 // d > s : out_p在p2延长线上 // s >= d >= 0 : out_p在p1、p2线段上 // d < 0 : out_p在p1延长线上 bool getPointAtSect(const QPointF &p1, const QPointF &p2, const double &d, QPointF &outp); // 两点间距离 double disPointToPoint(double x1, double y1, double x2, double y2); #endif // DATAOPERAT_H