// 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 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; };