115 lines
1.9 KiB
C++
115 lines
1.9 KiB
C++
//-----------------------------------------------------------------------------+
|
|
// Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd.
|
|
// = FileName : TAcDbBlockTable Àà
|
|
// = Version : ver2.0
|
|
// = Author : wlw
|
|
// = CreateDate : 2002-09-09
|
|
// = Description: TAcDbBlockTable ¶¨Òå
|
|
// = Maintainers:
|
|
//
|
|
//-----------------------------------------------------------------------------+
|
|
#include "StdAfx.h"
|
|
#include "TAcDbBlockTable.h"
|
|
|
|
TAcDbBlockTable::TAcDbBlockTable(const TCHAR *blkName)
|
|
: TAcDbSymbolTable(_T("BLOCK"), blkName)
|
|
{
|
|
if (TAcDbSymbolTable::operator !())
|
|
{
|
|
return;
|
|
}
|
|
|
|
GetData(10, base);
|
|
GetData(-2, ent);
|
|
}
|
|
|
|
TAcDbBlockTable::~TAcDbBlockTable()
|
|
{
|
|
|
|
}
|
|
|
|
int TAcDbBlockTable::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 TAcDbBlockTable::GetExtend(ads_point low, ads_point up, ads_matrix tranMat)
|
|
{
|
|
if (!(*this))
|
|
{
|
|
return RTERROR;
|
|
}
|
|
|
|
TADSGePoint3d lowPt, upPt;
|
|
int rc = ent.GetExtend(lowPt, upPt, tranMat);
|
|
if (rc == RTERROR)
|
|
{
|
|
return RTERROR;
|
|
}
|
|
|
|
int findExtend = rc == RTNORM ? 1 : 0;
|
|
|
|
TEntitySet subEnt = ent;
|
|
while(1)
|
|
{
|
|
ads_name entNext;
|
|
if (ads_entnext(subEnt, entNext) != RTNORM)
|
|
{
|
|
break;
|
|
}
|
|
|
|
subEnt = entNext;
|
|
subEnt.FreeGroups();
|
|
|
|
TCString eType;
|
|
subEnt.GetData(0, eType);
|
|
if (subEnt.Is(_T("ENDBLK")))
|
|
{
|
|
break;
|
|
}
|
|
|
|
TADSGePoint3d 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 = Min(lowPt, pt1);
|
|
upPt = Max(upPt, pt2);
|
|
}
|
|
}
|
|
|
|
if (findExtend)
|
|
{
|
|
lowPt > low;
|
|
upPt > up;
|
|
|
|
return RTNORM;
|
|
}
|
|
|
|
return RTNONE;
|
|
}
|