Files
envi-code/SourceCode/Code2026/tg_shs/shs_geLib/TSymbolStringList.cpp
T
2026-09-28 15:28:50 +08:00

137 lines
2.8 KiB
C++

//-----------------------------------------------------------------------------+
// Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd.
// = FileName : TSymbolStringList 类
// = Version : ver2.0
// = Author : wlw
// = CreateDate : 2002-09-09
// = Description: TSymbolStringList 定义
// = Maintainers:
//
//-----------------------------------------------------------------------------+
#include "StdAfx.h"
#include "TSymbolStringList.h"
#include "TchGlobalFunc.h"
TSymbolStringList::TSymbolStringList(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;
}
}
}
TSymbolStringList::~TSymbolStringList()
{
}