#ifndef __DBCURTAIN_WALL_H #define __DBCURTAIN_WALL_H #ifndef _TDBWALL_H_ #include "TDbWall.h" #endif // 基线为竖挺的左(内)、中、右(外) // 如果竖挺为显式,玻璃位置由玻璃外皮距离基线来确定 // 如果竖挺为隐式,则玻璃内侧与挺外侧平齐 // 如果横框为显式,则其位置由基线来确定 // 如果横框为隐式,则其位置由玻璃来确定 #define WF_TOP_ROW 0x04 //需要顶框,覆盖WF_TOP #define WF_BOT_ROW 0x08 //需要底框,覆盖WF_BOTTOM #define WF_COL_INVIS 0x20 //隐挺,覆盖 WF_LEFT_INSULATE #define WF_ROW_INVIS 0x40 //隐框,覆盖 WF_RIGHT_INSULATE #define WF_COL_AVERAGE0 0x80 //TArch6竖挺均分与墙端封口重叠了 #define WF_COL_AVERAGE 0x10000 //新分配竖挺均分 #define WF_ROW_AVERAGE 0x100 //横框均分 #define WF_SIMPLE2D 0x8000//2D示意幕墙显示 class TARCH_EXP TDbCurtainWall: public TDbWall { DECLARE_TENTBASE(); ACRX_DECLARE_MEMBERS(TDbCurtainWall); private: const static Adesk::UInt8 g_nVersion; public: enum ColAlignment { kInside=0, kCenter=1, kOutside=2 }; DList m_rowSpaces, m_colSpaces; //横,竖间距 protected: ColAlignment m_colAlign; //挺的对齐位置 // 竖挺截面参数 double m_uCol, m_vCol; //挺的截面参数,u为沿着墙的方向尺寸 // 横框截面参数 double m_uRow, m_vRow; //框的截面参数, u为竖直方向的尺寸 double m_nGlazDist; //玻璃距离基线,可以为负数 double m_nRowDist; //横框中心距离基线 Adesk::UInt8 m_nRowNum, m_nColNum; //横竖均分数目 AcDbHardPointerId m_idLayerGlass3d, m_idLayerCol3d, m_idLayerRow3d; //玻璃、竖挺和横框的图层 public: TDbCurtainWall(); // Override from AcDbEntity virtual Acad::ErrorStatus dwgInFields (AcDbDwgFiler*); virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler*) const; virtual Acad::ErrorStatus dxfInFields (AcDbDxfFiler*); virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler*) const; virtual Acad::ErrorStatus subGetClassID(CLSID* pClsid) const; virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform); virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset); // Override form TEntityBase virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag); virtual int GetFirstVersion()const{return 6;}//ok //add by xlc on 090709 导出T5时对象不分解 virtual Acad::ErrorStatus DownGradeSave(int nDrawMode, AcDbVoidPtrArray &entSet, BOOL *bErase); // sg add 101129,支持导出XML virtual CString GetXml(const AcGeMatrix3d& mat) const; virtual Acad::ErrorStatus ExplodeOrDraw2d(XExplodeDraw &dc) const; virtual Acad::ErrorStatus ExplodeOrDraw3d(XExplodeDraw &dc) const; virtual void GetTips(DList &) const; //取动态属性显示数据 virtual const TCHAR *GetDefaultLayer() const; // Override from TWallData virtual void UpdateWallWidth(); //根据竖挺参数更新墙宽参数 public: // Status inquiry BOOL IsRowAverage() const { //是否横框均分 return ((m_nWallFlag&WF_ROW_AVERAGE)!=0); } BOOL IsColAverage() const { //是否竖挺均分 return ((m_nWallFlag&WF_COL_AVERAGE)!=0); } BOOL IsRowHide() const { //是否隐式横框 return ((m_nWallFlag&WF_ROW_INVIS)!=0); } BOOL IsColHide() const { //是否隐式竖挺 return ((m_nWallFlag&WF_COL_INVIS)!=0); } BOOL HasTopRow() const { return ((m_nWallFlag&WF_TOP_ROW)!=0); } BOOL HasBotRow() const { return ((m_nWallFlag&WF_BOT_ROW)!=0); } BOOL IsSimple2D() const { return ((m_nWallFlag&WF_SIMPLE2D)!=0); } Adesk::UInt8 GetRowNum() const { return m_nRowNum; } Adesk::UInt8 GetColNum() const { return m_nColNum; } TDbCurtainWall::ColAlignment GetColAlignment() const { return m_colAlign; } double GetGlazeDist() const { //玻璃距离基线 return m_nGlazDist; } double GetRowDist() const { //横框距离基线 return m_nRowDist; } double GetColU() const { return m_uCol; } double GetColV() const { return m_vCol; } double GetRowU() const { return m_uRow; } double GetRowV() const { return m_vRow; } AcDbObjectId GetLayerGlass3d() const { return m_idLayerGlass3d; } AcDbObjectId GetLayerCol3d() const { return m_idLayerCol3d; } AcDbObjectId GetLayerRow3d() const { return m_idLayerRow3d; } // SetData void SetRowNum(Adesk::UInt8 rowNum); //设置横框分格数 void SetColNum(Adesk::UInt8 colNum); //设置竖挺分格数 void SetColAlignment(TDbCurtainWall::ColAlignment align); //设置竖挺对齐方式 void SetRowAverage(BOOL bTrue); //设置横框均分标志 void SetColAverage(BOOL bTrue); //设置竖挺均分标志 void SetColAverage0(BOOL bTrue); //设置竖挺均分标志,TArch6 void SetRowHide(BOOL bTrue); //设置隐式横框 void SetColHide(BOOL bTrue); //设置隐式竖挺 void SetTopRow(BOOL bTrue); //设置隐式横框 void SetBotRow(BOOL bTrue); //设置隐式竖挺 void SetSimple2D(BOOL bTrue); void SetGlazeDist(double nDist); void SetRowDist(double nDist); void SetColU(double u); void SetColV(double v); void SetRowU(double u); void SetRowV(double v); void SetLayerGlass3d(AcDbObjectId idLay) { assertWriteEnabled(); m_idLayerGlass3d=idLay; } void SetLayerCol3d(AcDbObjectId idLay) { assertWriteEnabled(); m_idLayerCol3d=idLay; } void SetLayerRow3d(AcDbObjectId idLay) { assertWriteEnabled(); m_idLayerRow3d=idLay; } //用于墙融合等墙的长度改变时所作的处理,dOldLenght长度改变之前的长度 static void RearrangeCol(TDbWall* pWall, double dOldLenght); //用于墙打断是重新设置立柱信息 static void WallSegmentateColumnAdjust(TDbCurtainWall* pWall, const double &lenght, double dSegmentatePos, BOOL& bFirstAve, UINT& nFirstColumnNum, std::vector& vecFirstColumnGap, BOOL& bSecondAve, UINT& nSecondColumnNum, std::vector& vecSecondColumnGap); public: // 当重构TDPtrList后,tch_com17会出现STD链接错误,故在这里封装接口避开。以后令行解决。 #if (ADS == 17) void AppendForColSpaces(const double & d); void AppendForRowSpaces(const double & d); #endif }; #endif