#pragma once #include "AecDbEntityBase.h" #include "EarThwormDef.h" #ifdef EARTHWORM_EXPORT #define DLLIMPEXP __declspec(dllexport) #else #define DLLIMPEXP __declspec(dllimport) #endif //各类接口基类 class AecDbEarthWorm; class AecDbObjXDataMap; class DLLIMPEXP AecDbPortRoom : public AecDbEntityBase { public: ACRX_DECLARE_MEMBERS(AecDbPortRoom); protected: static Adesk::UInt32 kCurrentVersionNumber; public: AecDbPortRoom(void); virtual ~AecDbPortRoom(void); public: Acad::ErrorStatus SetEWFnctNode(EWFnctNode& node,int nSegIndex,int OnFncNodeIndex); EWFnctNode GetEWFnctNode() const; void GetEWFnctNode(EWFnctNode* pFn) const; bool UpdateFncNode(const EWFnctNode* pData); virtual bool UpdateDraw( ) const; virtual bool UpdateDraw( ); void SetShareDoubleHouse(bool bShareWall); bool IsShareDoubleHouse() const; void SetPosIndex(int nSegIndex,int OnFncNodeIndex); CPoint GetPosIndex() const {return CPoint(m_nSegIndex,m_nOnFncNodeIndex);} void SetEWormId(const AcDbObjectId& id){assertWriteEnabled();m_idEW = id;} AcDbObjectId GetEWormId() const {assertReadEnabled();return m_idEW;} //外表面积 double GetOutSideArea() const; virtual Adesk::Boolean GetDraw2d(AcDbVoidPtrArray& arEntPtrs,int nSectionDrawStyle = 0) const; virtual Adesk::Boolean GetDraw3d(AcDbVoidPtrArray& arEntPtrs,bool bWriteBimInfo = false) const; 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 Acad::ErrorStatus subErase(Adesk::Boolean erasing); virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform); virtual Acad::ErrorStatus subExplode(AcDbVoidPtrArray& arEntPtrs) const; virtual void subList() const; //AEC 派生 virtual bool IsXXXDoghouse() const; virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const; virtual Adesk::Boolean IsDraw2dByBlock() const; virtual Acad::ErrorStatus Draw3d(AcGiDraw &dc) const; // 专业数据 virtual AecDbObjXDataMap* GetSpecialtyData(AcDb::OpenMode bMode = AcDb::kForWrite); virtual const AecDbObjXDataMap* GetSpecialtyData() const; virtual Acad::ErrorStatus DrawDoghouse(AecDbEarthWorm* pEW,int iColor,const EWSegment& seg,const AcGePoint3d& ptFr,ESection eSecType,const AcGePoint2dArray& arSizeDatas,AcGiDraw& dc) const; virtual Acad::ErrorStatus CreateDoghouse(ESection eSecType,const AcGePoint2dArray& arSizeDatas,AcGeLineSeg3d& ln,AecDbEarthWorm* pEW) const; //剖切提取 virtual int GetSectionDraw(const AcGePoint3d& ptFr,const AcGePoint3d& ptTo,const AcGeVector3d& vtViewDir,const AcGeVector3d& vtTo, AcDbVoidPtrArray& arRegionPtrs) const; virtual int GetKernelSolids(AcDbVoidPtrArray& arSolidPtrs) const; static void FreeBuffer(int n,AcDbVoidPtrArray& arEntPtrs); static bool FindESignRecord(AcDbDatabase* pDb,LPCTSTR pszName,AcDbObjectId& idRec); static bool LoadESignRecord(AcDbDatabase* pDb,LPCTSTR pszName,AcDbObjectId& idRec); protected: int GetDoghouseDraw2d(AcGePoint3d& ptPos,AcGeVector2d& vtDir,AcGeVector3d& vtDir3d,AcGePoint2d& ptSize,AcGePoint2d& ptSta,AcGePoint2d& ptVSta,AcGePoint2d& ptVPortOut,AcGePoint3d& ptVFr,AcArray& arRooms,double& dGAngle) const; AcGePoint3d GetDoghouseDrawPos(AecDbEarthWorm* pEW,int iColor,const EWSegment& seg,const AcGePoint3d& ptFr,ESection eSecType,const AcGePoint2dArray& arSizeDatas) const; bool TransformRegionPerpToLine(AcDbRegion* pRegion,AcGeLineSeg3d& lnNormal) const; virtual void MakeVerSection2d(AcDb3dSolid* pSolid,int nSectionDrawStyle = 0) const; virtual void MakeVerSection2d(AcDb3dSolid* pSolid,const AcGePoint3d& ptCen,int nSectionDrawStyle = 0) const; virtual void MakeHorSection2d(AcDb3dSolid* pSolid) const; virtual void AddToSection2dDraw(AcDbEntity* pComEnt,int nSectionDrawtyle) const; virtual void AddToSection2dDraw(AcDbVoidPtrArray& arEntPtrs,int nSectionDrawtyle) const; public: //爬梯 vtDirX 梯子踏脚钢管方向 人两脚连线方向 vtDirXY 踏脚凸起方向 人背法向量 ptGe ptGe 开始中点 static AcDb3dSolid* DrawCatLadder(const AcGePoint3d& ptGe,const AcGeVector3d& vtDirX,const AcGeVector3d& vtDirXY,double dTH,double dW,AcDbVoidPtrArray& arOther3dPtrs); //直梯 vtDirX 梯子踏脚横水平方向 人两脚连线方向 vtDirXY 踏脚凸起Y方向 人背法向量 ,dTH 梯子总高度, ptGe 开始中点 static AcDb3dSolid* DrawCatLadderH(const AcGePoint3d& ptGe,const AcGeVector3d& vtDirX,const AcGeVector3d& vtDirXY,double dTH,double dW,AcDbVoidPtrArray& arOther3dPtrs); // 得到房子在管廊方向上的范围 bool getExtentInEarthworm(AcGePoint3d &ptMin, AcGePoint3d &ptMax) const; protected: AcDbSoftPointerId m_idEW; //管廊 Adesk::UInt32 m_nSegIndex; //所在seg位置 Adesk::UInt32 m_nOnFncNodeIndex; //子节点位置 EWFnctNode m_fncNode; //各种房子描述 bool m_bShareDoubleHouse; //通风口的对放置 protected: //mutable AcDbVoidPtrArray m_ar2DDrableBufPtrs;//临时缓存 俯视图 //mutable AcDbVoidPtrArray m_ar3DDrableBufPtrs;//临时缓存 };