> aazko
1) Отобрать только эти примитивы только при помощи фильтра нельзя. Сначала нужно отобрать все proxy по фильтру '((0 . ACAD_PROXY_ENTITY)), а потом проанализировать каждый из примитивов в наборе на то, тот ли это примитив ACAD_PROXY_ENTITY или нет. Здесь как раз может помочь пример, к которому я отослал в самом начале: ArxDbgUiTdcDbObjectBase::display(AcDbProxyObject* proxy)
Тебе нужно написать функцию
Тебе нужно проанализировать
proxy->originalClassName()
proxy->originalDxfName() - Скорее всего это именно то, что тебе нужно!!!
proxy->applicationDescription());
Вот пример функции, которая из набора выкинет все не прокси и все прокси, которые имеют не то originalDxfName имя (я ее не тестировал - только для объяснения идеи):
long FilterByOriginalDxfName(char *DxfName, ads_name ss)
{
long n = 0;
if (acedSSLength(ss,&n) == RTNORM) {
while (n > 0) {
ads_name en;
if (acedSSName(ss,n-1,en) == RTNORM) {
AcDbObjectId objId;
if (acdbGetObjectId(objId,en) == Acad::eOk) {
AcDbObjectPointer<AcDbProxyEntity> ent(objId,AcDb::kForRead);
if (ent.openStatus() != Acad::eOk || stricmp(ent->originalDxfName(),DxfName)) {
// Это или не прокси-примитив, или не наш DxfName - удаляем из набора
acedSSDel(en,ss);
}
}
}
--n;
}
if (acedSSLength(ss,&n) == RTNORM) return n;
} else {
return -1;
}
return -1;
}