672 lines
17 KiB
C++
672 lines
17 KiB
C++
// THVDbSpace.cpp: implementation of the THVDbSpace class.
|
||
//
|
||
//////////////////////////////////////////////////////////////////////
|
||
|
||
#include "stdafx.h"
|
||
#include "THVDbSpace.h"
|
||
#include "DbText.h"
|
||
|
||
#ifdef _DEBUG
|
||
#undef THIS_FILE
|
||
static char THIS_FILE[]=__FILE__;
|
||
#define new DEBUG_NEW
|
||
#endif
|
||
|
||
ACRX_DXF_DEFINE_MEMBERS(ATSHVDbSpace, ATSSpace, AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent,
|
||
1, ATS_HVDBSPACE, "ATS_HVDBSPACE, 请下载上华软件|网址: www.shanghuasoft.com");
|
||
IMPLEMENT_TENTBASE(THVDbSpace);
|
||
|
||
//////////////////////////////////////////////////////////////////////
|
||
// Construction/Destruction
|
||
//////////////////////////////////////////////////////////////////////
|
||
const Adesk::UInt8 THVDbSpace::g_nVersion = 1;
|
||
|
||
THVDbSpace::THVDbSpace()
|
||
{
|
||
m_nTextHeight = 3.0;
|
||
|
||
m_dAirColdLoad = 0;
|
||
m_dAirHeatLoad = 0;
|
||
m_dColdLoadNoAir = 0;
|
||
m_dHeatLoadNoAir = 0;
|
||
m_dHideColdLoad = 0;
|
||
m_dSummerHumLoad = 0;
|
||
m_dWinterHumLoad = 0;
|
||
|
||
int i(0);
|
||
for (i = 0; i < 3; i++)
|
||
{
|
||
m_arrayDim[i] = TRUE;
|
||
}
|
||
for (i = 3; i < /*12*/13; i++) // change by zh
|
||
{
|
||
m_arrayDim[i] = FALSE;
|
||
}
|
||
|
||
m_bExtSpace = FALSE;
|
||
}
|
||
|
||
THVDbSpace::~THVDbSpace()
|
||
{
|
||
|
||
}
|
||
|
||
// 是否标注某项,0~11见注释
|
||
void THVDbSpace::SetDim(BOOL bDim, int nNum)
|
||
{
|
||
assertWriteEnabled();
|
||
if ((nNum < 0) || (nNum > /*11*/12))// change by zh
|
||
{
|
||
return;
|
||
}
|
||
|
||
m_arrayDim[nNum] = bDim;
|
||
// add by hh 2013-5-9 是否标注新风量 写入到动态数据中
|
||
if(12 == nNum)
|
||
{
|
||
TEntityFields &fd = Fields();
|
||
fd.SFD(_T("THVS_NEWAIRDIM"), bDim);
|
||
}
|
||
}
|
||
|
||
BOOL THVDbSpace::IsDim(int nNum) const
|
||
{
|
||
if ((nNum < 0) || (nNum > /*11*/12))// change by zh
|
||
{
|
||
return FALSE;
|
||
}
|
||
|
||
return m_arrayDim[nNum];
|
||
}
|
||
|
||
// 获取标注内容
|
||
void THVDbSpace::GetDimString(XStringList &lstString) const
|
||
{
|
||
// add by hh 2011-04-26 使用上华选项中的房间面积精度
|
||
TDbConfig* pCfg = GetDwgGlobal(AcDb::kForRead);
|
||
CString sAreaFmt;
|
||
if(NULL == pCfg)
|
||
sAreaFmt = _T("%.2f");
|
||
else
|
||
{
|
||
sAreaFmt.Format(_T("%%.%df"), pCfg->GetSpaceAreaPrecision());
|
||
pCfg->close();
|
||
}
|
||
|
||
if (m_bExtSpace) // 最后的建筑面积
|
||
{
|
||
XString sDim;
|
||
// sDim << _T("建筑面积:") << XString(_T("%.2f"), m_nUseArea);
|
||
sDim << _T("建筑面积:") << XString(sAreaFmt, m_nUseArea);
|
||
if (m_bDimUnit) // 标注单位
|
||
{
|
||
sDim << _T("m^U2^U");
|
||
}
|
||
lstString.Append(tstrnew(sDim));
|
||
return;
|
||
}
|
||
|
||
XString sNum(256), sName(256);
|
||
sNum << _T("房间号:") << XString(_T("%s"), m_sCode);
|
||
lstString.Append(tstrnew(sNum));
|
||
sName << _T("房间名称:") << XString(_T("%s"), m_sName);
|
||
lstString.Append(tstrnew(sName));
|
||
|
||
XString sArea(256);
|
||
// sArea << _T("面积:") << XString(_T("%.2f"), m_nUseArea);
|
||
sArea << _T("面积:") << XString(sAreaFmt, m_nUseArea);
|
||
if (m_bDimUnit)
|
||
{
|
||
sArea << _T("m^U2^U");
|
||
}
|
||
lstString.Append(tstrnew(sArea));
|
||
|
||
XString sLoad3(256), sLoad4(256), sLoad5(256), sLoad6(256), sLoad7(256),
|
||
sLoad8(256), sLoad9(256), sLoad10(256), sLoad11(256), sLoad12(256); // add by zh 新风量显示
|
||
sLoad3 << _T("总冷负荷:") << XString(_T("%.0f"), m_dbColdLoad);
|
||
sLoad4 << _T("冷负荷(不含新风):") << XString(_T("%.0f"), m_dColdLoadNoAir);
|
||
sLoad5 << _T("新风冷负荷:") << XString(_T("%.0f"), m_dAirColdLoad);
|
||
sLoad6 << _T("潜热冷负荷:") << XString(_T("%.0f"), m_dHideColdLoad);
|
||
sLoad7 << _T("夏季湿负荷:") << XString(_T("%.2f"), m_dSummerHumLoad);
|
||
sLoad8 << _T("总热负荷:") << XString(_T("%.0f"), m_dbHeatLoad);
|
||
sLoad9 << _T("热负荷(不含新风):") << XString(_T("%.0f"), m_dHeatLoadNoAir);
|
||
sLoad10 << _T("新风热负荷:") << XString(_T("%.0f"), m_dAirHeatLoad);
|
||
sLoad11 << _T("冬季湿负荷:") << XString(_T("%.2f"), m_dWinterHumLoad);
|
||
sLoad12 << _T("新风量:") << XString(_T("%.0f"), GetNewAir()); // add by zh 新风量
|
||
if (m_bDimUnit)
|
||
{
|
||
sLoad3 << _T("W");
|
||
sLoad4 << _T("W");
|
||
sLoad5 << _T("W");
|
||
sLoad6 << _T("W");
|
||
sLoad7 << _T("kg/h");
|
||
sLoad8 << _T("W");
|
||
sLoad9 << _T("W");
|
||
sLoad10 << _T("W");
|
||
sLoad11 << _T("kg/h");
|
||
sLoad12 << _T("m^U3^U/h"); // add by zh 新风量单位
|
||
}
|
||
lstString.Append(tstrnew(sLoad3));
|
||
lstString.Append(tstrnew(sLoad4));
|
||
lstString.Append(tstrnew(sLoad5));
|
||
lstString.Append(tstrnew(sLoad6));
|
||
lstString.Append(tstrnew(sLoad7));
|
||
lstString.Append(tstrnew(sLoad8));
|
||
lstString.Append(tstrnew(sLoad9));
|
||
lstString.Append(tstrnew(sLoad10));
|
||
lstString.Append(tstrnew(sLoad11));
|
||
lstString.Append(tstrnew(sLoad12));// add by zh 新风量
|
||
}
|
||
|
||
|
||
//////////////////////////////////////////////////////////////////////
|
||
// Override TDbEntity
|
||
//////////////////////////////////////////////////////////////////////
|
||
Acad::ErrorStatus THVDbSpace::subGetClassID(CLSID* pClsid) const
|
||
{
|
||
return Acad::eOk;
|
||
}
|
||
|
||
void THVDbSpace::CopyPropertiesFrom(AcDbEntity* pSrc, unsigned gMatchFlag)
|
||
{
|
||
assertWriteEnabled();
|
||
TDbSpace::CopyPropertiesFrom(pSrc, gMatchFlag);
|
||
THVDbSpace *pSpace = THVDbSpace::cast(pSrc);
|
||
if (pSpace != NULL)
|
||
{
|
||
m_dAirColdLoad = pSpace->m_dAirColdLoad;
|
||
m_dAirHeatLoad = pSpace->m_dAirHeatLoad;
|
||
m_dColdLoadNoAir = pSpace->m_dColdLoadNoAir;
|
||
m_dHeatLoadNoAir = pSpace->m_dHeatLoadNoAir;
|
||
m_dHideColdLoad = pSpace->m_dHideColdLoad;
|
||
m_dSummerHumLoad = pSpace->m_dSummerHumLoad;
|
||
m_dWinterHumLoad = pSpace->m_dWinterHumLoad;
|
||
|
||
m_bDimUnit = pSpace->m_bDimUnit;
|
||
for (int i = 0; i < /*12*/13; i++)// change by zh 新风量
|
||
{
|
||
m_arrayDim[i] = pSpace->m_arrayDim[i];
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
//////////////////////////////////////////////////////////////////////
|
||
// 存储数据
|
||
//////////////////////////////////////////////////////////////////////
|
||
Acad::ErrorStatus THVDbSpace::dwgInFields(AcDbDwgFiler* pFiler)
|
||
{
|
||
assertWriteEnabled();
|
||
Acad::ErrorStatus es = TDbSpace::dwgInFields(pFiler);
|
||
if (es != Acad::eOk)
|
||
{
|
||
return es;
|
||
}
|
||
|
||
Adesk::UInt8 nVer;
|
||
pFiler->readItem(&nVer);
|
||
if (nVer > g_nVersion) // Version is too new
|
||
{
|
||
return Acad::eMakeMeProxy;
|
||
}
|
||
|
||
pFiler->readItem(&m_dAirColdLoad);
|
||
pFiler->readItem(&m_dAirHeatLoad);
|
||
pFiler->readItem(&m_dColdLoadNoAir);
|
||
pFiler->readItem(&m_dHeatLoadNoAir);
|
||
pFiler->readItem(&m_dHideColdLoad);
|
||
pFiler->readItem(&m_dSummerHumLoad);
|
||
pFiler->readItem(&m_dWinterHumLoad);
|
||
|
||
//pFiler->readItem(&m_bExtSpace);
|
||
//pFiler->readItem(&m_bDimUnit);
|
||
FilerRead(pFiler, m_bExtSpace);
|
||
FilerRead(pFiler, m_bDimUnit);
|
||
|
||
for (Adesk::UInt8 i = 0; i < 12; i++)
|
||
{
|
||
//pFiler->readItem(&m_arrayDim[i]);
|
||
FilerRead(pFiler, m_arrayDim[i]);
|
||
}
|
||
// add by hh 2013-5-9 从动态数据中读取是否标注新风量
|
||
const TEntityFields &fd = GetFields();
|
||
fd.GFD(_T("THVS_NEWAIRDIM"), m_arrayDim[12]);
|
||
|
||
return pFiler->filerStatus();
|
||
}
|
||
|
||
Acad::ErrorStatus THVDbSpace::dwgOutFields(AcDbDwgFiler* pFiler) const
|
||
{
|
||
assertReadEnabled();
|
||
Acad::ErrorStatus es = TDbSpace::dwgOutFields(pFiler);
|
||
if (es != Acad::eOk)
|
||
{
|
||
return es;
|
||
}
|
||
|
||
pFiler->writeItem(g_nVersion);
|
||
pFiler->writeItem(m_dAirColdLoad);
|
||
pFiler->writeItem(m_dAirHeatLoad);
|
||
pFiler->writeItem(m_dColdLoadNoAir);
|
||
pFiler->writeItem(m_dHeatLoadNoAir);
|
||
pFiler->writeItem(m_dHideColdLoad);
|
||
pFiler->writeItem(m_dSummerHumLoad);
|
||
pFiler->writeItem(m_dWinterHumLoad);
|
||
|
||
//pFiler->writeItem(m_bExtSpace);
|
||
//pFiler->writeItem(m_bDimUnit);
|
||
FilerWrite(pFiler, m_bExtSpace);
|
||
FilerWrite(pFiler, m_bDimUnit);
|
||
for (Adesk::UInt8 i = 0; i < 12; i++)
|
||
{
|
||
//pFiler->writeItem(m_arrayDim[i]);
|
||
FilerWrite(pFiler, m_arrayDim[i]);
|
||
}
|
||
return pFiler->filerStatus();
|
||
}
|
||
|
||
Acad::ErrorStatus THVDbSpace::dxfInFields(AcDbDxfFiler* pFiler)
|
||
{
|
||
assertWriteEnabled();
|
||
Acad::ErrorStatus es = TDbSpace::dxfInFields(pFiler);
|
||
if (es != Acad::eOk)
|
||
{
|
||
return es;
|
||
}
|
||
|
||
if (!pFiler->atSubclassData(_T("THVDbSpace")))
|
||
{
|
||
return Acad::eBadDxfSequence;
|
||
}
|
||
|
||
resbuf rb;
|
||
while ((es == Acad::eOk)
|
||
&& ((es = pFiler->readResBuf(&rb)) == Acad::eOk))
|
||
{
|
||
switch (rb.restype) {
|
||
case AcDb::kDxfReal:
|
||
m_dAirColdLoad = rb.resval.rreal;
|
||
break;
|
||
case AcDb::kDxfReal+1:
|
||
m_dAirHeatLoad = rb.resval.rreal;
|
||
break;
|
||
case AcDb::kDxfReal+2:
|
||
m_dColdLoadNoAir = rb.resval.rreal;
|
||
break;
|
||
case AcDb::kDxfReal+3:
|
||
m_dHeatLoadNoAir = rb.resval.rreal;
|
||
break;
|
||
case AcDb::kDxfReal+4:
|
||
m_dHideColdLoad = rb.resval.rreal;
|
||
break;
|
||
case AcDb::kDxfReal+5:
|
||
m_dSummerHumLoad = rb.resval.rreal;
|
||
break;
|
||
case AcDb::kDxfReal+6:
|
||
m_dWinterHumLoad = rb.resval.rreal;
|
||
break;
|
||
|
||
// mcl changed by below. x64位下要求写入类型与参数code一致。否则房间对象设置标注负荷参数后,
|
||
// 选中房间会崩溃
|
||
// case AcDb::kDxfBool:
|
||
// m_bExtSpace = rb.resval.rint;
|
||
// break;
|
||
// case AcDb::kDxfBool+1:
|
||
// m_bDimUnit = rb.resval.rint;
|
||
// break;
|
||
// case AcDb::kDxfBool+2:
|
||
// m_arrayDim[0] = rb.resval.rint;
|
||
// break;
|
||
// case AcDb::kDxfBool+3:
|
||
// m_arrayDim[1] = rb.resval.rint;
|
||
// break;
|
||
// case AcDb::kDxfBool+4:
|
||
// m_arrayDim[2] = rb.resval.rint;
|
||
// break;
|
||
// case AcDb::kDxfBool+5:
|
||
// m_arrayDim[3] = rb.resval.rint;
|
||
// break;
|
||
// case AcDb::kDxfBool+6:
|
||
// m_arrayDim[4] = rb.resval.rint;
|
||
// break;
|
||
// case AcDb::kDxfBool+7:
|
||
// m_arrayDim[5] = rb.resval.rint;
|
||
// break;
|
||
// case AcDb::kDxfBool+8:
|
||
// m_arrayDim[6] = rb.resval.rint;
|
||
// break;
|
||
// case AcDb::kDxfBool+9:
|
||
// m_arrayDim[7] = rb.resval.rint;
|
||
// break;
|
||
// case AcDb::kDxfBool+10:
|
||
// m_arrayDim[8] = rb.resval.rint;
|
||
// break;
|
||
// case AcDb::kDxfBool+11:
|
||
// m_arrayDim[9] = rb.resval.rint;
|
||
// break;
|
||
// case AcDb::kDxfBool+12:
|
||
// m_arrayDim[10] = rb.resval.rint;
|
||
// break;
|
||
// case AcDb::kDxfBool+13:
|
||
// m_arrayDim[11] = rb.resval.rint;
|
||
// break;
|
||
|
||
case AcDb::kDxfInt8:
|
||
m_bExtSpace = rb.resval.rint;
|
||
break;
|
||
case AcDb::kDxfInt8+1:
|
||
m_bDimUnit = rb.resval.rint;
|
||
break;
|
||
case AcDb::kDxfInt8+2:
|
||
m_arrayDim[0] = rb.resval.rint;
|
||
break;
|
||
case AcDb::kDxfInt8+3:
|
||
m_arrayDim[1] = rb.resval.rint;
|
||
break;
|
||
case AcDb::kDxfInt8+4:
|
||
m_arrayDim[2] = rb.resval.rint;
|
||
break;
|
||
case AcDb::kDxfInt8+5:
|
||
m_arrayDim[3] = rb.resval.rint;
|
||
break;
|
||
case AcDb::kDxfInt8+6:
|
||
m_arrayDim[4] = rb.resval.rint;
|
||
break;
|
||
case AcDb::kDxfInt8+7:
|
||
m_arrayDim[5] = rb.resval.rint;
|
||
break;
|
||
case AcDb::kDxfInt8+8:
|
||
m_arrayDim[6] = rb.resval.rint;
|
||
break;
|
||
case AcDb::kDxfInt8+9:
|
||
m_arrayDim[7] = rb.resval.rint;
|
||
break;
|
||
case AcDb::kDxfInt8+10:
|
||
m_arrayDim[8] = rb.resval.rint;
|
||
break;
|
||
case AcDb::kDxfInt8+11:
|
||
m_arrayDim[9] = rb.resval.rint;
|
||
break;
|
||
case AcDb::kDxfInt8+12:
|
||
m_arrayDim[10] = rb.resval.rint;
|
||
break;
|
||
case AcDb::kDxfInt8+13:
|
||
m_arrayDim[11] = rb.resval.rint;
|
||
break;
|
||
|
||
default:
|
||
pFiler->pushBackItem();
|
||
es = Acad::eEndOfFile;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (es != Acad::eEndOfFile)
|
||
{
|
||
return Acad::eInvalidResBuf;
|
||
}
|
||
return pFiler->filerStatus();
|
||
}
|
||
|
||
Acad::ErrorStatus THVDbSpace::dxfOutFields(AcDbDxfFiler* pFiler) const
|
||
{
|
||
Acad::ErrorStatus es = TDbSpace::dxfOutFields(pFiler);
|
||
assert(es == Acad::eOk);
|
||
|
||
es = pFiler->writeItem(AcDb::kDxfSubclass, _T("THVDbSpace"));
|
||
assert(es == Acad::eOk);
|
||
|
||
pFiler->writeDouble(AcDb::kDxfReal, m_dAirColdLoad);
|
||
pFiler->writeDouble(AcDb::kDxfReal+1, m_dAirHeatLoad);
|
||
pFiler->writeDouble(AcDb::kDxfReal+2, m_dColdLoadNoAir);
|
||
pFiler->writeDouble(AcDb::kDxfReal+3, m_dHeatLoadNoAir);
|
||
pFiler->writeDouble(AcDb::kDxfReal+4, m_dHideColdLoad);
|
||
pFiler->writeDouble(AcDb::kDxfReal+5, m_dSummerHumLoad);
|
||
pFiler->writeDouble(AcDb::kDxfReal+6, m_dWinterHumLoad);
|
||
|
||
// mcl changed by below. x64位下要求写入类型与参数code一致。否则房间对象设置标注负荷参数后,
|
||
// 选中房间会崩溃
|
||
|
||
// pFiler->writeDouble(AcDb::kDxfBool, m_bExtSpace);
|
||
// pFiler->writeDouble(AcDb::kDxfBool+1, m_bDimUnit);
|
||
// pFiler->writeDouble(AcDb::kDxfBool+2, m_arrayDim[0]);
|
||
// pFiler->writeDouble(AcDb::kDxfBool+3, m_arrayDim[1]);
|
||
// pFiler->writeDouble(AcDb::kDxfBool+4, m_arrayDim[2]);
|
||
// pFiler->writeDouble(AcDb::kDxfBool+5, m_arrayDim[3]);
|
||
// pFiler->writeDouble(AcDb::kDxfBool+6, m_arrayDim[4]);
|
||
// pFiler->writeDouble(AcDb::kDxfBool+7, m_arrayDim[5]);
|
||
// pFiler->writeDouble(AcDb::kDxfBool+8, m_arrayDim[6]);
|
||
// pFiler->writeDouble(AcDb::kDxfBool+9, m_arrayDim[7]);
|
||
// pFiler->writeDouble(AcDb::kDxfBool+10, m_arrayDim[8]);
|
||
// pFiler->writeDouble(AcDb::kDxfBool+11, m_arrayDim[9]);
|
||
// pFiler->writeDouble(AcDb::kDxfBool+12, m_arrayDim[10]);
|
||
// pFiler->writeDouble(AcDb::kDxfBool+13, m_arrayDim[11]);
|
||
|
||
pFiler->writeUInt8(AcDb::kDxfInt8, m_bExtSpace);
|
||
pFiler->writeUInt8(AcDb::kDxfInt8+1, m_bDimUnit);
|
||
pFiler->writeUInt8(AcDb::kDxfInt8+2, m_arrayDim[0]);
|
||
pFiler->writeUInt8(AcDb::kDxfInt8+3, m_arrayDim[1]);
|
||
pFiler->writeUInt8(AcDb::kDxfInt8+4, m_arrayDim[2]);
|
||
pFiler->writeUInt8(AcDb::kDxfInt8+5, m_arrayDim[3]);
|
||
pFiler->writeUInt8(AcDb::kDxfInt8+6, m_arrayDim[4]);
|
||
pFiler->writeUInt8(AcDb::kDxfInt8+7, m_arrayDim[5]);
|
||
pFiler->writeUInt8(AcDb::kDxfInt8+8, m_arrayDim[6]);
|
||
pFiler->writeUInt8(AcDb::kDxfInt8+9, m_arrayDim[7]);
|
||
pFiler->writeUInt8(AcDb::kDxfInt8+10, m_arrayDim[8]);
|
||
pFiler->writeUInt8(AcDb::kDxfInt8+11, m_arrayDim[9]);
|
||
pFiler->writeUInt8(AcDb::kDxfInt8+12, m_arrayDim[10]);
|
||
pFiler->writeUInt8(AcDb::kDxfInt8+13, m_arrayDim[11]);
|
||
|
||
return pFiler->filerStatus();
|
||
}
|
||
|
||
|
||
//////////////////////////////////////////////////////////////////////
|
||
// 绘制
|
||
//////////////////////////////////////////////////////////////////////
|
||
Acad::ErrorStatus THVDbSpace::ExplodeOrDraw2d(XExplodeDraw &dc) const
|
||
{
|
||
assertReadEnabled();
|
||
// cet 2016.10.17 add 图层关闭时,实体不显示,不进行绘制(打印时,也不会绘制)
|
||
AcDbLayerTableRecordPointer player(this->layerId(), AcDb::kForRead);
|
||
if (player.openStatus() == Acad::eOk && player->isOff())
|
||
{
|
||
return Acad::eOk;
|
||
}
|
||
int i(0),
|
||
nCount(0); // 总共有多少个标注项目
|
||
for (i = 0; i < /*12*/13; i++) // change by zh 新风量
|
||
{
|
||
if (m_arrayDim[i])
|
||
{
|
||
nCount++;
|
||
}
|
||
}
|
||
|
||
double dSize = m_nTextHeight; // 字体高度:3
|
||
dSize *= GetPScale();
|
||
|
||
int nTmpNum = nCount/2;
|
||
AcGeDoubleArray aryLocation; // 标注位置偏移数组
|
||
if (nCount%2 == 0) // 偶数
|
||
{
|
||
for (i = 0; i < nTmpNum; i++) // 在m_ptLocation之上的部分
|
||
{
|
||
double dTmp = (nTmpNum-i) * 1.2 * dSize - 0.5 * dSize;
|
||
aryLocation.append(dTmp);
|
||
}
|
||
for (i = 0; i < nTmpNum; i++) // 在m_ptLocation之下的部分
|
||
{
|
||
double dTmp = (i * 1.2 + 0.5) * dSize * (-1);
|
||
aryLocation.append(dTmp);
|
||
}
|
||
}
|
||
else // 奇数
|
||
{
|
||
for (i = 0; i < nTmpNum; i++) // 在m_ptLocation之上的部分
|
||
{
|
||
double dTmp = (nTmpNum - i) * 1.2 * dSize;
|
||
aryLocation.append(dTmp);
|
||
}
|
||
aryLocation.append(0.0); // 在m_ptLocation
|
||
for (i = 0; i < nTmpNum; i++) // 在m_ptLocation之下的部分
|
||
{
|
||
double dTmp = (1 + i) * 1.2 * dSize * (-1);
|
||
aryLocation.append(dTmp);
|
||
}
|
||
}
|
||
|
||
TDbText text;
|
||
text.setPropertiesFrom(this);
|
||
text.SetMaskFlag(IsMask()); // 自动屏蔽
|
||
|
||
AcDbObjectId idStyle = m_idTextStyle; // 字体样式:_TCH_SPACE
|
||
assert(!!idStyle);
|
||
|
||
double dTextSize = m_nTextHeight; // 字体高度:3
|
||
text.SetHeight(dTextSize);
|
||
text.SetStyleId(idStyle);
|
||
text.SetAlignment(XExplodeDraw::kMiddleCenter); // 居中对齐
|
||
text.SetRotation(m_nRotation);
|
||
|
||
ads_matrix matRot;
|
||
m_ptLocation.GetRotationMatrix(Layout2Wcs(m_nRotation), matRot);
|
||
|
||
XStringList lstString;
|
||
GetDimString(lstString);
|
||
|
||
int j(0);
|
||
for (i = 0; i < nCount; i++) // 需要标注的项目
|
||
{
|
||
XPoint ptLoc = m_ptLocation;
|
||
ptLoc.y += aryLocation[i];
|
||
ptLoc.TransformBy(matRot);
|
||
text.SetLocation(ptLoc); // 确定标注位置
|
||
|
||
XString sDisp; // 标注内容
|
||
BOOL bFlag(TRUE); // 是否创建TDbText
|
||
if (m_bExtSpace) // 总建筑面积
|
||
{
|
||
sDisp = lstString[0];
|
||
}
|
||
else // 普通房间
|
||
{
|
||
while (j < /*12*/13) // 所有标主的项目 // change by zh 新风量
|
||
{
|
||
if (m_arrayDim[j]) // 需要标注
|
||
{
|
||
sDisp = lstString[j];
|
||
if (((j==0) || (j==1)) && (!g_bExplodeSubText) && (!sDisp))
|
||
{
|
||
j++;
|
||
bFlag = FALSE; // 不标注
|
||
break;
|
||
}
|
||
|
||
j++;
|
||
break;
|
||
}
|
||
j++;
|
||
}
|
||
}
|
||
|
||
if (bFlag) // 可以标注
|
||
{
|
||
text.SetText(sDisp);
|
||
if (dc.IsFullExplode())
|
||
{
|
||
text.ExplodeOrDraw2d(dc);
|
||
}
|
||
else
|
||
{
|
||
dc.DrawEntity(text);
|
||
}
|
||
}
|
||
}
|
||
|
||
AcDbObjectId idMe = objectId();
|
||
BOOL bHighlight = !idMe;
|
||
if (!bHighlight)
|
||
{
|
||
bHighlight = IsHighlight();
|
||
}
|
||
|
||
if (bHighlight || IsShowOutline())
|
||
{
|
||
dc << m_outline;
|
||
}
|
||
return Acad::eOk;
|
||
}
|
||
|
||
|
||
// 用于分析房间对象的文字编辑
|
||
BOOL StringAnalysis(const CString &src, CString &csName)
|
||
{
|
||
int nLen = src.GetLength();
|
||
if (nLen == 0)
|
||
{
|
||
return FALSE;
|
||
}
|
||
|
||
for (int i = 0; i < nLen; i++)
|
||
{
|
||
if (src[i] == _T(':'))
|
||
{
|
||
csName = src.Mid(i+1, nLen-1);
|
||
return TRUE;
|
||
}
|
||
}
|
||
return FALSE;
|
||
}
|
||
|
||
|
||
void THVDbSpace::SetSubText(long i, CString sText)
|
||
{
|
||
assertWriteEnabled();
|
||
if (!m_bExtSpace && (i==0 || i==1)) // 普通房间的名称或编号
|
||
{
|
||
CString csName; // “:”号右面的内容
|
||
BOOL bRet = StringAnalysis(sText, csName);
|
||
if (!bRet)
|
||
{
|
||
return;
|
||
}
|
||
|
||
if (i == 0)
|
||
{
|
||
if (m_arrayDim[0]) // 标注的是编号
|
||
{
|
||
SetCode(csName);
|
||
}
|
||
else if (m_arrayDim[1]) // 标注的是名称
|
||
{
|
||
SetName(csName);
|
||
}
|
||
}
|
||
else if (i == 1)
|
||
{
|
||
if (m_arrayDim[1]) // 标注的是名称
|
||
{
|
||
SetName(csName);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
void InitHVDbSpace(BOOL bTrue)
|
||
{
|
||
if (bTrue)
|
||
{
|
||
THVDbSpace::rxInit();
|
||
THVDbSpace::InitMatchProtocol(TRUE);
|
||
}
|
||
else
|
||
{
|
||
THVDbSpace::InitMatchProtocol(FALSE);
|
||
deleteAcRxClass(THVDbSpace::desc());
|
||
}
|
||
} |