parent блок для nested блоков

Автор Тема: parent блок для nested блоков  (Прочитано 8961 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN Club
  • ***
  • Сообщений: 161
  • Карма: 8
  • Skype: begiz_i
parent блок для nested блоков
« : 09-12-2018, 18:04:46 »
Добрый вечер
ситуация такая:
на чертеже куча блоков, в каждом из которых тоже есть блоки (другие).
необходимо подсветит эти блоки окружностью в зависимости от атрибутов parent блока.

думал через ownerId, но походу нет.

думал сделать так:
Код - C++ [Выбрать]
  1. AcDbObjectIdArray nestedArray;
  2. AcDbBlockTableRecordPointer pRec(_T("nested"),acdbCurDwg(),AcDb::kForRead);
  3. pRec->getBlockReferenceIds(nestedArray,false);
  4. for(int i = 0; i < nestedArray.length(); i++)
  5. {
  6.    AcDbObjectPointer pBlk(nestedArray[i],AcDb::kForRead);
  7.    AcDbObjectId parentId = pBlk->ownerId();
  8.    //....
  9. }
  10.  

Но ownerId указывает на AcDbBlockTableRecord, как и следовало ожидать на самом деле

как связаны parent->child блоки?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: parent блок для nested блоков
« Ответ #1 : 09-12-2018, 19:59:55 »
как связаны parent->child блоки?
Такого понятия не существует. Есть понятие что вставка блока (AcDbBlockReference) находится внутри другого блока (AcDbBlockTableRecord). Причем этот AcDbBlockTableRecord может быть как пространством модели/листа, так и другим блоком, который в свою очередь вставлен еще какой-то блок.
Но ownerId указывает на AcDbBlockTableRecord, как и следовало ожидать на самом деле
Правильно. А дальше снова pRec->getBlockReferenceIds и останавливаешься только тогда, когда ownerId для AcDbBlockReference будет пространством листа/модели.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 161
  • Карма: 8
  • Skype: begiz_i
Re: parent блок для nested блоков
« Ответ #2 : 09-12-2018, 20:58:43 »
т.е. идея идти снизу вверх по иерархии вложения блоков не пройдет?

Придется идти сверху вниз:
1. брать все блоки на чертеже
2. проверять AcDbBlockTableRecord на наличие искомых AcDbBlockReference
3. трансформировать координаты

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: parent блок для nested блоков
« Ответ #3 : 09-12-2018, 22:18:33 »
т.е. идея идти снизу вверх по иерархии вложения блоков не пройдет?
Почему? Идея правильная, но у тебя незавершенная. Ну и плюс к тому нужно запоминать все промежуточные матрицы преобразования. И это сработает если блок не динамический. Если динамический, то всё еще сложнее...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 161
  • Карма: 8
  • Skype: begiz_i
Re: parent блок для nested блоков
« Ответ #4 : 09-12-2018, 22:35:43 »
Блоки обычные.
Просто у меня мысль видимо гдето обрывается.

Как понять в каком именно AcDbBlockReference находится конкретный nested AcDbBlockReference  у меня 2 мысли.
(определение не правельное, ибо все блоки находятся в AcDbBlockTableRecord, но упрощенно имеется введу трансформацию которого из parent применять к nested)
1. идти сверху вниз и взрывать блоки, пока не доберусь до нужных.
2. получить массив блоков типа parent по ownerId, по ним пробежаться и взорвать.

Тут вопрос наверное скорее в скорости,
1. блоков может быть много.
2. все блоки обычные
3. "вложения" блоков, толко 1 уровня

Каждый раз всё взрывать и переберать что получилось может быть накладно.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: parent блок для nested блоков
« Ответ #5 : 09-12-2018, 22:37:07 »
Зачем вообще что-то взрывать?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 161
  • Карма: 8
  • Skype: begiz_i
Re: parent блок для nested блоков
« Ответ #6 : 10-12-2018, 09:35:19 »
в данном конкретном случае мне нужно только координаты nested блока
я могу взять матрицу трансформации AcDbBlockReference , взят координаты нужного мне блока из AcDbBlockTableRecord и получить точку nested блока.

но допустим мне нужен будет всё таки конкретный блок в блоке, как мне тогда их связать?

думал как то getSubentPathsAtGsMarker использовать, но никогда не работа; с этой функцией и даже не знаю подходит ли она вообше здесь
из описания она вытаскивает псевдо элементы(рёбра, поверхности и тд)

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: parent блок для nested блоков
« Ответ #7 : 10-12-2018, 17:14:17 »
но допустим мне нужен будет всё таки конкретный блок в блоке, как мне тогда их связать?
Ох. Мы похоже всё-таки говорим на разных языках. Куда связать? Зачем связать? Что имеется в виду под связью?
Если тебе нужно дать пользователю возможность выбрать блок, вставка которого в другом блоке, то нужно воспользоваться acedNEntSel или acedNEntSelP. Там будет вся цепочка блоков. Впрочем последним в ней будет не AcDbBlockReference, а какой-то из примитивов внутри самого внутреннего блока.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 161
  • Карма: 8
  • Skype: begiz_i
Re: parent блок для nested блоков
« Ответ #8 : 10-12-2018, 18:09:42 »
прошу прощения, что непонятно излагаю мысли :)
попробую на упрощенном примере расписать.
1, у нас есть блок 1 с атрибутом номер1.
2. у нас есть блок 2 с атрибутом нонер2.
3. блок типа 2 вставлен в блок типа 1.
4. блоки типа 1 раскиданы по чертежу и у них заполнен атрибут номер1.
5. я хочу программно заполнить атрибут номер2 значением атрибута номер1 из блока 1 в котором находится блок 2

на думал что можно сразу взять все блоки 2 и найти значения атрибута номер1 блока 1 (как-то поднявшись по иерархии вложений блоков)

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: parent блок для nested блоков
« Ответ #9 : 10-12-2018, 18:14:00 »
Фрагмент чертежа можешь предоставить (по три-четыре блока)?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 161
  • Карма: 8
  • Skype: begiz_i
Re: parent блок для nested блоков
« Ответ #10 : 10-12-2018, 18:18:59 »
прицепил пример

Отмечено как Решение begiz 10-12-2018, 18:59:40

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: parent блок для nested блоков
« Ответ #11 : 10-12-2018, 18:39:04 »
Посмотрел я пример и подозреваю, что у тебя ничего не получится. Атрибуты блока 1 "зацементированы" в блоке 2. Так что любое изменение этого атрибута отобразится во всех блоках 2.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ***
  • Сообщений: 161
  • Карма: 8
  • Skype: begiz_i
Re: parent блок для nested блоков
« Ответ #12 : 10-12-2018, 18:58:49 »
всё понятно,
сейчас тоже до этого дошел

Спасибо!