#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; }