Files
envi-code/SourceCode/Code2026/tg_shs/shs_siteplan/FilroadConnect.h
T
2026-09-28 15:28:50 +08:00

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