|
|
|
|
|
#pragma once
|
|
|
|
|
|
#include "curveex.h"
|
|
|
|
|
|
#include "One.h"
|
|
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>:
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>: 2006-3-6
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
class AFX_EXT_CLASS CCurveAnd
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CCurveAnd(void);
|
|
|
|
|
|
virtual ~CCurveAnd(void);
|
|
|
|
|
|
|
|
|
|
|
|
//void SetCurve(COne* pOne1, COne* pOne2); //ΪCOne<6E><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ϊ<>˿<EFBFBD><CBBF>ǹ⻬<C7B9><E2BBAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void SetCurve(CCurveEx* pCurve1, CCurveEx* pCurve2);
|
|
|
|
|
|
CList<CCurveEx,CCurveEx> m_selectList;
|
|
|
|
|
|
CCurveEx* m_pCurve1;
|
|
|
|
|
|
CCurveEx* m_pCurve2; //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>ָ<EFBFBD><D6B8>Ϊ<EFBFBD><CEAA>Χ<EFBFBD><CEA7>
|
|
|
|
|
|
int m_bSmooth1;
|
|
|
|
|
|
int m_bSmooth2;
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
CCrossList m_resultList; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EEB7BD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD>Χ<EFBFBD>ڵ<EFBFBD><DAB5>߶<EFBFBD>
|
|
|
|
|
|
CPtrList m_ptrCurveList; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
void RemoveAll(void); //<2F>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<DAB4><E6A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>ɾ<EFBFBD><C9BE>
|
|
|
|
|
|
|
|
|
|
|
|
int GetResultCurve(CCurveEx& curve, POSITION pos); //<2F><><EFBFBD><EFBFBD>m_resultList<73>еĽ<D0B5><C4BD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>÷<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>///////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
int GetCurve1InCurve2(void); //<2F><><EFBFBD><EFBFBD>Curve1<65><31>Curve2<65>е<EFBFBD><D0B5><EFBFBD><EFBFBD>߸<EFBFBD><DFB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_resultList<73><74>
|
|
|
|
|
|
int GetCurve2InCurve1(void); //<2F><><EFBFBD><EFBFBD>Curve2<65><32>Curve1<65>е<EFBFBD><D0B5><EFBFBD><EFBFBD>߸<EFBFBD><DFB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_resultList<73><74>
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>÷<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>///////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
int GetCurve1OutCurve2(void); //<2F><><EFBFBD><EFBFBD>Curve1<65><31><EFBFBD><EFBFBD>Curve2<65>е<EFBFBD><D0B5><EFBFBD><EFBFBD>߸<EFBFBD><DFB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_resultList<73><74>
|
|
|
|
|
|
int GetCurve2OutCurve1(void); //<2F><><EFBFBD><EFBFBD>Curve2<65><32><EFBFBD><EFBFBD>Curve1<65>е<EFBFBD><D0B5><EFBFBD><EFBFBD>߸<EFBFBD><DFB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_resultList<73><74>
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>롢<EFBFBD>ǡ<F2A1A2B7><C7A1>ཻ<EFBFBD><E0BDBB><EFBFBD><EFBFBD>////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
int GetAndCurve(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_ptrCurveList<73>У<EFBFBD>ΪCCurveEx<45><78><EFBFBD><EFBFBD>
|
|
|
|
|
|
int GetXorCurve(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_ptrCurveList<73>У<EFBFBD>ΪCCurveEx<45><78><EFBFBD><EFBFBD>
|
|
|
|
|
|
int GetOrCurve(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
int GetCrossCurve(); //<2F><><EFBFBD><EFBFBD><EFBFBD>ཻ
|
|
|
|
|
|
int GetCurveOR(CCurveEx* curve1, CCurveEx* curve2);
|
|
|
|
|
|
int GetCurve1XorCurve2(void); //<2F><><EFBFBD><EFBFBD>Curve1<65><31><EFBFBD><EFBFBD>Curve2<65>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_ptrCurveList<73>У<EFBFBD>ΪCCurveEx<45><78><EFBFBD><EFBFBD>
|
|
|
|
|
|
int GetCurve2XorCurve1(void); //<2F><><EFBFBD><EFBFBD>Curve2<65><32><EFBFBD><EFBFBD>Curve1<65>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_ptrCurveList<73>У<EFBFBD>ΪCCurveEx<45><78><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
int GetCurveXOR(CCurveEx* pCurve, CCurveEx* pCurveRange); //<2F><><EFBFBD><EFBFBD>pCurve<76><65>pCurveRange<67><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽߱<DFB1>
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EEB7BD><CABD><EFBFBD><EFBFBD>
|
|
|
|
|
|
int GetCurveInside(CCurveEx* pCurve, CCurveEx* pCurveRange); //<2F><><EFBFBD><EFBFBD>pCurve<76><65>pCurveRange<67>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
int GetCurveOutside(CCurveEx* pCurve, CCurveEx* pCurveRange); //<2F><><EFBFBD><EFBFBD>pCurve<76><65><EFBFBD><EFBFBD>pCurveRange<67>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
////<2F>жϸ<D0B6><CFB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7AE><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>߷<EFBFBD>Χ<EFBFBD><CEA7>
|
|
|
|
|
|
int IsInsideLine(double l1, double l2, CCurveEx* pCurve, CCurveEx* pCurveRange);
|
|
|
|
|
|
////<2F>жϸ<D0B6><CFB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7AE><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>߷<EFBFBD>Χ<EFBFBD><CEA7>
|
|
|
|
|
|
int IsInsideOtherLine(double l1, double l2, CCurveEx* pCurve, CCurveEx* pCurveRange);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ʽ<EEB7BD><CABD><EFBFBD><EFBFBD>///////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ߵĿ<DFB5>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|
|
|
|
|
class CLocationCurve : public CCrossPoint
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CLocationCurve(void);
|
|
|
|
|
|
void Clone(CCrossPoint& cp);
|
|
|
|
|
|
void GetCurve(CPointList& pd, bool bFirst);
|
|
|
|
|
|
|
|
|
|
|
|
long num[2]; //<2F><>β<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>,<2C><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǽ<EFBFBD><C7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool m_bOther; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
};
|
|
|
|
|
|
CList<CLocationCurve, CLocationCurve> m_crossList;
|
|
|
|
|
|
POSITION FindCurve(long nNumber, CList<CLocationCurve, CLocationCurve>& locList, bool* bFirst);
|
|
|
|
|
|
int LinkLocationCurve(CList<CLocationCurve, CLocationCurve> &locList1, CList<CLocationCurve, CLocationCurve> &locList2);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_ptrCurveList<73><74>
|
|
|
|
|
|
void SortLocation2(CList<CLocationCurve, CLocationCurve>& crossList, CCurveEx* pc2);
|
|
|
|
|
|
int CrossCurve(CCurveEx* pc1, CCurveEx* pc2, CList<CLocationCurve, CLocationCurve>& crossList);
|
|
|
|
|
|
int GetCurveOutside(CCurveEx* pCurve, CCurveEx* pCurveRange, CList<CLocationCurve, CLocationCurve>& loca);
|
|
|
|
|
|
int GetCurveInside(CCurveEx* pCurve, CCurveEx* pCurveRange, CList<CLocationCurve, CLocationCurve>& loca);
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
bool IsCurveReversed(const CCurveEx& curve) const noexcept;
|
|
|
|
|
|
int GetCurveOutsideWithIntersections(CCurveEx* pCurve, CCurveEx* pCurveRange, CCrossList& crossList) noexcept;
|
|
|
|
|
|
static CCrossPoint CreateCrossPoint(double x1, double x2, CCurveEx* pCurve) noexcept;
|
|
|
|
|
|
std::pair<int, int> GetStartEndIndex(const CCurveEx& curve) const noexcept;
|
|
|
|
|
|
};
|