#pragma once #include "AecDbEntityBase.h" #include "AecDbObjXDataMap.h" #include "AecComplexCurveDraw.h" #ifdef EARTHWORM_EXPORT #define DLLIMPEXP __declspec(dllexport) #else #define DLLIMPEXP __declspec(dllimport) #endif #include "AecMInterfaces.h" class DLLIMPEXP AecDb3dRoadFitting : public AecDbEntityBase, public AecMInterfaces { public: ACRX_DECLARE_MEMBERS(AecDb3dRoadFitting); public: protected: static Adesk::UInt32 kCurrentVersionNumber; public: AecDb3dRoadFitting(void); virtual ~AecDb3dRoadFitting(void); void SetRoadParam(WPipe::RoadParam* pPipePar); bool GetRoadParam(WPipe::RoadParam& rp) const; //根据runtime创建 bool Create(); void RemoveAll(); //多通道路 void SetMInfRoad(AecComplexCurve& cmplOut); //设置环岛 pPl必须闭合 void SetRoundabout(AcDbPolyline* pPl); void RemoveRoundabout(); virtual Acad::ErrorStatus dwgInFields(AcDbDwgFiler* pFiler); virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler* pFiler) const; virtual Acad::ErrorStatus dxfInFields(AcDbDxfFiler* pFiler); virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler* pFiler) const; virtual void subList() const; virtual Acad::ErrorStatus copyFrom(const AcRxObject* pSrc); virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform); #if ARX>16 virtual Acad::ErrorStatus subGetGripPoints(AcDbGripDataPtrArray& grips, const double curViewUnitSize, const int gripSize, const AcGeVector3d& curViewDir, const int bitflags) const; virtual Acad::ErrorStatus subGetStretchPoints(AcGePoint3dArray& stretchPoints) const; virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbVoidPtrArray& appData, const AcGeVector3d& offset, const int bitflags); virtual Acad::ErrorStatus subMoveStretchPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset); virtual void GetGripText(int nPos, CString& sText); #endif //AEC 派生 virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const; virtual Acad::ErrorStatus Draw3d(AcGiDraw &dc) const; //专业数据 和 绘制设置 AecDbObjXDataMap* GetSpecialtyData(AcDb::OpenMode bMode = AcDb::kForWrite); virtual const AecDbObjXDataMap* GetSpecialtyData() const; //接口重载 virtual bool GetInterface(AcArray& arInfs) const; virtual bool GetInterface(int nIndex,AecInterface& inf) const; virtual int GetInterfaceCount() const; virtual int GetActiveInf() const; virtual void SetActiveInf(int nIndex); virtual void LockInf(int nInf); virtual bool TransformAssocInf(int nInf,const AcGeMatrix3d& xform); virtual void NewGUID(); protected: bool CreateElbow2d(); bool CreateReduceElbow2d(); bool CreateTee(); bool CreateCross(); bool CreateReduce(); protected: LPCTSTR GetGripCmd() const; EPosition ExplainGripIndex(int nIndex) const; Acad::ErrorStatus ImpGetGripPoints(AcGePoint3dArray& gripPoints,const int bitflags) const; AcDbArc* CharferArc(AcDbLine*& pLn1,AcDbLine*& pLn2,const AcGePoint3d& ptInt,double dRR); bool CharferArc(AecEqui::AecCurveElement& el,AecEqui::AecCurveElement& elT,AecEqui::AecCurveElement& elArc,const AcGePoint3d& ptInt,double dR); AcDbRegion* MakeRegion(int nPos) const; void DrawRoadBordLine(AcGiDraw &dc,int nColor,BOOL bOutOrSide) const; protected: Adesk::Int16 m_nInfActive; CString m_sGUID; bool m_bActive; AecDbObjXDataMap m_mapSpecXData; AecComplexCurve m_cmplOutSide; //外维线 AecComplexCurve m_cmplInSide; //内部线 protected: AecGripData* m_pGripAppData; //夹点 };