Files
envi-code/SourceCode/Code2026/tg_shs/inc/TArch/DbCurtainWall.h
T

178 lines
5.9 KiB
C++
Raw Normal View History

2026-09-28 15:28:50 +08:00
#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<double> 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<TObjInfoUnit> &) 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<double>& vecFirstColumnGap,
BOOL& bSecondAve, UINT& nSecondColumnNum, std::vector<double>& vecSecondColumnGap);
public:
// 当重构TDPtrList后,tch_com17会出现STD链接错误,故在这里封装接口避开。以后令行解决。
#if (ADS == 17)
void AppendForColSpaces(const double & d);
void AppendForRowSpaces(const double & d);
#endif
};
#endif