178 lines
5.9 KiB
C++
178 lines
5.9 KiB
C++
#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 |