127 lines
2.3 KiB
C++
127 lines
2.3 KiB
C++
#include "StdAfx.h"
|
|
#include "SymbolStringList.h"
|
|
#include "GlobalFunc.h"
|
|
|
|
SymbolStringList::SymbolStringList(LPCTSTR pszTblName, LPCTSTR pszMask, bool bNameDict)
|
|
: name(pszTblName)
|
|
{
|
|
TCString sFilter = pszMask ? pszMask : _T("*");
|
|
_tcsupr(sFilter);
|
|
|
|
TCHAR szName[256];
|
|
memset(szName,0,sizeof(szName));
|
|
int nFlag = REWIND;
|
|
|
|
if (!bNameDict)
|
|
{
|
|
while (1)
|
|
{
|
|
resbuf *rbBuf = ads_tblnext(pszTblName, nFlag);
|
|
if (!rbBuf)
|
|
{
|
|
break;
|
|
}
|
|
|
|
resbuf* pNext = rbBuf;
|
|
while(pNext != NULL)
|
|
{
|
|
if (pNext->restype == 2)
|
|
{
|
|
_tcscpy(szName,pNext->resval.rstring);
|
|
_tcsupr(szName);
|
|
if (ads_wcmatch(szName, sFilter) == RTNORM)
|
|
{
|
|
Append(tstrnew(szName));
|
|
break;
|
|
}
|
|
}
|
|
pNext = pNext->rbnext;
|
|
}
|
|
ads_relrb(rbBuf);
|
|
|
|
//GetData 方法在 CCurtainWallSet::OnInitDialog() 中使用时产生内存错误
|
|
//改为迭代resbuf 链表处理;
|
|
//lfy 2010-4-2
|
|
/*TRBList rbTabs = rbBuf;
|
|
if (rbTabs.GetData(2, name) == RTNORM)
|
|
{
|
|
_tcsupr(name);
|
|
if (ads_wcmatch(name, sFilter) == RTNORM)
|
|
{
|
|
Append(tstrnew("0"));
|
|
}
|
|
}*/
|
|
|
|
nFlag = CONTINUE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AcDbDictionary* pNameDict = NULL;
|
|
acdbOpenObject(pNameDict, acdbCurDwg()->namedObjectsDictionaryId(), AcDb::kForRead);
|
|
if (pNameDict == NULL)
|
|
{
|
|
return;
|
|
}
|
|
|
|
AcDbObjectId idTable;
|
|
pNameDict->getAt(pszTblName, idTable);
|
|
pNameDict->close();
|
|
|
|
if (idTable.isNull() || !idTable.isValid())
|
|
{
|
|
return;
|
|
}
|
|
|
|
ads_name eTblName;
|
|
if (acdbGetAdsName(eTblName, idTable) != Acad::eOk)
|
|
{
|
|
return;
|
|
}
|
|
|
|
while (1)
|
|
{
|
|
resbuf *prbBuf = acdbDictNext(eTblName, nFlag);
|
|
if (!prbBuf)
|
|
{
|
|
break;
|
|
}
|
|
resbuf* pNext = prbBuf;
|
|
while(pNext != NULL)
|
|
{
|
|
if (pNext->restype == 2)
|
|
{
|
|
_tcscpy(szName,pNext->resval.rstring);
|
|
_tcsupr(szName);
|
|
if (ads_wcmatch(szName, sFilter) == RTNORM)
|
|
{
|
|
Append(tstrnew(szName));
|
|
break;
|
|
}
|
|
}
|
|
pNext = pNext->rbnext;
|
|
}
|
|
ads_relrb(prbBuf);
|
|
|
|
//GetData 方法在 CCurtainWallSet::OnInitDialog() 中使用时产生内存错误
|
|
//改为迭代resbuf 链表处理;
|
|
//lfy 2010-4-2
|
|
/*TRBList rbTabs = prbBuf;
|
|
if (rbTabs.GetData(2, name) == RTNORM)
|
|
{
|
|
_tcsupr(name);
|
|
if (ads_wcmatch(name, sFilter) == RTNORM)
|
|
{
|
|
Append(tstrnew(name));
|
|
}
|
|
}*/
|
|
|
|
nFlag = CONTINUE;
|
|
}
|
|
}
|
|
}
|
|
|
|
SymbolStringList::~SymbolStringList()
|
|
{
|
|
}
|