115 lines
1.8 KiB
C++
115 lines
1.8 KiB
C++
//-----------------------------------------------------------------------------+
|
|
// Copyright (C), 1998-2007, SH Software Co. Ltd.
|
|
// = FileName : XBlockTable 类
|
|
// = Version : ver2.0
|
|
// = Author : zjq
|
|
// = CreateDate : 2002-09-09
|
|
// = Description: XBlockTable 定义
|
|
// = Maintainers:
|
|
//
|
|
//-----------------------------------------------------------------------------+
|
|
#include "StdAfx.h"
|
|
#include "XBlockTable.h"
|
|
|
|
XBlockTable::XBlockTable(const TCHAR *blkName)
|
|
: XSymbolTable(_T("BLOCK"), blkName)
|
|
{
|
|
if (XSymbolTable::operator !())
|
|
{
|
|
return;
|
|
}
|
|
|
|
GetData(10, base);
|
|
GetData(-2, ent);
|
|
}
|
|
|
|
XBlockTable::~XBlockTable()
|
|
{
|
|
|
|
}
|
|
|
|
int XBlockTable::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 XBlockTable::GetExtend(ads_point low, ads_point up, ads_matrix tranMat)
|
|
{
|
|
if (!(*this))
|
|
{
|
|
return RTERROR;
|
|
}
|
|
|
|
XPoint lowPt, upPt;
|
|
int rc = ent.GetExtend(lowPt, upPt, tranMat);
|
|
if (rc == RTERROR)
|
|
{
|
|
return RTERROR;
|
|
}
|
|
|
|
int findExtend = rc == RTNORM ? 1 : 0;
|
|
|
|
Entity subEnt = ent;
|
|
while(1)
|
|
{
|
|
ads_name entNext;
|
|
if (ads_entnext(subEnt, entNext) != RTNORM)
|
|
{
|
|
break;
|
|
}
|
|
|
|
subEnt = entNext;
|
|
subEnt.FreeGroups();
|
|
|
|
XString eType;
|
|
subEnt.GetData(0, eType);
|
|
if (subEnt.Is(_T("ENDBLK")))
|
|
{
|
|
break;
|
|
}
|
|
|
|
XPoint 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;
|
|
}
|