Proxy объекты

Автор Тема: Proxy объекты  (Прочитано 5684 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн reddysssАвтор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Proxy объекты
« : 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.   }

я вижу в коде как удаляются прокси объекты но где они дробятся на примитивы???
« Последнее редактирование: 23-11-2016, 15:43:27 от Александр Ривилис »

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Proxy объекты
« Ответ #1 : 23-11-2016, 14:59:48 »
Научись пользоваться форматированием и поиском по форуму.

Оффлайн reddysssАвтор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Re: Proxy объекты
« Ответ #2 : 23-11-2016, 15:07:31 »
ок буду учится
но мне бы ссылку на пост
я не ленюсь а дико тороплюсь

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13894
  • Карма: 1789
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Proxy объекты
« Ответ #3 : 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 - но дальше в теме рассматриваются ошибки).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение