#pragma once #include "aecdbentitybase.h" #include "AecDbObjXDataMap.h" #include "AecComplexCurveDraw.h" #ifdef EARTHWORM_EXPORT #define DLLIMPEXP __declspec(dllexport) #else #define DLLIMPEXP __declspec(dllimport) #endif typedef struct OpeningData { int nType; //窗:1 门 2 int nFlag; //特殊标记 double dWidth; //门窗宽度 double dHeight; //门窗高度 double dThick; //门窗厚度默认墙厚,路径窗 double dBomEl; //相对墙体底部标高,窗台高 double dXData[16]; //其他附属数据 //凸窗使用 BOOL bBayWin; //是否凸窗 BOOL bFTG; //是否落地 BOOL bAddBaf1; //加挡板1 BOOL bAddBaf2; //加挡板2 AcGePoint3d ptPos; //位置,Z是真实标高 TCHAR szBlockName2d[MAX_PATH];//本地文件名2d TCHAR szBlockName3d[MAX_PATH];//本地文件名3d TCHAR szName[MAX_PATH]; //名称 TCHAR szSpec[MAX_PATH]; //附属信息 TCHAR szNo[65];//编号 TCHAR szFactory[MAX_PATH];//厂家 Adesk::IntDbId idWall; //读取用 double dParamInWall; //排序用 PVOID dUserPtr; //附加数据,根据情况使用 }OPENINGDATA; class DLLIMPEXP AecDbXOpening : public AecDbEntityBase { public: ACRX_DECLARE_MEMBERS(AecDbXOpening); protected: static Adesk::UInt32 kCurrentVersionNumber; public: AecDbXOpening(void); ~AecDbXOpening(void); void SetOpeningData(const OpeningData& data,const AcDbObjectId& idWall); void UpdateOpeningData(const OpeningData& data); bool GetOpeningData(OpeningData& data) const; Acad::ErrorStatus SetLabel(const TCHAR *szLab); CString GetLabel() const; //提取为宿主减去的3dsolid,墙体内部调用 virtual bool GetForHouseSubtract(AcDbVoidPtrArray& arSolidPtrs) const; //刷新墙体的关键数据 void RefreshWallData(); //生成标准的墙体2D的图元 bool GetStandardDraw2d(AecComplexCurve& draw2d,bool bHasEnd = true) const; void GetSideLines(AecComplexCurve& drawSides,const AcGeVector3d& vtDir) const; //获取开口方向 Acad::ErrorStatus GetDoorOpenDir(AcGeVector3d& vtOpen) const; virtual CString getUniqueName() const; public: virtual Acad::ErrorStatus subWblockClone(AcRxObject* pOwnerObject, AcDbObject*& pClonedObject, AcDbIdMapping& idMap, Adesk::Boolean isPrimary = true) const; virtual Acad::ErrorStatus subDeepClone( AcDbObject* pOwnerObject, AcDbObject*& pClonedObject, AcDbIdMapping& idMap, Adesk::Boolean isPrimary = true ) const; virtual Acad::ErrorStatus copyFrom(const AcRxObject *pSrc); virtual void subList() const; virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform); virtual Acad::ErrorStatus subGetGripPoints( AcDbGripDataPtrArray& grips, const double curViewUnitSize, const int gripSize, const AcGeVector3d& curViewDir, const int bitflags) const; virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbVoidPtrArray& appData, const AcGeVector3d& offset, const int bitflags); virtual Acad::ErrorStatus subGetStretchPoints(AcGePoint3dArray& stretchPoints) const; virtual Acad::ErrorStatus subMoveStretchPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset); 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; 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); protected: virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const; virtual Acad::ErrorStatus Draw3d(AcGiDraw &dc) const; public: Acad::ErrorStatus DrawLabel(AcGiDraw &dc,LPCTSTR pszLab) const; virtual int GetDraw2dables(Adesk::UInt16 nDrawStyle, AcDbVoidPtrArray& arEntPtrs) const; virtual int GetDraw3dables(AcDbVoidPtrArray& arEntPtrs,bool bWriteBimInfo/* = false */) const; virtual int GetSectionDraw(const AcGePoint3d& ptFr,const AcGePoint3d& ptTo,const AcGeVector3d& vtViewDir,const AcGeVector3d& vtTo, AcDbVoidPtrArray& arRegionPtrs) const; virtual int ComparedTo(AecDbEntityBase *pCurOther) const; virtual SHJson::WValue& ToJson(bool bExprotGeo = true) const; virtual bool ByJson(const SHJson::WValue &v); virtual bool GetBimInfoTip(CString& sInfoTip) const; bool SectionAsDraw2d(AcGePlane &plan,AcDbVoidPtrArray &arRegionPtrs) const; public: //专业数据 和绘制设置 virtual AecDbObjXDataMap* GetSpecialtyData(AcDb::OpenMode bMode = AcDb::kForWrite); virtual const AecDbObjXDataMap* GetSpecialtyData() const; void RefreshWallOnOpeningDraw(const AcDbObjectId &idWall ); virtual void PreprocessForHlr(const AcGePoint3d &ptPlnO , const AcGeVector3d &vtPlnN , AcArray &ar) const; virtual void ProcessHlrResult(const AcArray &ar , const std::map> &preAr , AcArray &output) const; virtual bool GetProperties(SimpleProperty::PropertySetByIndex &porpertys) const; virtual bool SetProperties(SimpleProperty::PropertySetByName &porpertys); protected: Acad::ErrorStatus AddDimPoints(AcDbGripDataPtrArray &grips, const AcGeVector3d &curViewDir, const AcGePoint3d &ptSta, const AcGePoint3d &ptEnd, const AcGePoint3d &ptMid, int nDimType, double dVal = -1.0, double dt = 0.0) const; EPosition ExplainGripIndex(int nIndex,CString& sTip) const; AcGeScale3d GetBlockToIdentity(const AcDbObjectId& idRec) const; Acad::ErrorStatus ImpGetGripPoints(AcGePoint3dArray& gripPoints,const int bitflags) const; Acad::ErrorStatus SubAddDimPoints(AcDbGripDataPtrArray &grips, const AcGeVector3d &curViewDir) const; Acad::ErrorStatus PreRefreshWallDraw(); Acad::ErrorStatus RefreshWallDraw(); AcDbObjectId LoadOpeningBlk2d() const; AcDbObjectId LoadOpeningBlk3d() const; AcDbObjectId LoadOpeningSectionDrawBlk2d() const; void AlignInsPointToMidLine(); virtual bool GetPositionGrip(int nIndex, AecGripData *&pGrip) const; protected: AecGripData* m_pGripAppData;//不序列化 //专业数据 AecDbObjXDataMap m_mapSpecXData;//序列化 friend class AecDbGroupXOpening; };