#pragma once /*---------------------------------------------------------------------------------- //AecDbEwFitting :弯头,三通,四通,等Fitting通用类 // //通过 基本体 进行基本体的拼接 //---------------------------------------------------------------------------------*/ #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 AecDbEwFitting : public AecDbEntityBase, public AecMInterfaces { public: ACRX_DECLARE_MEMBERS(AecDbEwFitting); public: protected: static Adesk::UInt32 kCurrentVersionNumber; public: AecDbEwFitting(void); virtual ~AecDbEwFitting(void); 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); virtual Acad::ErrorStatus subGetOsnapPoints(AcDb::OsnapMode osnapMode, INT_PTR gsSelectionMark, const AcGePoint3d& pickPoint, const AcGePoint3d& lastPoint, const AcGeMatrix3d& viewXform, AcGePoint3dArray& snapPoints, AcDbIntArray& geomIds) const; virtual Acad::ErrorStatus subGetGeomExtents(AcDbExtents& extents) const; virtual Acad::ErrorStatus subIntersectWith(const AcDbEntity* pEnt, AcDb::Intersect intType, AcGePoint3dArray& points, INT_PTR thisGsMarker, INT_PTR otherGsMarker) const; virtual Acad::ErrorStatus subIntersectWith(const AcDbEntity* pEnt, AcDb::Intersect intType, const AcGePlane& projPlane, AcGePoint3dArray& points, INT_PTR thisGsMarker, INT_PTR otherGsMarker) const; #endif //AEC 派生 virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const; virtual Acad::ErrorStatus Draw3d(AcGiDraw &dc) const; virtual void AssertWriteEnabled(Adesk::Boolean autoUndo = true, Adesk::Boolean recordModified = true ); //绘制接口 virtual Acad::ErrorStatus DrawInfArrow(AcGiDraw &dc) const; //剖切提取,符号法,对于管线构件 virtual bool GetSectionDraw(AcGePlane& plan,const AcGeVector3d& vtTo,AcDbVoidPtrArray& arRegionPtrs) const; virtual int GetSectionDraw(const AcGePoint3d& ptFr,const AcGePoint3d& ptTo,const AcGeVector3d& vtViewDir,const AcGeVector3d& vtTo, AcDbVoidPtrArray& arRegionPtrs) const; void DrawSubAxis(AcGiDraw &dc,AcDbEntity* pEnt) const; protected: //2d void DrawElbow2d(AcGiDraw &dc) const; void DrawReduceElbow2d(AcGiDraw &dc) const; bool DrawElbow2dPVC(AcGiDraw &dc) const; void DrawTee2d(AcGiDraw &dc) const; void DrawCross2d(AcGiDraw &dc) const; void DrawWye2d(AcGiDraw &dc) const; void DrawReduce2d(AcGiDraw &dc) const; void DrawLateral2d(AcGiDraw &dc) const; void DrawFlange2d(AcGiDraw &dc) const; void DrawWcap2d(AcGiDraw &dc) const; void DrawYNut(AcGiDraw &dc, AcGePoint3d &ptM, const AcGeVector3d& vtX, const AcGeVector3d& vtY) const; void DrawNut3d(AcGiDraw &dc, AcGePoint3d &ptGeC, const AcGeVector3d &vtZ, double dR) const; void DrawFlxJoin2d(AcGiDraw &dc) const; void DrawThrough2d(AcGiDraw &dc) const; void DrawUJoin2d(AcGiDraw &dc) const; void DrawRJoin2d(AcGiDraw &dc) const; void DrawOJoin2d(AcGiDraw &dc) const; void DrawIJoin2d(AcGiDraw &dc) const; void DrawWRP2d(AcGiDraw &dc) const; void DrawWHP2d(AcGiDraw &dc) const; void DrawWSPB2d(AcGiDraw &dc) const; void DrawWGastket2d(AcGiDraw &dc) const; //断管符号 void DrawSide2d(AcGePoint3d ptSideCen,AcGeVector3d vcDir,double dD,AecComplexCurve& cplCurve,bool bMirror) const; //3d void DrawElbow(AcGiDraw &dc) const; void DrawReduceElbow(AcGiDraw &dc) const; bool DrawElbow3dPVC(AcGiDraw &dc) const; void DrawTee(AcGiDraw &dc) const; void DrawCross(AcGiDraw &dc) const; void DrawWye(AcGiDraw &dc) const; void DrawReduce(AcGiDraw &dc) const; void DrawLateral(AcGiDraw &dc) const; void DrawFlange(AcGiDraw &dc) const; void DrawWcap(AcGiDraw &dc) const; void DrawFlxJoin(AcGiDraw &dc) const; void DrawWRP(AcGiDraw &dc) const; void DrawWHP(AcGiDraw &dc) const; void DrawWSPB(AcGiDraw &dc) const; void DrawWGastket(AcGiDraw &dc) const; void DrawThrough(AcGiDraw &dc) const; void DrawUJoin(AcGiDraw &dc) const; void DrawRJoin(AcGiDraw &dc) const; void DrawOJoin(AcGiDraw &dc) const; void DrawIJoin(AcGiDraw &dc) const; void DrawCLinder(AcGiDraw &mode, AcGePoint3d ptCen, AcGeVector3d vtDir, double dD) const; public: void DrawInfCap2d(AcGiDraw &dc) const; void DrawInfCap3d(AcGiDraw &dc) const; public: //设置类型 内部存在专业数据中 EFittingType GetFittingType() const; WPipe::PipeParam* GetPipeParam(int nInf = 0) const; bool GetFittingName(CString &sName) const; public: //专业数据 和 绘制设置 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 LPCTSTR GetGUID() const; virtual void SetActive(bool bActive); virtual bool IsActive() const; virtual void NewGUID(); Acad::ErrorStatus setNormal(const AcGeVector3d& vtNorm); AcGeVector3d normal() const; //获取二维视图显示的图形 virtual int GetDraw2dables(Adesk::UInt16 nDrawStyle, AcDbVoidPtrArray& arEntPtrs) const; //获取三维显示图形 virtual int GetDraw3dables(AcDbVoidPtrArray& arEntPtrs,bool bWriteBimInfo = false ) const; virtual int ComparedTo(AecDbEntityBase* pCurOther) const; Acad::ErrorStatus TransformBy(const AcGeMatrix3d xform); //图层和线型 void SetSingleLayer(const AcDbObjectId& idLayer); AcDbObjectId GetSingleLayer() const; void SetSingleLineType(const AcDbObjectId& idLt); AcDbObjectId GetSingleLineType() const; void SetDoubleLayer(const AcDbObjectId& idLayer); AcDbObjectId GetDoubleLayer() const; void SetDoubleLineType(const AcDbObjectId& idLt); AcDbObjectId GetDoubleLineType() const; void SetDashLayer(const AcDbObjectId& idLayer); AcDbObjectId GetDashLayer() const; void SetCenterLayer(const AcDbObjectId& idLayer); AcDbObjectId GetCenterLayer() const; AcDbArc* GetElbowArc() const; LPCTSTR GetGripCmd() const; // 用于管线系统变化后,更新实体 // 主要是 内外线的颜色、线形、线宽、图层 void UpdatePipeSystem(const int &outClr , const AcDbObjectId &outLt , const double &outWd , const AcDbObjectId &outLy , const int &innClr , const AcDbObjectId &innLt , const double &innWd , const AcDbObjectId & innLy); virtual void ProcessHlrResult(const AcArray &ar , const std::map> &preAr , AcArray &output) const; bool IsPlasticsMat() const; double GetGasketThick() const; protected: AcDbRegion* GetSection(double dD,double dt) const; AcDbRegion* GetSection(double W, double H, double dt) const; EPosition ExplainGripIndex(int nIndex) const; Acad::ErrorStatus ImpGetGripPonts(AcGePoint3dArray& gripPoints,const int bitflags) const; void DrawInfCircle(AcGiDraw &dc,AcDbArc* pArcElbow,double dR,int nStyle = 0,BOOL bDraw = TRUE) const; void DrawInfCircle(AcGiDraw &dc, AcDbCurve *pCrv,AcGeVector3d &vt1, AcGeVector3d &vt2, double dR, int nStyle = 0, BOOL bDraw = TRUE) const; void DrawInfCircle(AcGiDraw &dc,AcDbArc* pArcElbow, double dRs,double dRe,int nStyle = 0,BOOL bDraw = TRUE) const; static BOOL FormatDot(AcGePoint3d& ptGeCen, double dPlotWidth,AcDbPolyline* pDot,const AcGePlane& plane,const AcGeVector3d& vtNorm,int nColor); virtual SHJson::WValue& ToJson(bool bExprotGeo = true) const; virtual bool ByJson(const SHJson::WValue &v); bool GetBimInfoTip(CString& sInfoTip) const; Acad::ErrorStatus DrawPlotPolyline(AcGiDraw &dc , AcDbCurve* pCurve , int nStyle , BOOL bDraw = TRUE , BOOL bIsSE = FALSE , bool bIsCenter = TRUE ) const; void RePlineStartOrEnd(AcDbPolyline* pPl,AcDbArc* pArcElbow,double dR,int nStyle) const; void RePlineStartOrEnd(AcDbPolyline *pPl, int nAdd, double dR, int nStyle) const; AcDbLine *ElbowPipeStra(AcGiDraw &dc, AcDbCurve *pArcOut, AcDbCurve *pArcIn, int nStyle, double dF, int nPos, AcDbArc *pArcElbowCen = NULL) const; //和上次上次弯头遮挡裁剪 void WipeLastLastElbow(AcGiDraw &dc,int nStyle) const; virtual void PreprocessForHlr(const AcGePoint3d &ptPlnO , const AcGeVector3d &vtPlnN , AcArray &ar) const; protected: Adesk::Int16 m_nInfActive; CString m_sGUID; bool m_bActive; //其他按通用图层和线型 //单线图层和线型 AcDbObjectId m_idSingleLayer; AcDbObjectId m_idSingleLnType; //双线图层和线型 AcDbObjectId m_idDoubleLayer; AcDbObjectId m_idDoubleLnType; // AcDbObjectId m_idDashLayer; AcDbObjectId m_idCenterLayer; //专业数据 AecDbObjXDataMap m_mapSpecXData; protected: mutable AcDbVoidPtrArray m_arDrawBuffer3d1; mutable AcDbVoidPtrArray m_arDrawBuffer3d2; public: AecGripData* m_pGripAppData; //夹点 };