372 lines
12 KiB
C++
372 lines
12 KiB
C++
#ifndef __DBSPACE_H
|
|
#define __DBSPACE_H
|
|
|
|
#include "SpaceData.h"
|
|
|
|
class XDcStream;
|
|
class TDbText;
|
|
|
|
#define SF_MASK 0x01 //屏蔽
|
|
#define SF_HIGHLIGHT 0x02 //加亮
|
|
#define SF_GROUND3D 0x04 //封三维地面
|
|
|
|
//TArch7
|
|
#define SF_SHOWOUTLINE 0x08 //始终显示边界
|
|
#define SF_BALCONY 0x10 //阳台房间
|
|
#define SF_HVAC 0x20 //采暖空调房间,节能特性
|
|
//#define SF_ROOF 0x100,6.5节能属性,7.0 obsolete
|
|
|
|
//TArch8
|
|
#define SF_HALF_AREA 0x40 //建筑面积取一半
|
|
#define SF_HATCH 0x80 //面积填充
|
|
|
|
|
|
// 房间面积对象
|
|
class TARCH_EXP TDbSpace: public TDbEntity, public TSpaceData
|
|
{
|
|
DECLARE_TENTBASE();
|
|
|
|
private:
|
|
const static Adesk::UInt8 g_nVersion;
|
|
|
|
protected:
|
|
Adesk::UInt8 m_nSpaceFlag;
|
|
|
|
// TArch6 data
|
|
AcDbHardPointerId m_idTextStyle;
|
|
double m_nTextHeight;
|
|
double m_nRotation; //文字转角
|
|
double m_nFloorThick; //地板厚度
|
|
|
|
public:
|
|
DList<AcDbObjectId> m_lstWallEnclosure;
|
|
|
|
//TArch7 data
|
|
//节能数据
|
|
double m_dbTempSum;//夏季室内设计温度
|
|
double m_dbTempWin;//冬季室内设计温度
|
|
double m_nUnitNo; //空调系统单元号
|
|
double m_dbColdLoad;//冷负荷
|
|
double m_dbHeatLoad;//热负荷
|
|
XString m_strDownFloorCons;//地板(地面)构造类型
|
|
XString m_strUpFloorCons;//天花板(屋顶)构造类型
|
|
|
|
//TArch8
|
|
Adesk::UInt32 m_nNewFlag;
|
|
enum AreaType{kUseArea=0, //房间面积
|
|
kHouseArea=1, //套内面积
|
|
kTotalArea=2, //建筑轮廓面积
|
|
kHoleArea=3, //洞口面积
|
|
kShareArea=4, //公摊面积
|
|
kBalconyArea=5,//套内阳台面积
|
|
kOther=-1 };//其它面积
|
|
AreaType m_nType;//面积类型
|
|
|
|
XString m_sHatchStyle;//填充样式
|
|
Adesk::UInt16 m_nHatchColor;//填充色
|
|
AcDbHardPointerId m_idHatchLayer;//填充图层
|
|
double m_dHatchScale; // 填充比例,sg add 081124
|
|
double m_dHatchAngle; // 填充角度,sg add 081124
|
|
|
|
DList<AcDbSoftPointerId> m_lstBalconyArea;//附属的套内阳台面积,面积计算用
|
|
DList<AcDbSoftPointerId> m_lstBalcony;//套内阳台
|
|
|
|
Adesk::UInt8 m_bMText; // sg add 081211,房间名称是否使用两行
|
|
// 8.0中,采用两行单行文字,实现需求
|
|
XString m_sSndName; // sg add 081215,第二行房间名称
|
|
|
|
bool m_bIsStretch; // sg add 120215,标记夹点操作是否是拉伸操作
|
|
|
|
public:
|
|
TDbSpace();
|
|
~TDbSpace();
|
|
virtual BOOL IsValid() const;
|
|
virtual bool IsModelEntity() const{return true;}
|
|
virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag);
|
|
virtual Acad::ErrorStatus SetPathPoly(const XPoly2D &polyPath,const AcGeVector3d&normal);
|
|
virtual Acad::ErrorStatus GetPathPoly(XPoly2D &polyPath,AcGeVector3d&normal) const;
|
|
|
|
ACRX_DECLARE_MEMBERS(TDbSpace);
|
|
|
|
// Overriden function from AcDbEntity
|
|
virtual Acad::ErrorStatus subGetClassID(CLSID* pClsid) const;
|
|
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 subGetOsnapPoints(
|
|
AcDb::OsnapMode osnapMode,
|
|
INT_PTR gsSelectionMark,
|
|
const AcGePoint3d& ptPick,
|
|
const AcGePoint3d& lastPoint,
|
|
const AcGeMatrix3d& viewXform,
|
|
AcGePoint3dArray& snapPoints,
|
|
AcDbIntArray& geomIds) const;
|
|
virtual Acad::ErrorStatus subIntersectWith(const AcDbEntity* ent,
|
|
AcDb::Intersect intType,
|
|
AcGePoint3dArray& points,
|
|
INT_PTR thisGsMarker,
|
|
INT_PTR otherGsMarker) const;
|
|
virtual Acad::ErrorStatus subIntersectWith(const AcDbEntity* ent,
|
|
AcDb::Intersect intType,
|
|
const AcGePlane& projPlane,
|
|
AcGePoint3dArray& points,
|
|
INT_PTR thisGsMarker,
|
|
INT_PTR otherGsMarker) const;
|
|
|
|
virtual Acad::ErrorStatus subGetGripPoints(AcGePoint3dArray& gripPoints,
|
|
AcDbIntArray& osnapModes,
|
|
AcDbIntArray& geomIds) const;
|
|
virtual Acad::ErrorStatus subGetStretchPoints(AcGePoint3dArray & stretchPoints) const;
|
|
|
|
virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform);
|
|
virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbIntArray& indices,
|
|
const AcGeVector3d& offset);
|
|
virtual Acad::ErrorStatus subMoveStretchPointsAt(const AcDbIntArray& indices,
|
|
const AcGeVector3d& offset);
|
|
|
|
// drived from TDbEntity
|
|
virtual Acad::ErrorStatus ExplodeOrDraw2d(XExplodeDraw &dc) const;
|
|
virtual Acad::ErrorStatus ExplodeOrDraw3d(XExplodeDraw &dc) const;
|
|
|
|
virtual void GetTips(DList<TObjInfoUnit> &) const; //取动态属性显示数据
|
|
virtual Acad::ErrorStatus GetGripText(int i, CString &cs) const;
|
|
virtual const TCHAR *GetDefaultLayer() const;
|
|
virtual int ConvertText(TConvertTextPtr ptr, void *pData=NULL);
|
|
// 返回发现的位置,同时posStart往前移动(以便继续找下一个使用),
|
|
virtual TTextPosition FindSubText(const TCHAR *sSubText, TTextPosition &posStart, TTextRange *pRange=NULL) const;
|
|
// 返回下一次查找的开始位置
|
|
virtual TTextPosition ReplaceSubText(const TTextPosition &posRep, const TCHAR *sRepText, TTextRange *pRange=NULL);
|
|
virtual long GetSubTextNum()const{return 2;}//ok
|
|
virtual void SetSubText(long i,CString sText);
|
|
|
|
virtual Acad::ErrorStatus DownGradeSave(int nDrawMode, AcDbVoidPtrArray &entSet,
|
|
BOOL *bErase); // sg add 081224
|
|
// sg add 111116,支持导出XML
|
|
virtual CString GetXml(const AcGeMatrix3d& mat) const;
|
|
|
|
// sg add 120214,支持夹点ctrl功能切换
|
|
virtual int GetCtrlToggleIndex()const { return 9; }
|
|
|
|
#if ADS>15
|
|
virtual void CreateGrip();
|
|
virtual Acad::ErrorStatus EntityToDim(long iGrip,long iDim,const AcDbEntity*pEnt);
|
|
virtual Acad::ErrorStatus DimToEntity(long iGrip,long iDim,double newValue,const AcGeVector3d& offset);
|
|
#endif
|
|
|
|
void InitSetLocation(const XPoint &ptLoc); //初始设置房间(编号)的位置
|
|
Acad::ErrorStatus UpdateFrom(const XAecSpaceCell &src, BOOL bExtSpace);
|
|
void CreateWipeOut(AcDbVoidPtrArray &entSet) const;
|
|
|
|
// 访问属性的方法见基类TSpaceData, 修改前需要assertWriteEnabled();
|
|
BOOL GetText(Adesk::UInt32 cookies, TDbText &text) const;
|
|
BOOL IsMask() const;
|
|
BOOL IsHighlight() const;
|
|
BOOL IsShowOutline()const;
|
|
BOOL Has3D() const {return ((m_nSpaceFlag&SF_GROUND3D)!=0);}
|
|
BOOL IsBalcony()const{return (m_nSpaceFlag&SF_BALCONY)!=0;}//ok
|
|
BOOL IsHalfArea()const{return (m_nSpaceFlag&SF_HALF_AREA)!=0;}//ok
|
|
BOOL HasHatch()const{return (m_nSpaceFlag&SF_HATCH)!=0;}
|
|
const TCHAR* GetHatchStyle()const{return m_sHatchStyle;}//ok
|
|
double GetRotation() const
|
|
{
|
|
return m_nRotation;
|
|
}
|
|
AcDbObjectId GetTextStyleId() const
|
|
{
|
|
return m_idTextStyle;
|
|
}
|
|
double GetTextHeight(BOOL bAsPaperUnit=TRUE) const
|
|
{
|
|
double val=m_nTextHeight;
|
|
if(!bAsPaperUnit)
|
|
val *= GetPScale();
|
|
return val;
|
|
}
|
|
double GetFloorThick() const
|
|
{
|
|
return m_nFloorThick;
|
|
}
|
|
AreaType GetType()const{return m_nType;}//ok
|
|
void SetType(AreaType type)
|
|
{
|
|
assertWriteEnabled();
|
|
m_nType=type;
|
|
}
|
|
|
|
void SetMask(BOOL bTrue);
|
|
void SetHas3D(BOOL bTrue)
|
|
{
|
|
assertWriteEnabled();
|
|
if(bTrue) m_nSpaceFlag|=SF_GROUND3D;
|
|
else m_nSpaceFlag &= ~SF_GROUND3D;
|
|
}
|
|
void SetBalcony(BOOL bTrue)
|
|
{
|
|
assertWriteEnabled();
|
|
if(bTrue) m_nSpaceFlag|=SF_BALCONY;
|
|
else m_nSpaceFlag &= ~SF_BALCONY;
|
|
}
|
|
void SetHalfArea(BOOL bTrue)
|
|
{
|
|
assertWriteEnabled();
|
|
if(bTrue) m_nSpaceFlag|=SF_HALF_AREA;
|
|
else m_nSpaceFlag &= ~SF_HALF_AREA;
|
|
}
|
|
void SetHasHatch(BOOL bTrue)
|
|
{
|
|
assertWriteEnabled();
|
|
if(bTrue) m_nSpaceFlag|=SF_HATCH;
|
|
else m_nSpaceFlag &= ~SF_HATCH;
|
|
}
|
|
void SetHatchStyle(const TCHAR* sStyle)
|
|
{
|
|
assertWriteEnabled();
|
|
m_sHatchStyle=sStyle;
|
|
}
|
|
Adesk::UInt16 GetHatchColor()const{return m_nHatchColor;}
|
|
AcDbObjectId GetHatchLayer()const{return m_idHatchLayer;}
|
|
double GetHatchScale()const{return m_dHatchScale;}
|
|
double GetHatchAngle()const{return m_dHatchAngle;}
|
|
void SetHatchColor(Adesk::UInt16 color)
|
|
{
|
|
assertWriteEnabled();
|
|
m_nHatchColor=color;
|
|
}
|
|
void SetHatchLayer(AcDbObjectId idLay)
|
|
{
|
|
assertWriteEnabled();
|
|
m_idHatchLayer=idLay;
|
|
}
|
|
void SetHatchScale(double dScale)
|
|
{
|
|
assertWriteEnabled();
|
|
m_dHatchScale=dScale;
|
|
}
|
|
void SetHatchAngle(double dAngle)
|
|
{
|
|
assertWriteEnabled();
|
|
m_dHatchAngle=dAngle;
|
|
}
|
|
|
|
void SetHighlight(BOOL bTrue);
|
|
void SetShowOutline(BOOL bTrue);
|
|
void SetRotation(double nRot)
|
|
{
|
|
assertWriteEnabled();
|
|
m_nRotation=nRot;
|
|
}
|
|
void SetTextHeight(double val, BOOL bAsPaperUnit=TRUE)
|
|
{
|
|
assertWriteEnabled();
|
|
m_nTextHeight=val;
|
|
if(!bAsPaperUnit)
|
|
m_nTextHeight /= GetPScale();
|
|
}
|
|
void SetTextStyleId(AcDbObjectId id)
|
|
{
|
|
assertWriteEnabled();
|
|
m_idTextStyle = id;
|
|
}
|
|
void SetFloorThick(double nThick)
|
|
{
|
|
assertWriteEnabled();
|
|
m_nFloorThick=nThick;
|
|
}
|
|
void SetElevation(double nElev)
|
|
{
|
|
assertWriteEnabled();
|
|
m_ptLocation.z=nElev;
|
|
}
|
|
|
|
BOOL IsMText() const // sg add 081211,设置“房间名称”是否使用两行文字
|
|
{
|
|
return m_bMText;
|
|
}
|
|
void SetMText(BOOL bTrue)
|
|
{
|
|
assertWriteEnabled();
|
|
m_bMText = bTrue;
|
|
}
|
|
|
|
CString GetSndName() const { // sg add 081215,第二行名称
|
|
return (const TCHAR *)m_sSndName;
|
|
}
|
|
void SetSndName(const TCHAR *pszName) {
|
|
assertWriteEnabled();
|
|
m_sSndName = pszName;
|
|
}
|
|
|
|
// sg add 090508,获取所属户,动态数据
|
|
AcDbObjectId GetHouseId() const;
|
|
void SetHouseId(AcDbObjectId id);
|
|
|
|
// sg add 100907,增加粉刷层厚度的动态数据
|
|
double GetStuccoThickness() const;
|
|
void SetStuccoThickness(double dThickness);
|
|
|
|
// sg add 100907,增加房间填充真彩色的动态数据,原有的m_nHatchColor不再使用
|
|
AcCmColor GetHatchTrueColor() const;
|
|
void SetHatchTrueColor(const AcCmColor &color);
|
|
|
|
// add by xly on 101020 支持改进房间对象编号、名称、面积和面积单位的显示控制
|
|
// 8.5版不使用图纸中的变量控制,采用对象的动态数据,保证图纸中的房间对象可以用不同的形式显示
|
|
// 设置高级选项中的控制方式:1——随图纸中的变量统一控制,默认,考虑与旧图兼容;0——独立控制
|
|
void SetSpaceDispMode(int nConfig);
|
|
int GetSpaceDispMode() const;
|
|
|
|
// 2——随图纸中的变量统一控制,默认,考虑与旧图兼容;1——显示,0——不显示
|
|
// 房间名称、编号是否标注
|
|
void SetDimNameAndCode(BOOL bDimName, BOOL bDimCode);
|
|
BOOL IsDimName() const; // 已自动获取图纸中变量的状态
|
|
BOOL IsDimCode() const;
|
|
|
|
// 房间面积是否标注
|
|
void SetDimArea(BOOL bDim);
|
|
BOOL IsDimArea() const;
|
|
// 面积单位是否标注
|
|
void SetDimUnit(BOOL bDim);
|
|
BOOL IsDimUnit() const;
|
|
|
|
public: //节能属性
|
|
BOOL IsHvacSpace() const {return ((m_nSpaceFlag&SF_HVAC)!=0);}//是否空调房间
|
|
void SetHvacSpace(BOOL bTrue)
|
|
{
|
|
assertWriteEnabled();
|
|
if(bTrue)
|
|
m_nSpaceFlag |= SF_HVAC;
|
|
else
|
|
m_nSpaceFlag &= ~SF_HVAC;
|
|
}
|
|
|
|
private:
|
|
CString GetAreaByPrecision() const; // 按精度获取房间面积,sg add 081127
|
|
void GetCodeExtentPts(XPoly2D &poly, XPoint pt, XVector3D vt) const; // sg add 081211
|
|
|
|
// sg add 081211,返回文字位置距离m_ptLocation点的字高系数
|
|
// 房间名称,bChineseName表示中文名称,一般在上一行,英文名称在下一行
|
|
double GetNameDistRatio(BOOL bChineseName = TRUE) const;
|
|
double GetCodeDistRatio() const; // 编号
|
|
double GetAreaDistRatio() const; // 面积
|
|
|
|
// add by xly on 101020 支持改进房间对象编号、名称、面积和面积单位的显示控制
|
|
// 默认从全局数据中拷贝数据
|
|
void SetSpaceDispFlag(int nFlag);
|
|
int GetSpaceDispFlag() const;
|
|
|
|
// add by gjm
|
|
void DrawHatchInExplode(TGGiExplodeDrawBase &dc, const std::vector<TGGePoly2D> &holds) const;
|
|
void DrawTextInExplode(TGGiExplodeDrawBase &dc, std::vector<TGGePoly2D> &holds) const;
|
|
};
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
TARCH_IMPEXP int EditSpace0(AcDbObjectId id);
|
|
// 通过一点确定一房间的信息
|
|
// ptPick--WCS point
|
|
// Return: 0--Fail, 1--Normal Space, 2--External Space
|
|
TARCH_IMPEXP int GenSpaceInfo(const XPoint &ptPick, TDbSpace &space, BOOL bIgnoreVirt=FALSE);
|
|
|
|
#endif
|
|
|