Explode AcDbBlockReference

Автор Тема: Explode AcDbBlockReference  (Прочитано 8087 раз)

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

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

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Explode AcDbBlockReference
« : 11-03-2019, 18:53:41 »
Есть AcDbBlockReference
Как разбить его на примитивы, аналогично команде Acad "explode" и удалить определение блока?

Отмечено как Решение Sergey_K 11-03-2019, 18:59:45

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Explode AcDbBlockReference
« Ответ #1 : 11-03-2019, 18:57:27 »
Метод AcDbBlockReference::explodeToOwnerSpace тебе в помощь. А для удаления определения блока (AcDbBlockTableRecord) открой его "для записи" и вызови метод erase. Впрочем желательно сначала убедиться, что на него нет ссылок.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: Explode AcDbBlockReference
« Ответ #2 : 11-03-2019, 19:13:39 »
Спасибо. как я его не заметил... )
А полученный набор примитивов получить можно для дальнейших действий?
Или создать ещё тему?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Explode AcDbBlockReference
« Ответ #3 : 11-03-2019, 19:23:53 »
А полученный набор примитивов получить можно для дальнейших действий?
Если нужен набор примитивов для дальнейших действий, то лучше вместо метода AcDbBlockReference::explodeToOwnerSpace использовать метод AcDbBlockReference::explode. Ты как раз в AcDbVoidPtrArray и получишь набор примитивов. Только их еще нужно будет добавить в пространство модели/листа.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: Explode AcDbBlockReference
« Ответ #4 : 11-03-2019, 19:32:50 »
Только их еще нужно будет добавить в пространство модели/листа

Не ясен формат этого AcDbVoidPtrArray. Что там ссылки на Entity или objectId ?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Explode AcDbBlockReference
« Ответ #5 : 11-03-2019, 19:44:05 »
Только их еще нужно будет добавить в пространство модели/листа

Не ясен формат этого AcDbVoidPtrArray. Что там ссылки на Entity или objectId ?
Там ссылки на AcDbObject (в частности AcDbEntity):
Код - C++ [Выбрать]
  1. AcDbVoidPtrArray arr;
  2. bref->explode(arr); // Это наш AcDbBlockReference
  3. int nArr = arr.length();
  4. if (nArr > 0) {
  5.         for (int i=0; i < nArr; i++) {
  6.                 AcDbObject *pObj = (AcDbObject*)arr[i];
  7.                 AcDbEntity *pEnt = AcDbEntity::cast(pObj);
  8.                 if (pEnt) {
  9.                         // Дальше делаешь с ним то, что считаешь нужным.
  10.                         // В том числе и добавляешь в нужное пространство.
  11.                 }
  12.  
  13.         }
  14. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение