Приветствую всех
Реализую внедрение внешних ссылок
если в какой то из ссылок есть proxy-объект, то внедрение оказывается не возможно
если я правильно понял исходник REMOVEALLPROXY
то код который а активном чертеже разбивает прокси на примитивы выглядит так
for (__int64 i = iFirst; i < iLast && nObjects > 0; i++)
{
AcDbHandle h(i);
AcDbObjectId id = AcDbObjectId::kNull;
if ((es = pDb->getAcDbObjectId(id,false,h)) == Acad::eOk) // Получаем ObjectId по Handle
{
AcDbObjectPointer<AcDbObject> pObj(id,AcDb::kForRead);
if (pObj.openStatus() == Acad::eOk && pObj->isAProxy())
{
nProxyTotal++;
ids.append(id);
}
nObjects--;
}
}
подскажите что происходить в этом блоке
??
int nProxyDeleted = 0;
int nProxyEntityDeleted = 0;
for (int j=0; j < ids.length(); j++) {
AcDbObjectPointer<AcDbObject> pObj(ids[j],AcDb::kForWrite);
if (pObj.openStatus() == Acad::eOk) {
if (pObj->erase(true) == Acad::eOk) {//прокси объект удаляется
nProxyDeleted++;
if (AcDbEntity::cast(pObj.object())) {
nProxyEntityDeleted++;
}
} else {//а тут ???
AcDbObject *ppObj; pObj.release(ppObj);
if (AcDbEntity::cast(ppObj)) {
AcDbLine *pRep = new AcDbLine();
if (ppObj->handOverTo(pRep,false,false) == Acad::eObjectToBeDeleted) {
pRep->erase(); pRep->close();
delete ppObj;
nProxyDeleted++;
nProxyEntityDeleted++;
} else {
delete pRep;
}
} else {
AcDbDictionary *pRep = new AcDbDictionary();
if (ppObj->handOverTo(pRep,false,false) == Acad::eObjectToBeDeleted) {
pRep->erase(); pRep->close();
delete ppObj;
nProxyDeleted++;
} else {
delete pRep;
}
}
}
}
}
я вижу в коде как удаляются прокси объекты но где они дробятся на примитивы???