97 lines
4.0 KiB
C++
97 lines
4.0 KiB
C++
// Copyright (C), 1998-2007, Beijing Tangent Engineering Software Co. Ltd.
|
|
// = FileName: FilroadConnect.h
|
|
// = Version: 8.5
|
|
// = Author: lgh
|
|
// = Date: 2010-10-21 15:07:00
|
|
// = Description: 描述两条道路线的相交结构,所关联的道路线,起点相交,终点相交。缓存一些辅助信息
|
|
// = Maintainers:
|
|
#pragma once
|
|
|
|
class CCADEntFilRoadAdatper;
|
|
class CLineCADEntFilRoadAdapter;
|
|
class CArcCADEntFilRoadAdapter;
|
|
|
|
class CFilroadConnect;
|
|
typedef AcArray<CFilroadConnect*> ArFilroadConnectPointer;
|
|
class CFilroadConnect
|
|
{
|
|
public:
|
|
// CFilRoadConnect构造器。
|
|
static BOOL CreateConnect(CLineCADEntFilRoadAdapter* pEnt1, CLineCADEntFilRoadAdapter *pEnt2, ArFilroadConnectPointer &arConnect);
|
|
static BOOL CreateConnect(CLineCADEntFilRoadAdapter* pEnt1, CArcCADEntFilRoadAdapter *pEnt2, ArFilroadConnectPointer &arConnect);
|
|
static BOOL CreateConnect(CArcCADEntFilRoadAdapter* pEnt1, CArcCADEntFilRoadAdapter *pEnt2, ArFilroadConnectPointer &arConnect);
|
|
|
|
// 构造CFilRoadConnect.传入的参数的是以前已经倒角的边线,
|
|
static BOOL CreateConnectFilted(CLineCADEntFilRoadAdapter* pEnt1, bool bStart1,
|
|
CLineCADEntFilRoadAdapter *pEnt2, bool bStart2,
|
|
CFilroadConnect *&pConnect, CArcCADEntFilRoadAdapter* pFilArc);
|
|
static BOOL CreateConnectFilted(CLineCADEntFilRoadAdapter* pEnt1, bool bStart1,
|
|
CArcCADEntFilRoadAdapter *pEnt2, bool bStart2,
|
|
CFilroadConnect *&pConnect, CArcCADEntFilRoadAdapter* pFilArc);
|
|
static BOOL CreateConnectFilted(CArcCADEntFilRoadAdapter* pEnt1, bool bStart1,
|
|
CArcCADEntFilRoadAdapter *pEnt2, bool bStart2,
|
|
CFilroadConnect *&pConnect, CArcCADEntFilRoadAdapter* pFilArc);
|
|
|
|
~CFilroadConnect(void) {}
|
|
|
|
static void SetInterTol();
|
|
// 判断本连接类型是不是已经倒角的连接
|
|
bool IsFiltedConnect() const {return m_eType >= eLine_Line_Filted && m_eType <= eArc_Arc_Filted;}
|
|
|
|
enum ECornerRelation {eOutCorner = 0, eInCorner, eOther};
|
|
// 相交类型:直线-直线,直线-弧线,弧线-直线,弧线-弧线,
|
|
// ...已倒角,...已倒角,...已倒角,...已倒角,其他
|
|
enum EPairType{eLine_Line = 0, eLine_Arc, eArc_Line, eArc_Arc,
|
|
eLine_Line_Filted, eLine_Arc_Filted, eArc_Line_Filted, eArc_Arc_Filted, eOthter};
|
|
private:
|
|
// 交点
|
|
AcGePoint2d InterPoint() const;
|
|
AcGePoint2d CornerPoint1() const;
|
|
AcGePoint2d CornerPoint2() const;
|
|
public:
|
|
void InitInterPoint();
|
|
// 交点间的距离
|
|
double DistanceTo(const CFilroadConnect &otherPair) const;
|
|
// 外部半径,ptInterIn,内道路的交点,dRadiusIn,内道路的倒角半径。
|
|
double GetOutRadius(const AcGePoint2d &ptInterIn, double dRadiusIn) const;
|
|
// 对于已经倒过角的使用这个函数
|
|
double GetOutRadius(const CFilroadConnect &connectIn, double dRadiusIn) const;
|
|
|
|
// 检测关系,里边,外边,或者无关。
|
|
ECornerRelation CornerTo(const CFilroadConnect &otherPair) const;
|
|
|
|
// 执行倒角,
|
|
BOOL Filroad(double dRadius, AcGeCircArc2d &arc);
|
|
// 对外侧执行倒角
|
|
BOOL Filroad(const CFilroadConnect &filConnect, double dRadiusIn, AcGeCircArc2d &arcFil);
|
|
|
|
// 该connect所覆盖范围的起始角度
|
|
double StartAngleOfRegion() const;
|
|
// 检测dTestAngle是否在angleRegionStart开始的180的范围内。
|
|
static bool AngleInRegion(double angleRegionStart, double dTestAngle);
|
|
// 检测另外一个角度是否在该范围内。
|
|
bool TestAngleIn(double dOtherAngle) const;
|
|
|
|
private:
|
|
// 私有,不允许直接构造该数据
|
|
CFilroadConnect(CCADEntFilRoadAdatper *pEnt1, BOOL bStart1, CCADEntFilRoadAdatper *pEnt2, BOOL bStart2,
|
|
EPairType eType, double dAngle1, double dAngle2)
|
|
: m_pEnt1(pEnt1), m_pEnt2(pEnt2), m_bStart1(bStart1), m_bStart2(bStart2), m_eType(eType), m_dAngle1(dAngle1), m_dAngle2(dAngle2) {}
|
|
|
|
static CFilroadConnect* NewFilroadConnect(BOOL bAnti, CCADEntFilRoadAdatper *pEnt1, CCADEntFilRoadAdatper *pEnt2,
|
|
BOOL bStart1, BOOL bStart2, double dAngle1, double dAngle2, EPairType eType);
|
|
public:
|
|
CCADEntFilRoadAdatper *m_pEnt1, *m_pEnt2;
|
|
BOOL m_bStart1, m_bStart2;
|
|
EPairType m_eType;//
|
|
CArcCADEntFilRoadAdapter* m_pFilArc; // 原图已经倒角的连接,该数据保存倒角圆弧的ID,如果重新倒角,该倒角需要删除
|
|
|
|
double m_dAngle1, m_dAngle2;
|
|
|
|
static AcGeTol m_geTolInter;
|
|
static double m_dAngleTol;
|
|
private:
|
|
AcGePoint2d m_ptInter;
|
|
};
|
|
|