Files
envi-code/SourceCode/Code2026/inc/AecDbPortRoom.h
T
2026-09-28 15:28:50 +08:00

128 lines
4.9 KiB
C++

#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<ERoom>& 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;//临时缓存
};