PlotterHMI/datafile/dxf/dxflib/PDSMath/PDSLocate.h

237 lines
8.6 KiB
C
Raw Normal View History

// PDSLocate.h
#if !defined(PDSLocate_h)
#define PDSLocate_h
#include <afxwin.h>
#include <afxtempl.h>
#define PDSLOCATE_SAMEPOINTERROR 5.0; // <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ,<=<3D><>ֵ<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>Ϊ<EFBFBD><CEAA>ͬһ<CDAC><D2BB>
//<2F><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>λ<EFBFBD><CEBB>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// listPoint <20><><EFBFBD><EFBFBD>
// ptPoint <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:
// <20><>listPoint<6E><74><EFBFBD><EFBFBD>ptPoint<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>λ<EFBFBD><CEBB>,
// <20><>listPoint<6E><74>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ptPoint<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD>ĵ<EFBFBD><C4B5>򷵻<EFBFBD>NULL.
POSITION FindPointAtPointList(CList<CPoint,CPoint>& listPoint,CPoint ptPoint);
//<2F><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>λ<EFBFBD><CEBB>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// listPoint <20><><EFBFBD><EFBFBD>
// ptPoint <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
// dMaxError <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CONST_SAME_POINT_ERROR<4F><52><EFBFBD>в<EFBFBD><D0B2><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:
// <20><>listPoint<6E><74><EFBFBD><EFBFBD>ptPoint<6E>ľ<EFBFBD><C4BE><EFBFBD>С<EFBFBD><D0A1>dMaxError<6F><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>,
// <20><>listPoint<6E><74>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ptPoint<6E>ľ<EFBFBD><C4BE><EFBFBD>С<EFBFBD><D0A1>dMaxError<6F>ĵ<EFBFBD><C4B5>򷵻<EFBFBD>NULL.
POSITION FindPointAtPointList(CList<CPoint,CPoint>& listPoint,CPoint ptPoint,double dMaxError);
//<2F>ж<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>λ<EFBFBD><CEBB>
//<2F>ر<EFBFBD>˵<EFBFBD><CBB5>:
// [20170830 syf]<5D><><EFBFBD><EFBFBD>dSamePointError<6F><72><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// listPolygon <20><><EFBFBD><EFBFBD><EFBFBD>εĵ<CEB5><C4B5><EFBFBD>
// ptPoint <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
// dSamePointError <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>ֵ,<=<3D><>ֵ<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>Ϊ<EFBFBD><CEAA>ͬһ<CDAC><D2BB>
// >0 ֱ<><D6B1>ʹ<EFBFBD>ø<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ж<EFBFBD>
// =0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ȵĵ<C8B5><C4B5><EFBFBD><EFBFBD><EFBFBD>ͬһ<CDAC><D2BB>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ʹ<EFBFBD><CAB9> CONST_SAME_POINT_ERROR <20><><EFBFBD>ж<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// posPrev ǰ<><C7B0><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>,<2C><>ΪNULL,<2C><>ʾposǰ<73><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<D0B5><E3B6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dSamePointError<6F><72><EFBFBD><EFBFBD>
// pos ptPoint<6E><74>λ<EFBFBD><CEBB>(<28><>λ<EFBFBD>õĵ<C3B5>δ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD>ptPoint,<2C><><EFBFBD><EFBFBD>dSamePointError<6F><72><EFBFBD><EFBFBD>)
// posNext <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>,<2C><>ΪNULL,<2C><>ʾpos<6F><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<D0B5><E3B6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dSamePointError<6F><72><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:
// =true ƥ<><C6A5><EFBFBD>ɹ<EFBFBD>(<28><>ʱ<EFBFBD><CAB1>posPrev<65><76>posNext<78><74><EFBFBD><EFBFBD>ΪNULL),=false ƥ<><C6A5>ʧ<EFBFBD><CAA7>
BOOL PointPosOfPolygon(CList<CPoint,CPoint>& listPolygon,CPoint ptPoint,POSITION& posPrev,POSITION& pos,POSITION& posNext,double dSamePointError = 0.0);
//<2F>ж<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>λ<EFBFBD><CEBB>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// listPolygon <20><><EFBFBD><EFBFBD><EFBFBD>εĵ<CEB5><C4B5><EFBFBD>
// ptPoint <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
// dSamePointError <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>ֵ,<=<3D><>ֵ<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>Ϊ<EFBFBD><CEAA>ͬһ<CDAC><D2BB>
// >0 ֱ<><D6B1>ʹ<EFBFBD>ø<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ж<EFBFBD>
// =0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ȵĵ<C8B5><C4B5><EFBFBD><EFBFBD><EFBFBD>ͬһ<CDAC><D2BB>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ʹ<EFBFBD><CAB9> CONST_SAME_POINT_ERROR <20><><EFBFBD>ж<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// ptPrev ǰ<><C7B0>
// ptNext <20><><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:
// =true <20><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>,=false <20><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
BOOL PointPosOfPolygon(CList<CPoint,CPoint>& listPolygon,CPoint ptPoint,CPoint& ptPrev,CPoint& ptNext,double dSamePointError = 0.0);
//<2F>ж<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>λ<EFBFBD><CEBB>
//<2F>ر<EFBFBD>˵<EFBFBD><CBB5>:
// [20170830 syf]<5D><><EFBFBD><EFBFBD>dSamePointError<6F><72><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// listPolyline <20><><EFBFBD>ߵĵ<DFB5><C4B5><EFBFBD>
// ptPoint <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
// dSamePointError <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>ֵ,<=<3D><>ֵ<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>Ϊ<EFBFBD><CEAA>ͬһ<CDAC><D2BB>
// >0 ֱ<><D6B1>ʹ<EFBFBD>ø<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ж<EFBFBD>
// =0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ȵĵ<C8B5><C4B5><EFBFBD><EFBFBD><EFBFBD>ͬһ<CDAC><D2BB>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ʹ<EFBFBD><CAB9> CONST_SAME_POINT_ERROR <20><><EFBFBD>ж<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// posPrev ǰ<><C7B0><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>,<2C><>ΪNULL,<2C><>ʾposǰ<73><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<D0B5><E3B6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dSamePointError<6F><72><EFBFBD><EFBFBD>
// pos ptPoint<6E><74>λ<EFBFBD><CEBB>(<28><>λ<EFBFBD>õĵ<C3B5>δ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD>ptPoint,<2C><><EFBFBD><EFBFBD>dSamePointError<6F><72><EFBFBD><EFBFBD>)
// posNext <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>,<2C><>ΪNULL,<2C><>ʾpos<6F><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<D0B5><E3B6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dSamePointError<6F><72><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:
// =true ƥ<><C6A5><EFBFBD>ɹ<EFBFBD>(<28><>ʱ<EFBFBD><CAB1>posPrev<65><76>posNext<78><74><EFBFBD><EFBFBD>ΪNULL),=false ƥ<><C6A5>ʧ<EFBFBD><CAA7>
BOOL PointPosOfPolyline(CList<CPoint,CPoint>& listPolyline,CPoint ptPoint,POSITION& posPrev,POSITION& pos,POSITION& posNext,double dSamePointError = 0.0);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD><D0BE><EFBFBD>ptPoint<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// listPolygon <20><><EFBFBD><EFBFBD><EFBFBD>εĵ<CEB5><C4B5><EFBFBD>
// dMaxError <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ptPoint <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:
// <20><><EFBFBD><EFBFBD>ptPoint<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <= dMaxError,<2C>򷵻<EFBFBD>true,<2C><><EFBFBD><EFBFBD>:
// ptFixPoint <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD><D0BE><EFBFBD>ptPoint<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
// dDistance ʵ<>ʾ<EFBFBD><CABE><EFBFBD>
// pos <20><>ptPoint<6E><74>λ<EFBFBD><CEBB>,<2C><>ptPoint<6E><74><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD>ϵĵ<CFB5><C4B5><EFBFBD>pos=NULL.
// posPrev,posNext <20><>ptPoint<6E><74>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
// <20><><EFBFBD><EFBFBD>ptPoint<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> > dMaxError,<2C>򷵻<EFBFBD>false.
BOOL FixPointAtPolygon(CList<CPoint,CPoint>& listPolygon,double dMaxError,CPoint ptPoint,
CPoint& ptFixPoint,double& dDistance,
POSITION& posPrev,POSITION& pos,POSITION& posNext);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD><D0BE><EFBFBD>ptPoint<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// listPolyline <20><><EFBFBD>ߵĵ<DFB5><C4B5><EFBFBD>
// ptPoint <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:
// <20><><EFBFBD><EFBFBD>ptPoint<6E><74><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <= dMaxError,<2C>򷵻<EFBFBD>true,<2C><><EFBFBD><EFBFBD>:
// ptFixPoint <20><><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD><D0BE><EFBFBD>ptPoint<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
// dDistance ʵ<>ʾ<EFBFBD><CABE><EFBFBD>
// pos <20><>ptPoint<6E><74>λ<EFBFBD><CEBB>,<2C><>ptPoint<6E><74><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD>ϵĵ<CFB5><C4B5><EFBFBD>pos=NULL.
// posPrev,posNext <20><>ptPoint<6E><74>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
// <20><><EFBFBD><EFBFBD>ptPoint<6E><74><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> > dMaxError,<2C>򷵻<EFBFBD>false.
BOOL FixPointAtPolyline(CList<CPoint,CPoint>& listPolyline,double dMaxError,CPoint ptPoint,
CPoint& ptFixPoint,double& dDistance,
POSITION& posPrev,POSITION& pos,POSITION& posNext);
//<2F><><EFBFBD>߶<EFBFBD><DFB6>о<EFBFBD><D0BE><EFBFBD>ptPoint<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// ptPointS,ptPointE <20>߶εĵ<CEB5>
// ptPoint <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// ptFixPoint <20>߶<EFBFBD><DFB6>о<EFBFBD><D0BE><EFBFBD>ptPoint<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
// dDistance ʵ<>ʾ<EFBFBD><CABE><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:
// <20><><EFBFBD><EFBFBD>ptPoint<6E><74><EFBFBD>߶ε<DFB6><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <= dMaxError,<2C>򷵻<EFBFBD>true,<2C><><EFBFBD><EFBFBD>:
// ptFixPoint <20>߶<EFBFBD><DFB6>о<EFBFBD><D0BE><EFBFBD>ptPoint<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
// dDistance ʵ<>ʾ<EFBFBD><CABE><EFBFBD>
// <20><><EFBFBD><EFBFBD>ptPoint<6E><74><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> > dMaxError,<2C>򷵻<EFBFBD>false.
BOOL FixPointAtLineSegment(CPoint ptPointS,CPoint ptPointE,double dMaxError,CPoint ptPoint,
CPoint& ptFixPoint,double& dDistance);
//<2F><><EFBFBD><EFBFBD>ptPoint<6E><74>ֱ<EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
//ע<><D7A2>:<3A><>FixPointAtLineSegment<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FixPointAtLineSegment<6E><74><EFBFBD>߶ε<DFB6><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// ptPointS,ptPointE ֱ<>ߵĵ<DFB5>
// ptPoint <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// ptFixPoint ֱ<><D6B1><EFBFBD>о<EFBFBD><D0BE><EFBFBD>ptPoint<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
//<2F><><EFBFBD><EFBFBD>ֵ:
// ptPoint<6E><74>ֱ<EFBFBD>ߵľ<DFB5><C4BE><EFBFBD>
double FixPointAtLine(CPoint ptPointS,CPoint ptPointE,CPoint ptPoint,CPoint& ptFixPoint);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// listPolygon
// ptPointS
// dDistance >=0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ptPointS<74><53>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dDistance<63>ĵ<EFBFBD>,
// <0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ptPointS<74><53>ʼ<EFBFBD><CABC>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>-dDistance<63>ĵ<EFBFBD>.
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// ptPoint
//<2F><><EFBFBD><EFBFBD>ֵ:
// =true <20>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>false
BOOL GetDistancePointOfPolygon(CList<CPoint,CPoint>& listPolygon,CPoint ptPointS,double dDistance,CPoint& ptPoint);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// iDPMM <20><><EFBFBD>ȷֱ<C8B7><D6B1><EFBFBD>(һ<><D2BB><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>λ<EFBFBD><CEBB>Ϊ1/iDPMM<4D><4D><EFBFBD><EFBFBD>)
// listPolyline
// ptPointS
// dDistance >=0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ptPointS<74><53>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dDistance<63>ĵ<EFBFBD>,
// <0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ptPointS<74><53>ʼ<EFBFBD><CABC>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>-dDistance<63>ĵ<EFBFBD>.
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// ptPoint
//<2F><><EFBFBD><EFBFBD>ֵ:
// =true <20>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>false
BOOL GetDistancePointOfPolyline(int iDPMM,CList<CPoint,CPoint>& listPolyline,CPoint ptPointS,double dDistance,CPoint& ptPoint);
BOOL GetDistancePointOfPolyline(CList<CPoint,CPoint>& listPolyline,POSITION pos,double dDistance,CPoint& ptPoint);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>GetDistancePointOfPolyline(...)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD>ʱGetDistancePointOfPolylineEx<45><78><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// listPolyline
// iDPMM <20><><EFBFBD>ȷֱ<C8B7><D6B1><EFBFBD>(һ<><D2BB><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>λ<EFBFBD><CEBB>Ϊ1/iDPMM<4D><4D><EFBFBD><EFBFBD>)
// ptPointS
// dDistance >=0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ptPointS<74><53>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dDistance<63>ĵ<EFBFBD>,
// <0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ptPointS<74><53>ʼ<EFBFBD><CABC>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>-dDistance<63>ĵ<EFBFBD>.
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// ptPoint
//<2F><><EFBFBD><EFBFBD>ֵ:
// =true <20>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>false
BOOL GetDistancePointOfPolylineEx(int iDPMM,CList<CPoint,CPoint>& listPolyline,CPoint ptPointS,double dDistance,CPoint& ptPoint);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// listPolyline
// iDPMM <20><><EFBFBD>ȷֱ<C8B7><D6B1><EFBFBD>(һ<><D2BB><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>λ<EFBFBD><CEBB>Ϊ1/iDPMM<4D><4D><EFBFBD><EFBFBD>)
// pos
// dDistance >=0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ptPointS<74><53>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dDistance<63>ĵ<EFBFBD>,
// <0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ptPointS<74><53>ʼ<EFBFBD><CABC>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>-dDistance<63>ĵ<EFBFBD>.
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// ptPoint
//<2F><><EFBFBD><EFBFBD>ֵ:
// =true <20>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>false
BOOL GetDistancePointOfPolylineEx(int iDPMM,CList<CPoint,CPoint>& listPolyline,POSITION pos,double dDistance,CPoint& ptPoint);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// listPolyline
// dDistance >=0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dDistance<63>ĵ<EFBFBD>,
// <0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2>ʼ<EFBFBD><CABC>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>-dDistance<63>ĵ<EFBFBD>.
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// ptPoint
// posPrev ptPoint<6E><74>ǰ<EFBFBD><C7B0>λ<EFBFBD><CEBB>
// pos ptPoint<6E><74>λ<EFBFBD><CEBB>,<2C><>=NULL,<2C><>ptPoint<6E><74><EFBFBD><EFBFBD>listPolyline<6E>еĵ<D0B5>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>listPolyline<6E>еĵ<D0B5>
// posNext ptPoint<6E>ĺ<EFBFBD><C4BA><EFBFBD>λ<EFBFBD><CEBB>
//<2F><><EFBFBD><EFBFBD>ֵ:
// =true <20>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>false
BOOL GetDistancePointOfPolyline(CList<CPoint,CPoint>& listPolyline,double dDistance,CPoint& ptPoint,POSITION &posPrev,POSITION &pos,POSITION &posNext);
//ȷ<><C8B7>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>λ<EFBFBD><CEBB>.
//<2F>ر<EFBFBD>˵<EFBFBD><CBB5>:<3A>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// listPoint <20><><EFBFBD>еĵ<D0B5>
// ptPoint <20><>ȷ<EFBFBD><C8B7><EFBFBD>ĵ<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// pos ptPoint<6E>IJ<EFBFBD><C4B2><EFBFBD>λ<EFBFBD><CEBB>
//<2F><><EFBFBD><EFBFBD>ֵ:
// ptPoint<6E>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int InsertPointAtLine(CList<CPoint,CPoint> &listPoint,CPoint ptPoint,POSITION &pos);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// listPolygon
// ptPointS
// dDistance >=0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ptPointS<74><53>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̾<EFBFBD><CCBE><EFBFBD>dDistance<63><65><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>,
// <0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ptPointS<74><53>ʼ<EFBFBD><CABC>ǰ<EFBFBD><C7B0><EFBFBD>̾<EFBFBD><CCBE><EFBFBD>-dDistance<63><65><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>.
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// ptPoint
//<2F><><EFBFBD><EFBFBD>ֵ:
// =true <20>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>,<2C><><EFBFBD><EFBFBD>false
BOOL GetTangentPointOfPolygon(CList<CPoint,CPoint>& listPolygon,CPoint ptPointS,double dDistance,CPoint& ptPoint);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// listPolyline
// ptPointS
// dDistance >=0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ptPointS<74><53>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̾<EFBFBD><CCBE><EFBFBD>dDistance<63><65><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>,
// <0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ptPointS<74><53>ʼ<EFBFBD><CABC>ǰ<EFBFBD><C7B0><EFBFBD>̾<EFBFBD><CCBE><EFBFBD>-dDistance<63><65><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>.
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
// ptPoint
//<2F><><EFBFBD><EFBFBD>ֵ:
// =true <20>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>,<2C><><EFBFBD><EFBFBD>false
BOOL GetTangentPointOfPolyline(CList<CPoint,CPoint>& listPolyline,CPoint ptPointS,double dDistance,CPoint& ptPoint);
#endif