Files
envi-code/SourceCode/Code2026/AdsXRx/XSymbolList.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

137 lines
2.7 KiB
C++

//-----------------------------------------------------------------------------+
// Copyright (C), 1998-2007, SH Software Co. Ltd.
// = FileName : XSymbolList 类
// = Version : ver2.0
// = Author : zjq
// = CreateDate : 2002-09-09
// = Description: XSymbolList 定义
// = Maintainers:
//
//-----------------------------------------------------------------------------+
#include "StdAfx.h"
#include "XSymbolList.h"
#include "XGlobalFunc.h"
XSymbolList::XSymbolList(LPCTSTR pszTblName, LPCTSTR pszMask, bool bNameDict)
: name(pszTblName)
{
XString 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 链表处理;
//zjq 2009-4-2
/*RBList 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 链表处理;
//zjq 2009-4-2
/*RBList rbTabs = prbBuf;
if (rbTabs.GetData(2, name) == RTNORM)
{
_tcsupr(name);
if (ads_wcmatch(name, sFilter) == RTNORM)
{
Append(tstrnew(name));
}
}*/
nFlag = CONTINUE;
}
}
}
XSymbolList::~XSymbolList()
{
}