Files
envi-code/SourceCode/Code2026/Dimension/SHAcDbBlockTable.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

107 lines
1.6 KiB
C++

#include "StdAfx.h"
#include "globalFunc.h"
#include "SHAcDbBlockTable.h"
SHAcDbBlockTable::SHAcDbBlockTable(const TCHAR *blkName)
: SHAcDbSymbolTable(_T("BLOCK"), blkName)
{
if (SHAcDbSymbolTable::operator !())
{
return;
}
GetData(10, base);
GetData(-2, ent);
}
SHAcDbBlockTable::~SHAcDbBlockTable()
{
}
int SHAcDbBlockTable::EntNext()
{
ads_name e;
ent>e;
ent.FreeGroups();
if (ads_entnext(e, ent) != RTNORM)
{
ent.name[0] = ent.name[1] = 0L;
return RTERROR;
}
return RTNORM;
}
int SHAcDbBlockTable::GetExtend(ads_point low, ads_point up, ads_matrix tranMat)
{
if (!(*this))
{
return RTERROR;
}
ADSGePoint3d lowPt, upPt;
int rc = ent.GetExtend(lowPt, upPt, tranMat);
if (rc == RTERROR)
{
return RTERROR;
}
int findExtend = rc == RTNORM ? 1 : 0;
EntitySet subEnt = ent;
while(1)
{
ads_name entNext;
if (ads_entnext(subEnt, entNext) != RTNORM)
{
break;
}
subEnt = entNext;
subEnt.FreeGroups();
CString eType;
subEnt.GetData(0, eType.GetBuffer(256));
eType.ReleaseBuffer();
if (subEnt.Is(_T("ENDBLK")))
{
break;
}
ADSGePoint3d pt1, pt2;
rc = subEnt.GetExtend(pt1, pt2, tranMat);
if (rc == RTERROR)
{
return RTERROR;
}
else if (rc == RTNONE)
{
continue;
}
if (!findExtend)
{
lowPt = pt1;
upPt = pt2;
findExtend = 1;
}
else
{
lowPt = GlobalFunc::Min(lowPt, pt1);
upPt = GlobalFunc::Max(upPt, pt2);
}
}
if (findExtend)
{
lowPt > low;
upPt > up;
return RTNORM;
}
return RTNONE;
}