Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: reddysss от 23-11-2016, 14:46:57

Название: Proxy объекты
Отправлено: reddysss от 23-11-2016, 14:46:57
Приветствую всех
Реализую внедрение внешних ссылок
если в какой то из ссылок есть proxy-объект, то внедрение оказывается не возможно

если я правильно понял исходник REMOVEALLPROXY
то код который а активном чертеже разбивает прокси на примитивы выглядит так

Код - C# [Выбрать]
  1.  for (__int64 i = iFirst; i < iLast && nObjects > 0; i++)
  2. {
  3.     AcDbHandle h(i);
  4.     AcDbObjectId id = AcDbObjectId::kNull;
  5.     if ((es = pDb->getAcDbObjectId(id,false,h)) == Acad::eOk)  // Получаем ObjectId по Handle
  6.     {
  7.       AcDbObjectPointer<AcDbObject> pObj(id,AcDb::kForRead);
  8.       if (pObj.openStatus() == Acad::eOk && pObj->isAProxy())
  9.       {
  10.         nProxyTotal++;
  11.         ids.append(id);
  12.       }
  13.       nObjects--;
  14.     }
  15.  }
подскажите что происходить в этом блоке ?????
Код - C++ [Выбрать]
  1.   int nProxyDeleted = 0;
  2.   int nProxyEntityDeleted = 0;
  3.   for (int j=0; j < ids.length(); j++) {
  4.     AcDbObjectPointer<AcDbObject> pObj(ids[j],AcDb::kForWrite);
  5.     if (pObj.openStatus() == Acad::eOk) {
  6.       if (pObj->erase(true) == Acad::eOk) {//прокси объект удаляется
  7.         nProxyDeleted++;
  8.         if (AcDbEntity::cast(pObj.object())) {
  9.           nProxyEntityDeleted++;
  10.         }
  11.       } else {//а тут ???
  12.         AcDbObject *ppObj; pObj.release(ppObj);
  13.         if (AcDbEntity::cast(ppObj)) {
  14.           AcDbLine *pRep = new AcDbLine();
  15.           if (ppObj->handOverTo(pRep,false,false) == Acad::eObjectToBeDeleted) {
  16.             pRep->erase(); pRep->close();
  17.             delete ppObj;
  18.             nProxyDeleted++;
  19.             nProxyEntityDeleted++;
  20.           } else {
  21.             delete pRep;
  22.           }
  23.         } else {
  24.           AcDbDictionary *pRep = new AcDbDictionary();
  25.           if (ppObj->handOverTo(pRep,false,false) == Acad::eObjectToBeDeleted) {
  26.             pRep->erase(); pRep->close();
  27.             delete ppObj;
  28.             nProxyDeleted++;
  29.           } else {
  30.             delete pRep;
  31.           }
  32.         }
  33.       }
  34.     }
  35.   }

я вижу в коде как удаляются прокси объекты но где они дробятся на примитивы???
Название: Re: Proxy объекты
Отправлено: Андрей Бушман от 23-11-2016, 14:59:48
Научись пользоваться форматированием и поиском по форуму.
Название: Re: Proxy объекты
Отправлено: reddysss от 23-11-2016, 15:07:31
ок буду учится
но мне бы ссылку на пост
я не ленюсь а дико тороплюсь
Название: Re: Proxy объекты
Отправлено: Александр Ривилис от 23-11-2016, 15:45:25
reddysss
Приветствую на форуме.
1. Про форматирование на форуме тебе уже написал Андрей Бушман. Как это делать - смотри у меня в подписи.
2. Этот код удаляет прокси-объекты, а не расчленяет их. Расчленяет их код EXPLODEALLPROXY.
3. Мой исходник EXPLODEALLPROXY: http://adn-cis.org/forum/index.php?topic=1060.msg4984#msg4984
4. Дальше в той теме её варианты на C# (например: http://adn-cis.org/forum/index.php?topic=1060.msg5017#msg5017 - но дальше в теме рассматриваются ошибки).