128 lines
5.0 KiB
C++
128 lines
5.0 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;//临时缓存
|
|
};
|