|
|
|
|
|
/**
|
|
|
|
|
|
* @file CCurveClosure.h
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD>߱պ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|
|
|
|
|
* @author <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΰ
|
|
|
|
|
|
* @time 2010-11-30 2012-9-4<EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
#include <iostream>
|
|
|
|
|
|
#include "CurveEx.h"
|
|
|
|
|
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
|
#define CPVEC vector<CCrossPointW>
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief <20><><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9>*/
|
|
|
|
|
|
struct AFX_EXT_CLASS CCrossPointW
|
|
|
|
|
|
{
|
|
|
|
|
|
int number[2]; //<2F><><EFBFBD>ɽ<EFBFBD><C9BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߷ֱ<DFB7>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĵڼ<C4B5><DABC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
double x;
|
|
|
|
|
|
double y;
|
|
|
|
|
|
double z;
|
|
|
|
|
|
double l[2]; //<2F><><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><EFBFBD><D7AE>
|
|
|
|
|
|
CCurveEx* cur[2]; //<2F><><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>curve
|
|
|
|
|
|
|
|
|
|
|
|
bool operator ==(const CCrossPointW &cp) const
|
|
|
|
|
|
{
|
|
|
|
|
|
return number[0] == cp.number[0] && number[1] == cp.number[1] &&
|
|
|
|
|
|
fabs(x - cp.x) < 1e-5&&fabs(y - cp.y) < 1e-5&&fabs(z - cp.z) < 1e-5;
|
|
|
|
|
|
}
|
|
|
|
|
|
bool operator <(const CCrossPointW &cp) const
|
|
|
|
|
|
{
|
|
|
|
|
|
if (number[0] < cp.number[0]) return true;
|
|
|
|
|
|
if (number[0] == cp.number[0] && number[1] < cp.number[1])
|
|
|
|
|
|
return true;
|
|
|
|
|
|
else return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|
|
|
|
|
*/
|
|
|
|
|
|
struct AFX_EXT_CLASS NearbyCurveItem
|
|
|
|
|
|
{
|
|
|
|
|
|
CCurveEx* cur; //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
|
double ls0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD><CCBD><EFBFBD><EFBFBD>˳ʱ<CBB3>뷽<EFBFBD><EBB7BD><EFBFBD><EFBFBD><EFBFBD>߶ε<DFB6><CEB5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
double ll0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD><CCBD><EFBFBD><EFBFBD>˳ʱ<CBB3>뷽<EFBFBD><EBB7BD><EFBFBD><EFBFBD><EFBFBD>߶ε<DFB6><CEB5>յ<EFBFBD>
|
|
|
|
|
|
double ls1; //<2F><><EFBFBD>߶ε<DFB6>˳ʱ<CBB3>뷽<EFBFBD><EBB7BD><EFBFBD><EFBFBD>ʼ<EFBFBD>˵<EFBFBD>
|
|
|
|
|
|
double ll1; //<2F><><EFBFBD>߶ε<DFB6>˳ʱ<CBB3>뷽<EFBFBD><EBB7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>
|
|
|
|
|
|
int ils1Clockwise;//<2F><><EFBFBD>߶ε<DFB6>˳ʱ<CBB3>뷽<EFBFBD><EBB7BD><EFBFBD><EFBFBD>ʼ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
int ill1Clockwise;//<2F><><EFBFBD>߶ε<DFB6>˳ʱ<CBB3>뷽<EFBFBD><EBB7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
double angle0; //<2F><><EFBFBD>߶ε<DFB6>˳ʱ<CBB3>뷽<EFBFBD><EBB7BD><EFBFBD><EFBFBD>ʼ<EFBFBD>˵㻡<CBB5><E3BBA1>, <20><><EFBFBD>ĵ㴹ֱ<E3B4B9><D6B1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʼ<EFBFBD><CABC><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>ʼΪ0
|
|
|
|
|
|
double angle1; //<2F><><EFBFBD>߶ε<DFB6>˳ʱ<CBB3>뷽<EFBFBD><EBB7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵㻡<CBB5><E3BBA1>, <20><><EFBFBD>ĵ㴹ֱ<E3B4B9><D6B1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʼ<EFBFBD><CABC><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>ʼΪ0
|
|
|
|
|
|
bool isBorder;
|
|
|
|
|
|
NearbyCurveItem() {
|
|
|
|
|
|
ls0 = -1;
|
|
|
|
|
|
ll0 = -1;
|
|
|
|
|
|
ls1 = -1;
|
|
|
|
|
|
ll1 = -1;
|
|
|
|
|
|
ils1Clockwise = -1;
|
|
|
|
|
|
ill1Clockwise = -1;
|
|
|
|
|
|
angle0 = -1;
|
|
|
|
|
|
angle1 = -1;
|
|
|
|
|
|
isBorder = TRUE;
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/* @brief <20><><EFBFBD>߱պ<DFB1><D5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
class AFX_EXT_CLASS CCurveClosure
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>պ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param curveList <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
|
|
|
|
|
* @param dMaxExtend <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳤<EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param dRadius ɨ<EFBFBD><EFBFBD><EFBFBD>뾶
|
|
|
|
|
|
*/
|
|
|
|
|
|
CCurveClosure(CPtrList *curveList = NULL, double dMaxExtend = 0, double dRadius = 1e10);
|
|
|
|
|
|
~CCurveClosure();
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD>պ<EFBFBD><D5BA><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
CCurveEx* CreateClosedCurve(dfPoint& dfp);
|
|
|
|
|
|
/** @brief <20><><EFBFBD>ĵ<EFBFBD>*/
|
|
|
|
|
|
void SetCenterPoint(dfPoint& fpt);
|
|
|
|
|
|
/** @brief ɨ<><C9A8><EFBFBD>뾶 */
|
|
|
|
|
|
void SetRadius(double radius);
|
|
|
|
|
|
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳤<EFBFBD><ECB3A4> */
|
|
|
|
|
|
void SetMaxExtend(double dMaxExtend);
|
|
|
|
|
|
/** @brief <20><><EFBFBD>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
|
void Create(CPtrList *CurveList = NULL, double dMaxExtend = 0 , double dRadius = 1e10);//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|
|
|
|
|
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
void ClearAll();
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
//*************************************************ԭʼ<D4AD>㷨ʵ<E3B7A8><CAB5>********************************************//
|
|
|
|
|
|
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
void CurveExtend(CPtrList *CurveList, double dMaxExtend);
|
|
|
|
|
|
/** @brief CurveList<73><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD>*/
|
|
|
|
|
|
int GetAllCrossPoints(CPtrList *CurveList, double dMaxExtend = 0);
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief <20>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ཻ<EFBFBD><E0BDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,i1->i2Ϊ˳ʱ<CBB3>뷽<EFBFBD><EBB7BD>
|
|
|
|
|
|
* ml1 <EFBFBD><EFBFBD>ml2 Ϊnod<EFBFBD><EFBFBD>i1,i2<EFBFBD><EFBFBD>icurve<EFBFBD>϶<EFBFBD>Ӧ<EFBFBD><EFBFBD> auxAngle Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>봹ֱ<EFBFBD>ߵļн<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD>˳ʱ<EFBFBD>뷽<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
int GetInitPoint(CCurveEx* &icurve, double& ml1, double& ml2, int& i1, int& i2, double auxAngletan = 0);
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>ijһ<D2BB><D7AE>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7AE>*/
|
|
|
|
|
|
int GetNearbyLocation(CCurveEx* curve, double l0, double& ls, double& ll);
|
|
|
|
|
|
/** @brief <20>ҵ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><D7AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CrossNod<6F><64><EFBFBD>ţ<EFBFBD><C5A3>õ<EFBFBD><C3B5><EFBFBD>Ӧ<D3A6><D7AE>,1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2>غϣ<D8BA>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>nod<6F><64>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nod<6F>غ<EFBFBD>*/
|
|
|
|
|
|
int GetNearbyCrossNods(CCurveEx* curve, double l0, double& lsmaller, double& llarger, int& ismaller, int& ilarger);
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><D7AE>*/
|
|
|
|
|
|
double GetNextPoint(CCurveEx* curve, double l1, double l2, dfPoint& fpt);
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD>㼯<EFBFBD><E3BCAF><EFBFBD><EFBFBD>֪<EFBFBD><D6AA><EFBFBD>߶Σ<DFB6><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD> <20><><EFBFBD><EFBFBD>ǰһ<C7B0><D2BB><EFBFBD><EFBFBD><EFBFBD><D7AE><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>ཻ<EFBFBD><E0BDBB><EFBFBD>߶<EFBFBD>,
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_BorderPoints<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nodNum<EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>false*/
|
|
|
|
|
|
bool FindNextCurve(CCurveEx* &curve, int& nodNum, double& lahead);
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief
|
|
|
|
|
|
*ͨ<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><EFBFBD>㣬 <EFBFBD><EFBFBD><EFBFBD>жϸý<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* cpoint<EFBFBD><EFBFBD>˳ʱ<EFBFBD>뻹<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>,iClockWise = 1Ϊ˳ʱ<EFBFBD>룬 0Ϊ<EFBFBD><EFBFBD>ʱ<EFBFBD>룬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>жϳ<EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
bool GetAuxCrossPoint(dfPoint& auxpt, CCurveEx* &tarCurve, double& tarl0, int& bClockWise);
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief ֱ<>ӵõ<D3B5><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Χ<EFBFBD>ıպ<C4B1><D5BA><EFBFBD><EFBFBD><EFBFBD><F2A3ACB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CCurve<76><65><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
bool GetClosurePoints(dfPoint &dfp);
|
|
|
|
|
|
//*************************************************ԭʼ<D4AD>㷨ʵ<E3B7A8><CAB5>********************************************//
|
|
|
|
|
|
|
|
|
|
|
|
//*************************************************<2A>Ľ<EFBFBD><C4BD>㷨ʵ<E3B7A8><CAB5>********************************************//
|
|
|
|
|
|
/** @brief
|
|
|
|
|
|
*ͨ<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><EFBFBD>㣬 <EFBFBD><EFBFBD><EFBFBD>жϸý<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* cpoint<EFBFBD><EFBFBD>˳ʱ<EFBFBD>뻹<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>,iClockWise = 1Ϊ˳ʱ<EFBFBD>룬 0Ϊ<EFBFBD><EFBFBD>ʱ<EFBFBD>룬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>жϳ<EFBFBD>
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɸ<EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
bool GetAuxCrossCurve(dfPoint& auxpt, CCurveEx* &tarCurve, double& tarl0);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
|
|
|
|
|
void ClearNearbyData();
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param dfp <EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
|
|
|
|
|
|
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
int GetNearbyCurves();
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>.
|
|
|
|
|
|
*
|
|
|
|
|
|
* @return
|
|
|
|
|
|
*/
|
|
|
|
|
|
int SetNearbyCurveCrossNods();
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|
|
|
|
|
*
|
|
|
|
|
|
* @return
|
|
|
|
|
|
*/
|
|
|
|
|
|
CCurveEx* CreateRegionCurve();
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param pCur
|
|
|
|
|
|
* @param pl
|
|
|
|
|
|
* @param ls
|
|
|
|
|
|
* @param ll
|
|
|
|
|
|
* @param bClockwise
|
|
|
|
|
|
* @return
|
|
|
|
|
|
*/
|
|
|
|
|
|
int ExtractCurveSegment(CCurveEx *pCur, CPointList &pl, double ls, double ll, int bClockwise);
|
|
|
|
|
|
//*************************************************<2A>Ľ<EFBFBD><C4BD>㷨ʵ<E3B7A8><CAB5>********************************************//
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
CPointList m_BorderPoints; ///< <20>պ<EFBFBD><D5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>
|
|
|
|
|
|
dfPoint m_cpoint; ///<<3C><><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
CPVEC m_CrossNods; ///<<3C><><EFBFBD>н<EFBFBD><D0BD><EFBFBD>
|
|
|
|
|
|
set<int> m_FoundNodNumSet; ///< <20>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ҹ<EFBFBD><D2B9>Ľ<EFBFBD><C4BD><EFBFBD>
|
|
|
|
|
|
CPtrList *m_pCurveList; ///<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>list
|
|
|
|
|
|
double m_dMaxExtend; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳤<EFBFBD><ECB3A4>
|
|
|
|
|
|
double m_dRadius;
|
|
|
|
|
|
CPtrList *m_pNearbyCurveList; ///<2F><><EFBFBD>ĵ<EFBFBD><C4B5>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD>ŵ<EFBFBD>NearbyCurveItemָ<6D><D6B8>
|
|
|
|
|
|
CPtrList *m_pSelctedCurveList; // <20><><EFBFBD>ŵ<EFBFBD>CCurveExָ<78><D6B8>
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>pt1,pt2 <20><>pt2, pt3֮<33><D6AE><EFBFBD>ļн<C4BC>cosֵ*/
|
|
|
|
|
|
double GetCosVal(CPoint2D& pt1, CPoint2D& pt2, CPoint2D& pt3);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
double CrossProduct(double x1, double y1, double x2, double y2);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
double DotProduct(double x1, double y1, double x2, double y2);
|