|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//GraphUtility.h
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include "CommonDefines.h"
|
|
|
|
|
|
|
|
|
|
|
|
class CGraphUtility
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CGraphUtility();
|
|
|
|
|
|
~CGraphUtility();
|
|
|
|
|
|
//Attributes
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
/* <20><>p0p1<70><31><EFBFBD><EFBFBD>p2p1<70>ߵļн<C4BC>,<2C><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD> */
|
|
|
|
|
|
static double angle(CPoint2D& p0,CPoint2D& p1,CPoint2D& p2);
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD>p1p0<70><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p1p2<70><32><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>,<2C><>ʱ<EFBFBD><CAB1>Ϊ<EFBFBD><CEAA>,<2C><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD>*/
|
|
|
|
|
|
static double rotateangle(CPoint2D& p0,CPoint2D& p1,CPoint2D& p2);
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A><>p0p1<70><31><EFBFBD><EFBFBD>p2p1<70>ߵļнǵ<D0BD><C7B5><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
static double cosa(CPoint2D& p0,CPoint2D& p1,CPoint2D& p2);
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD>p<EFBFBD><70><EFBFBD>߶<EFBFBD>p1p2<70>ľ<EFBFBD><C4BE><EFBFBD>,<2C><><EFBFBD><EFBFBD>ֵ>0.0 <20><><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5>Ҳ<EFBFBD>; <20><><EFBFBD><EFBFBD>ֵ<0.0 <20><><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD>,interpoint<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD><DFB6>ϵ<EFBFBD>ͶӰ*/
|
|
|
|
|
|
static double GetPointAndLineDistance(CPoint2D& p1,CPoint2D& p2,CPoint2D& p,INTERPOINT& interpoint);
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>*/
|
|
|
|
|
|
static double TwoPointDistance(CPoint2D& p1,CPoint2D& p2);
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>*/
|
|
|
|
|
|
static int TwoPointDistance(POINT p1,POINT p2);
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>*/
|
|
|
|
|
|
static double SquareTwoPointDistance(CPoint2D& p1,CPoint2D& p2);
|
|
|
|
|
|
|
|
|
|
|
|
/* <20><>p<EFBFBD>Ƿ<EFBFBD><C7B7>ڱպϵ<D5BA><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
|
|
|
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>pIndex!=NULL<EFBFBD><EFBFBD>pIndex<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD>߶κ<EFBFBD>
|
|
|
|
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2 */
|
|
|
|
|
|
static int PointInRegion(CPoint2D* point,int count,CPoint2D p,double& dIndex);
|
|
|
|
|
|
static int PointInRegion(POINT* point,int count,POINT p,double& dIndex);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ཻ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD>Թ<EFBFBD>ϵ
|
|
|
|
|
|
//0--û<><C3BB><EFBFBD>ص<EFBFBD>
|
|
|
|
|
|
//1--<2D><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>
|
|
|
|
|
|
//2--<2D><><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD>ڲ<EFBFBD>
|
|
|
|
|
|
//3--<2D><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>ڲ<EFBFBD>
|
|
|
|
|
|
//4--<2D><>ȫ<EFBFBD>ص<EFBFBD>
|
|
|
|
|
|
//static int PolygonInPolygon(CGDFPolygon* polygon0,CGDFPolygon* polygon1);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//0--û<><C3BB><EFBFBD>ص<EFBFBD> <20><><EFBFBD><EFBFBD>0ʱ<30><CAB1>ʾ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>ɹ<EFBFBD>
|
|
|
|
|
|
//1--<2D><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>
|
|
|
|
|
|
//2--<2D><><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD>ڲ<EFBFBD>
|
|
|
|
|
|
//3--<2D><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>ڲ<EFBFBD>
|
|
|
|
|
|
//4--<2D><>ȫ<EFBFBD>ص<EFBFBD>
|
|
|
|
|
|
// static int AndPolygon(CGDFPolygon* polygon0,CGDFPolygon* polygon1,CTypedPtrArray<CPtrArray,CGDFPolygon*>& polygonarray);
|
|
|
|
|
|
// static int SubPolygon(CGDFPolygon* polygon0,CGDFPolygon* polygon1,CTypedPtrArray<CPtrArray,CGDFPolygon*>& polygonarray);
|
|
|
|
|
|
// static int AddPolygon(CGDFPolygon* polygon0,CGDFPolygon* polygon1,CTypedPtrArray<CPtrArray,CGDFPolygon*>& polygonarray);
|
|
|
|
|
|
//
|
|
|
|
|
|
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>εķ<CEB5><C4B7><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>Ϊ˳ʱ<CBB3><CAB1>
|
|
|
|
|
|
// static void AssertClockwise(CPoint2D* p,int count);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>εķ<CEB5><C4B7><EFBFBD>,ԭ<><D4AD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>Ϊβ<CEAA><CEB2>,ԭ<><D4AD><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD>Ϊͷ<CEAA><CDB7>*/
|
|
|
|
|
|
static void ReversePolyline(CPoint2D* p,int count);
|
|
|
|
|
|
//
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ֵ<0,<2C><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳ʱ<CBB3><CAB1>,>0<><30>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>*/
|
|
|
|
|
|
static double CalculateArea(CPoint2D* p,int count);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>Bezier<65><72><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ֵ<0,<2C><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳ʱ<CBB3><CAB1>,>0<><30>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
static double CalculateBezierArea(CPoint2D* p,int count);
|
|
|
|
|
|
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵij<DFB5><C4B3><EFBFBD>
|
|
|
|
|
|
// static double CalculateLength(CPoint2D* p,int count,BOOL bClose);
|
|
|
|
|
|
// //<2F><><EFBFBD><EFBFBD>Bezier<65><72><EFBFBD>ߵij<DFB5><C4B3><EFBFBD>,p0Ϊͷ<CEAA><CDB7>,p1Ϊͷ<CEAA><CDB7><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>Ƶ<EFBFBD>,p2Ϊβ<CEAA><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>,p3Ϊβ<CEAA><CEB2>
|
|
|
|
|
|
// static double CalculateBezierLength(CPoint2D& p0,CPoint2D& p1,CPoint2D& p2,CPoint2D& p3);
|
|
|
|
|
|
// //<2F><><EFBFBD><EFBFBD>Bezier<65><72><EFBFBD>ߵij<DFB5><C4B3><EFBFBD>
|
|
|
|
|
|
// static double CalculateBezierLength(CPoint2D* p,int count,BOOL bClose);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵķ<DFB5><C4B7><EFBFBD>,0--<2D><EFBFBD><DEB7>ж<EFBFBD> 1--˳ʱ<CBB3><CAB1> -1--<2D><>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
static int GetPolygonDirection(CPoint2D* p,int count);
|
|
|
|
|
|
//
|
|
|
|
|
|
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>պϵĶ<CFB5><C4B6><EFBFBD><EFBFBD>εĽ<CEB5><C4BD><EFBFBD>
|
|
|
|
|
|
// //0--û<><C3BB><EFBFBD>ص<EFBFBD>
|
|
|
|
|
|
// //1--<2D><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>
|
|
|
|
|
|
// //2--<2D><><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD>ڲ<EFBFBD>
|
|
|
|
|
|
// //3--<2D><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>ڲ<EFBFBD>
|
|
|
|
|
|
// //4--<2D><>ȫ<EFBFBD>ص<EFBFBD>
|
|
|
|
|
|
// static int GetRegionInterPoint(CPoint2D* p,int count,CPoint2D* p1,int count1,CArray<INTERPOINT,INTERPOINT>& interpointarray);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>εĽ<CEB5><C4BD><EFBFBD>,<2C><><EFBFBD>ص<EFBFBD><D8B5>ǽ<EFBFBD><C7BD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>
|
|
|
|
|
|
static int GetInterPoint(CPoint2D* p0,int count0,BOOL bClose0,CPoint2D* p1,int count1,BOOL bClose1,CArray<INTERPOINT,INTERPOINT>& interpointarray);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶εĽ<CEB5><C4BD><EFBFBD>,<2C><><EFBFBD>ؽ<EFBFBD><D8BD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>
|
|
|
|
|
|
static int GetInterPoint(CPoint2D* p,int count,BOOL bClose,CPoint2D p0,CPoint2D p1,CArray<INTERPOINT,INTERPOINT>& interpointarray);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶εĽ<CEB5><C4BD><EFBFBD>
|
|
|
|
|
|
static int GetInterPoint(CPoint2D point0,CPoint2D point1,CPoint2D p0,CPoint2D p1,INTERPOINT& interpoint);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,pdIndex<65><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>0,<2C><><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>2,<2C><><EFBFBD>ߵ<EFBFBD><DFB5>Ҳ<EFBFBD>
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>3,<2C><EFBFBD>ȷ<EFBFBD><C8B7>
|
|
|
|
|
|
static int PointInLine(POINT point,POINT* pPointArray,int iPointCount,BOOL bClose,double* pdIndex=NULL);
|
|
|
|
|
|
//<2F><><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,pdIndex<65><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>0,<2C><><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>2,<2C><><EFBFBD>ߵ<EFBFBD><DFB5>Ҳ<EFBFBD>
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>3,<2C><EFBFBD>ȷ<EFBFBD><C8B7>
|
|
|
|
|
|
static int PointInLine(CPoint2D point,CPoint2D* pPointArray,int iPointCount,BOOL bClose,double* pdIndex=NULL);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>жϵ<D0B6><CFB5>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>߶<EFBFBD><DFB6><EFBFBD>
|
|
|
|
|
|
//0--<2D><><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//1--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//2--<2D><><EFBFBD>ߵ<EFBFBD><DFB5>Ҳ<EFBFBD>
|
|
|
|
|
|
//-1--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD><DFB6><EFBFBD>
|
|
|
|
|
|
//3--<2D><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>,ֻ<>е<EFBFBD>p0<70><30>p1<70>غ<EFBFBD>ʱ<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
static int PointInLine(POINT& point,POINT& p0,POINT& p1);
|
|
|
|
|
|
//<2F>жϵ<D0B6><CFB5>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>߶<EFBFBD><DFB6><EFBFBD>
|
|
|
|
|
|
//0--<2D><><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//1--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//2--<2D><><EFBFBD>ߵ<EFBFBD><DFB5>Ҳ<EFBFBD>
|
|
|
|
|
|
//-1--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD><DFB6><EFBFBD>
|
|
|
|
|
|
//3--<2D><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>,ֻ<>е<EFBFBD>p0<70><30>p1<70>غ<EFBFBD>ʱ<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
static int PointInLine(CPoint2D& point,CPoint2D& p0,CPoint2D& p1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//ȡ<><C8A1><EFBFBD>߶<EFBFBD><DFB6>ϵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>,parameterΪλ<CEAA><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,parameter>=0.0 && parameter<=1.0,parameter=0.5<EFBFBD><EFBFBD>ʾȡ<EFBFBD>м<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
static POINT GetPointInLine(POINT p1,POINT p2,double parameter);
|
|
|
|
|
|
static CPoint2D GetPointInLine(CPoint2D p1,CPoint2D p2,double parameter);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ѡ<EFBFBD><D1A1>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
static double LineHitTest(POINT* pPoint,int count,POINT point,BOOL bClosed,GDFLOGPEN* pLogPen=NULL,double dZoomFactor=1.0);
|
|
|
|
|
|
static double LineHitTest(POINT point1,POINT point2,POINT point,GDFLOGPEN* pLogPen=NULL,double dZoomFactor=1.0);
|
|
|
|
|
|
|
|
|
|
|
|
//accuracyΪ<79><CEAA><EFBFBD><EFBFBD>ֵ,<2C><><EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD>굥λ
|
|
|
|
|
|
static double LineHitTest(int accuracy,POINT point1,POINT point2,POINT point);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>õ<EFBFBD>Bezier<65><72><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>,dParameterΪ<72><CEAA><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
static CPoint2D GetBezierPosition(CPoint2D p0,CPoint2D p1,CPoint2D p2,CPoint2D p3,double dParameter);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>õ<EFBFBD>Bezier<65><72><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>,dIndexΪ<78><CEAA><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,dIndex<65>п<EFBFBD><D0BF><EFBFBD>>1.0
|
|
|
|
|
|
static CPoint2D GetBezierPosition(CPoint2D* p,int count,BOOL bClose,double dIndex);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>õ<EFBFBD>Bezier<65><72><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>,dParameterΪ<72><CEAA><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
static POINT GetBezierPosition(POINT& p0,POINT& p1,POINT& p2,POINT& p3,double fParameter);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>õ<EFBFBD>Bezier<65><72><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>,dIndexΪ<78><CEAA><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,dIndex<65>п<EFBFBD><D0BF><EFBFBD>>1.0
|
|
|
|
|
|
static POINT GetBezierPosition(POINT* p,int count,BOOL bClose,double dIndex);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>Bezier<65><72><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊһ<CEAA><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ͨ<><CDA8><EFBFBD><EFBFBD>ֵ<EFBFBD>ķ<EFBFBD>ʽ
|
|
|
|
|
|
static void ConvertBezierToPolyline(CPoint2D* point,int count,BOOL bClose,CArray<CPoint2D,CPoint2D>& pointarray);
|
|
|
|
|
|
static void ConvertBezierToPolyline(CPoint2D& p0,CPoint2D& p1,CPoint2D& p2,CPoint2D& p3,CPoint2D* pointarray);
|
|
|
|
|
|
static void ConvertBezierToPolyline(CPoint2D* point,int count,BOOL bClose,int index0,int index1,CArray<CPoint2D,CPoint2D>& pointarray);
|
|
|
|
|
|
//<2F><><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
static void ConvertBezierToPolylineAutoStep(CPoint2D* point,int count,BOOL bClose,CArray<CPoint2D,CPoint2D>& pointarray,double steplength,CArray<double,double>* pIndexArray=NULL);
|
|
|
|
|
|
static void ConvertBezierToPolylineAutoStep(CPoint2D& p0,CPoint2D& p1,CPoint2D& p2,CPoint2D& p3,CArray<CPoint2D,CPoint2D>& pointarray,double steplength,CArray<double,double>* pIndexArray=NULL);
|
|
|
|
|
|
static void ConvertBezierToPolylineAutoStep(CPoint2D* point,int count,BOOL bClose,int index0,int index1,CArray<CPoint2D,CPoint2D>& pointarray,double steplength,CArray<double,double>* pIndexArray=NULL);
|
|
|
|
|
|
|
|
|
|
|
|
static void ConvertBezierToPolyline(POINT* point,int count,BOOL bClose,CArray<POINT,POINT>& pointarray);
|
|
|
|
|
|
static void ConvertBezierToPolyline(POINT& p0,POINT& p1,POINT& p2,POINT& p3,POINT* pointarray);
|
|
|
|
|
|
//<2F><><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
static void ConvertBezierToPolylineAutoStep(POINT* point,int count,BOOL bClose,CArray<POINT,POINT>& pointarray,int steplength,CArray<double,double>* pIndexArray=NULL);
|
|
|
|
|
|
static void ConvertBezierToPolylineAutoStep(POINT& p0,POINT& p1,POINT& p2,POINT& p3,CArray<POINT,POINT>& pointarray,int steplength,CArray<double,double>* pIndexArray=NULL);
|
|
|
|
|
|
|
|
|
|
|
|
static void GetBezierCutPoint(CPoint2D p0,CPoint2D p1,CPoint2D p2,CPoint2D p3,double dParameter,CPoint2D* point);
|
|
|
|
|
|
static void GetBezierCutPoint(CPoint2D* p,int count,BOOL bClose,double dIndex,CPoint2D* point);
|
|
|
|
|
|
|
|
|
|
|
|
static void GetBezierCutPoint(POINT p0,POINT p1,POINT p2,POINT p3,double dParameter,POINT* point);
|
|
|
|
|
|
static void GetBezierCutPoint(POINT* p,int count,BOOL bClose,double dIndex,POINT* point);
|
|
|
|
|
|
static int PointOnLineSide(CPoint2D& p0,CPoint2D& p1,CPoint2D& p,double& dIndex);//<2F><><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5>ϲ<CFB2><E0BBB9><EFBFBD>²<EFBFBD>
|
|
|
|
|
|
static int PointOnLineSide(POINT& p0,POINT& p1,POINT& p,double& dIndex);
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// static CRect8 AddRect(CRect8 rect1,CRect8 rect2);
|
|
|
|
|
|
//
|
|
|
|
|
|
// //<2F><><EFBFBD><EFBFBD>p<EFBFBD><70><EFBFBD>߶<EFBFBD>p0p1<70><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>,interpoint<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
|
// static double GetNearestDistance(CPoint2D p0,CPoint2D p1,CPoint2D p,INTERPOINT& interpoint);
|
|
|
|
|
|
// static double GetNearestDistance(CPoint2D* pointarray,int count,BOOL bClose,CPoint2D p,INTERPOINT& interpoint);
|
|
|
|
|
|
//
|
|
|
|
|
|
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>,interpoint<6E>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
|
// static double GetNearestDistance(CPoint2D* pointarray0,int count0,BOOL bClose0,CPoint2D* pointarray1,int count1,BOOL bClose1,INTERPOINT& interpoint);
|
|
|
|
|
|
//
|
|
|
|
|
|
// //<2F><><EFBFBD>Ƿ<EFBFBD><C7B7>ڱպ<DAB1>Bezier<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// //<2F><><EFBFBD><EFBFBD>1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,pdIndex<65><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
|
// //<2F><><EFBFBD><EFBFBD>0,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// //<2F><><EFBFBD><EFBFBD>2,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// static int PointInBezierRegion(POINT* point,int count,POINT p,double& dIndex);
|
|
|
|
|
|
// static int PointInBezierRegion(CPoint2D* point,int count,CPoint2D p,double& dIndex);
|
|
|
|
|
|
// static int PointInBezierRegion(CBezierStyleDrawPointSegmentArray* pSegmentArray,POINT p);
|
|
|
|
|
|
// static int PointInBezierRegion(CBezierStyleMapPointSegmentArray* pSegmentArray,CPoint2D p);
|
|
|
|
|
|
//
|
|
|
|
|
|
// //<2F><><EFBFBD><EFBFBD>p<EFBFBD><70>Bezier<65>߶ε<DFB6><CEB5><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
|
|
|
|
|
|
// static double GetBezierNearestDistance(CPoint2D a0,CPoint2D a1,CPoint2D a2,CPoint2D a3,CPoint2D p,INTERPOINT& interpoint);
|
|
|
|
|
|
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bezier<65>߶ε<DFB6><CEB5><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
|
|
|
|
|
|
// static double GetBezierNearestDistance(CPoint2D a0,CPoint2D a1,CPoint2D a2,CPoint2D a3,CPoint2D b0,CPoint2D b1,CPoint2D b2,CPoint2D b3,INTERPOINT& interpoint);
|
|
|
|
|
|
// //<2F><><EFBFBD><EFBFBD>p<EFBFBD><70>Bezier<65><72><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
|
|
|
|
|
|
// static double GetBezierNearestDistance(CPoint2D* point,int count,BOOL bClose,CPoint2D p,INTERPOINT& interpoint);
|
|
|
|
|
|
// static double GetBezierNearestDistance(CPoint2D* point,int count,BOOL bClose,CPoint2D p0,CPoint2D p1,CPoint2D p2,CPoint2D p3,INTERPOINT& interpoint);
|
|
|
|
|
|
// static double GetBezierNearestDistance(CPoint2D* p0,int count0,BOOL bClose0,CPoint2D* p1,int count1,BOOL bClose1,INTERPOINT& interpoint);
|
|
|
|
|
|
// static double GetBezierNearestDistance(CPoint2D a0,CPoint2D a1,CPoint2D a2,CPoint2D a3,double dHeadIndex,double dEndIndex,CPoint2D p,INTERPOINT& interpoint);
|
|
|
|
|
|
// static double GetBezierNearestDistance(CPoint2D* point,int count,BOOL bClose,double dHeadIndex,double dEndIndex,CPoint2D p,INTERPOINT& interpoint);
|
|
|
|
|
|
// static double GetBezierNearestDistance(CPoint2D* point,int count,BOOL bClose,double dHeadIndex,double dEndIndex,CPoint2D p0,CPoint2D p1,CPoint2D p2,CPoint2D p3,double dHeadIndex1,double dEndIndex1,INTERPOINT& interpoint);
|
|
|
|
|
|
// static double GetBezierNearestDistance(CPoint2D a0,CPoint2D a1,CPoint2D a2,CPoint2D a3,double dHeadIndexa,double dEndIndexa,CPoint2D b0,CPoint2D b1,CPoint2D b2,CPoint2D b3,double dHeadIndexb,double dEndIndexb,INTERPOINT& interpoint);
|
|
|
|
|
|
// static double GetBezierNearestDistance(CPoint2D* p0,int count0,BOOL bClose0,double dHeadIndex0,double dEndIndex0,CPoint2D* p1,int count1,BOOL bClose1,double dHeadIndex1,double dEndIndex1,INTERPOINT& interpoint);
|
|
|
|
|
|
//
|
|
|
|
|
|
// //<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ε<EFBFBD>λ<EFBFBD><CEBB>,<2C><><EFBFBD><EFBFBD><EFBFBD>µľ<C2B5><C4BE><EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
|
// static CRect8 MoveRect(CRect8 rect,CSize8 size);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
// //<2F>ж<EFBFBD><D0B6>߶<EFBFBD><DFB6><EFBFBD>Bezier<65><72><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>н<EFBFBD><D0BD><EFBFBD>
|
|
|
|
|
|
// static BOOL IfBezierHaveInterPoint(CPoint2D* p,int count,BOOL bClose,CPoint2D p0,CPoint2D p1);
|
|
|
|
|
|
//
|
|
|
|
|
|
// //<2F><>Bezier<65><72><EFBFBD>ߵĽ<DFB5><C4BD><EFBFBD>,<2C><><EFBFBD>ؽ<EFBFBD><D8BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// static int GetBezierInterPoint(CPoint2D* point0,int count0,BOOL bClose0,CPoint2D* point1,int count1,BOOL bClose1,CArray<INTERPOINT,INTERPOINT>& interpointarray);
|
|
|
|
|
|
// static int GetBezierInterPoint(CPoint2D a0,CPoint2D a1,CPoint2D a2,CPoint2D a3,CPoint2D b0,CPoint2D b1,CPoint2D b2,CPoint2D b3,CArray<INTERPOINT,INTERPOINT>& interpointarray);
|
|
|
|
|
|
// static int GetBezierInterPoint(CPoint2D* point0,int count0,BOOL bClose0,double dHeadIndex0,double dEndIndex0,CPoint2D* point1,int count1,BOOL bClose1,double dHeadIndex1,double dEndIndex1,CArray<INTERPOINT,INTERPOINT>& interpointarray);
|
|
|
|
|
|
// static int GetBezierInterPoint(CPoint2D a0,CPoint2D a1,CPoint2D a2,CPoint2D a3,double dHeadIndex0,double dEndIndex0,CPoint2D b0,CPoint2D b1,CPoint2D b2,CPoint2D b3,double dHeadIndex1,double dEndIndex1,CArray<INTERPOINT,INTERPOINT>& interpointarray);
|
|
|
|
|
|
//
|
|
|
|
|
|
// //<2F><>Bezier<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶εĽ<CEB5><C4BD><EFBFBD>,<2C><><EFBFBD>ؽ<EFBFBD><D8BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// static int GetBezierAndLineInterPoint(CPoint2D* p,int count,BOOL bClose,CPoint2D p0,CPoint2D p1,CArray<INTERPOINT,INTERPOINT>& interpointarray);
|
|
|
|
|
|
// static int GetBezierAndLineInterPoint(CPoint2D p0,CPoint2D p1,CPoint2D p2,CPoint2D p3,CPoint2D point0,CPoint2D point1,CArray<INTERPOINT,INTERPOINT>& interpointarray);
|
|
|
|
|
|
// static int GetBezierAndLineInterPoint(CPoint2D* p,int count,BOOL bClose,double dHeadIndex,double dEndIndex,CPoint2D p0,CPoint2D p1,CArray<INTERPOINT,INTERPOINT>& interpointarray);
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
// //<2F>õ<EFBFBD>Bezier<65><72><EFBFBD>ߵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>Bezier<65><72><EFBFBD>ߵ<EFBFBD><DFB5>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>,dHeadIndex<65><78>dEndIndexΪ<78>µ<EFBFBD>Bezier<65><72><EFBFBD>ߵ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>Χ
|
|
|
|
|
|
// static void GetPartOfBezier(CPoint2D p0,CPoint2D p1,CPoint2D p2,CPoint2D p3,double dHeadIndex,double dEndIndex,CPoint2D& q0,CPoint2D& q1,CPoint2D& q2,CPoint2D& q3);
|
|
|
|
|
|
//
|
|
|
|
|
|
// //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ѡ<EFBFBD><D1A1>Bezier<65><72><EFBFBD><EFBFBD>
|
|
|
|
|
|
// static double BezierLineHitTest(POINT* pPoint,int count,POINT point,BOOL bClosed,GDFLOGPEN* pLogPen=NULL,double dZoomFactor=1.0);
|
|
|
|
|
|
// static double BezierLineHitTest(int accuracy,POINT& p0,POINT& p1,POINT& p2,POINT& p3,POINT point);
|
|
|
|
|
|
//
|
|
|
|
|
|
// //<2F><>Բ<EFBFBD><D4B2>ת<EFBFBD><D7AA>ΪBezier<65><72><EFBFBD><EFBFBD>,direction==forward<72><64>ʾ<EFBFBD><CABE>dStartAngle<6C><65>ʱ<EFBFBD><CAB1>ת<EFBFBD><D7AA>dStopAngle,direction==backward<72><64>ʾ˳ʱ<CBB3><CAB1><EFBFBD><EFBFBD>ת
|
|
|
|
|
|
// static void ConvertArcToBezierLine(CPoint2D p0,double a,double b,double dAngle,double dStartAngle,double dStopAngle,FACIESSEGMENTDIRECTION direction,CArray<CPoint2D,CPoint2D>& pointarray);
|
|
|
|
|
|
// static void ConvertArcToBezierLine(POINT p0,double a,double b,double dAngle,double dStartAngle,double dStopAngle,FACIESSEGMENTDIRECTION direction,CArray<POINT,POINT>& pointarray);
|
|
|
|
|
|
//
|
|
|
|
|
|
// //<2F><><EFBFBD><EFBFBD><EFBFBD>任
|
|
|
|
|
|
// //x0,y0Ϊ<30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>е<EFBFBD>ԭ<EFBFBD><D4AD>λ<EFBFBD><CEBB>
|
|
|
|
|
|
// //angleΪ<65><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>ĽǶ<C4BD>
|
|
|
|
|
|
// //x,yΪ<79><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// //X,YΪ<59><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// static void ConvertCoordinateNO(double x0,double y0,double angle,double x,double y,double& X,double& Y);
|
|
|
|
|
|
//
|
|
|
|
|
|
// //x0,y0Ϊ<30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>е<EFBFBD>ԭ<EFBFBD><D4AD>λ<EFBFBD><CEBB>
|
|
|
|
|
|
// //angleΪ<65><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>ĽǶ<C4BD>
|
|
|
|
|
|
// //x,yΪ<79><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// //X,YΪ<59><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// static void ConvertCoordinateON(double x0,double y0,double angle,double x,double y,double& X,double& Y);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// //<2F><>Բ<EFBFBD><D4B2>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
|
|
|
|
|
// static void ConvertArcToPolyline(CPoint2D p0,double a,double b,double dAngle,double dStartAngle,double dStopAngle,FACIESSEGMENTDIRECTION direction,double dStep,CArray<CPoint2D,CPoint2D>& pointarray);
|
|
|
|
|
|
// static void ConvertArcToPolyline(POINT p0,double a,double b,double dAngle,double dStartAngle,double dStopAngle,FACIESSEGMENTDIRECTION direction,double dStep,CArray<POINT,POINT>& pointarray);
|
|
|
|
|
|
//
|
|
|
|
|
|
// static void ConvertRectToBezierLine(CPoint2D p0,double a,double b,double dAngle,CPoint2D roundpoint,CArray<CPoint2D,CPoint2D>& pointarray);
|
|
|
|
|
|
// static void ConvertRectToBezierLine(POINT p0,double a,double b,double dAngle,POINT roundpoint,CArray<POINT,POINT>& pointarray);
|
|
|
|
|
|
//
|
|
|
|
|
|
// static void ConvertRectToPolyline(CPoint2D p0,double a,double b,double dAngle,CPoint2D roundpoint,CArray<CPoint2D,CPoint2D>& pointarray);
|
|
|
|
|
|
// static void ConvertRectToPolyline(POINT p0,double a,double b,double dAngle,POINT roundpoint,CArray<POINT,POINT>& pointarray);
|
|
|
|
|
|
//
|
|
|
|
|
|
// static BOOL HaveIntersection(CRect8& rect0,CRect8& rect1);
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
// //<2F><>Bezier<65><72><EFBFBD>ߵĿ<DFB5><C4BF>Ƶ<EFBFBD>
|
|
|
|
|
|
// static void SmoothLine(CPoint2D* pPointArray,BYTE* pbyteSmoothFlag,int count,BOOL bClose);
|
|
|
|
|
|
// static void SmoothOneNode(CPoint2D* pPointArray,BYTE* pbyteSmoothFlag,int count,BOOL bClose,int index);
|
|
|
|
|
|
//
|
|
|
|
|
|
// //<2F><>p<EFBFBD><70><EFBFBD><EFBFBD>p1,p0<70>ߵľ<DFB5><C4BE><EFBFBD><EFBFBD><EFBFBD>,rpΪ<70><CEAA><EFBFBD>صľ<D8B5><C4BE><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ֵΪ<D6B5>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ھ<EFBFBD><DABE><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// static BOOL GetMirrorPoint(CPoint2D p1,CPoint2D p2,CPoint2D p,CPoint2D& rp);
|
|
|
|
|
|
//
|
|
|
|
|
|
//private:
|
|
|
|
|
|
// static void AddArray(CPoint2D* d,int count,double startindex,double stopindex,CArray<CPoint2D,CPoint2D>* parray,BOOL bReverse=FALSE);
|
|
|
|
|
|
// static BOOL HaveIntersection(CPoint2D P0,CPoint2D P1,CPoint2D p0,CPoint2D p1);
|
|
|
|
|
|
// static BOOL IsSameDirection(CPoint2D P0,CPoint2D P1,CPoint2D p0,CPoint2D p1);
|
|
|
|
|
|
// static void MoveArrayHeadToEnd(int* p,int count,int movecount);
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
// static void SmoothOneNode(CPoint2D* pPointArray,BYTE* pbyteSmoothFlag,int indexl,int index0,int index1,int index2,int indexr);
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|