Ссылка на блок внутри блока

Автор Тема: Ссылка на блок внутри блока  (Прочитано 6048 раз)

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

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

  • ADN OPEN
  • **
  • Сообщений: 76
  • Карма: 1
Добрый день!

До сегодняшнего дня я свято верил, что внутри блока (не блока листа) не может быть другого блока (или ссылки на блок).
Сегодня при переборе вхождений блока обнаружил это:

Код - C# [Выбрать]
  1. ...
  2. using (StreamWriter file = File.CreateText(fileName))
  3. {
  4.     foreach (ObjectId objId in blk)
  5.         file.WriteLine(objId.ObjectClass.Name);
  6.  
  7.     file.Close();
  8. }
  9. ...

В итоге получил такое:
...
AcDbLine
AcDbLine
AcDbBlockReference
AcDbBlockReference
AcDbMText
AcDbLine
...

После этого полез в чертеж, в редактор блока и не обнаружил внутри блока этих двух ссылок на другие блоки (или может плохо искал - чертеж большой и сложный).

Отсюда два вопроса:

1. Это вообще нормальная ситуация?
2. Ок, если это допустимо, то как мне транслировать координаты объектов этих блоков внутри блока на чертеж? Раньше я получал объект из блока и вызывал у него GetTransformedCopy(blockReference.BlockTransform). Для для объектов BlockReference это вызывает порождение "пустой" копии BlockReference с нулевым ObjectId и далее при попытке получить BlockDefinition от этой копии BlockReference вылетает исключение NulBlockId.

Спасибо!


UPDATE:

GetTransformedCopy возвращает копию объекта с координатами относительно листа или с координатами относительно того блока, в котором находится BlockReference?

Ну т.е. у меня такая ситуация:

Лист (блок листа)
    Ссылка на блок 1ур (получаю блок)
        Ссылка на блок 2ур (получаю блок)
            Объект 1
            Объект 2
            Объект n

Я беру объекты (1..n) и вызываю GetTransformedCopy(ссылка на блок 2ур.BlockTransform)... Я получаю копию объекта с координатами относительно листа (блока листа)? Или с координатами блока 1ур?

Отмечено как Решение Alexx 23-10-2015, 11:58:29

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ссылка на блок внутри блока
« Ответ #1 : 23-10-2015, 11:51:50 »
До сегодняшнего дня я свято верил, что внутри блока (не блока листа) не может быть другого блока (или ссылки на блок).
И зря. Внутри описания любого блока (BlockTableRecord) может быть сколько угодно вставок блока (BlockReference).
После этого полез в чертеж, в редактор блока и не обнаружил внутри блока этих двух ссылок на другие блоки (или может плохо искал - чертеж большой и сложный).
Скорее всего именно плохо искал.
1. Это вообще нормальная ситуация?
Абсолютно нормальная.
как мне транслировать координаты объектов этих блоков внутри блока на чертеж?
Напрямую ты транслировать координаты вложенного блока не можешь, т.к. BlockTransform возвращает тебе матрицу преобразования из системы координат блока в систему координат определения блока (в частности в Пространство Модели или Пространство Листа), в который он вставлен. Необходимо перемножать матрицы.
В качестве примера: http://adn-cis.org/forum/index.php?topic=2933.msg12071#msg12071
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 76
  • Карма: 1
Re: Ссылка на блок внутри блока
« Ответ #2 : 23-10-2015, 11:58:51 »
Александр, спасибо за ответы.