Как найти все вставки динамического блока

Автор Тема: Как найти все вставки динамического блока  (Прочитано 3360 раз)

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

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 10027
  • Карма: 1281
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2098
  • Карма: 543
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
За перевод статьи огромное спасибо! Очень полезный материал!
Пара замечаний:
Цитировать
получаем запись таблицы блоков и смотри анонимная ли она
Судя по коду, смотрим, является ли она записью динамического блока, а не анонимного.

Это из справки:
Цитировать
Retrieves a collection populated with the ObjectIds of the anonymous blocks created from the dynamic block definition.
Это в комментариях:
Цитировать
получаем все анонимные блоки динамического блока
Получаем "блоки". Что это: описание блока, или вставка блока? Судя по коду далее - это все-таки описание.
P.S. А как подразумевается выполнять поиск информации в статьях? Путь моего поиска этой статьи был очень длинным. Можно сказать, случайно наткнулся. Научите, пожалуйста! А то уже не первый раз ищу везде где только можно, а оказывается, что давным-давно тут есть переведенная статья на эту тему.

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 10027
  • Карма: 1281
  • Рыцарь ObjectARX
  • Skype: rivilis
Получаем "блоки". Что это: описание блока, или вставка блока? Судя по коду далее - это все-таки описание.
Описание блока. Чаще всего в оригинале "block" - это описание блока, а "block reference" (или "insert") - это вставка блока.
А как подразумевается выполнять поиск информации в статьях?
Ну вообще-то на сайте есть поиск, но я предпочитаю гугловский поиск, так как он значительно мощнее и интеллектуальнее, чем поиск на сайте:



Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 818
  • Карма: 134
Позволю себе провокационный вопрос: а если дин.блок вставлен внутрь другого блока - опубликованный код вернет это вхождение или нет?
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 10027
  • Карма: 1281
  • Рыцарь ObjectARX
  • Skype: rivilis
Позволю себе провокационный вопрос: а если дин.блок вставлен внутрь другого блока - опубликованный код вернет это вхождение или нет?
Тогда нужно использовать GetBlockReferenceIds(false,true);
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2098
  • Карма: 543
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Ну вообще-то на сайте есть поиск, но я предпочитаю гугловский поиск, так как он значительно мощнее и интеллектуальнее, чем поиск на сайте:
А ведь действительно! Поиском все прекрасно находится, даже встроенным. Надо взять за правило - в первую очередь искать тут :)
Чаще всего в оригинале "block" - это описание блока, а "block reference" (или "insert") - это вставка блока.
В общем-то да, но для ясности, лучше бы уточняли. Сугубо мое личное мнение :)

Оффлайн Владимир Шу

  • ADN Club
  • ****
  • Сообщений: 490
  • Карма: 112
    • ПГСу Бложик
Принимая во внимание 32 строку, ИМХО стоит поменять 36 строку на что-то типа: "\nДинамическому блоку \"{0}\" соответствуют {2} вставок блока, из них {1} анонимных.\n" или что то подобное...

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 10027
  • Карма: 1281
  • Рыцарь ObjectARX
  • Skype: rivilis
Владимир Шу,
Замечание принято!
Просмотрел еще раз внимательно код и понял, что эта формулировка будет неправильной, т.к. в действительности там не вставки анонимных блоков (BlockReference) подсчитываются, а именно анонимные блоки (BlockTableRecord). Так что там или алгоритм менять или не трогать строку вывода.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • ****
  • Сообщений: 490
  • Карма: 112
    • ПГСу Бложик
Теперь я что то не понимаю.
в 19 строке из определения блока получают ссылки на анонимные  определения того же блока.
в 21 строке в коллекцию dynBlockRefs  заносятся вхождения блока, потом в 30 строке в цикле проходятся по анонимным определениям блока и в ту же коллекцию заносят их вхождения (строка 32), т.е в dynBlockRefs должны быть ссылки на все вхождения динамического блока, не важно измененные или нет, это как в быстром поиске искать блок по имени, получишь все вхождения.

В то же время в 36 строке говориться, что блоку соответствуют, условно, 5 анонимных блоков и 10 вставок блока

Написал и засомневался... наверное следует понимать так:
У динамического блока "дверь" имеется  5 анонимных определений блоков и всего 12 вхождений всех определений блоков.  Фраза в коде корявая, но да, поторопился, не надо было писать предложение.

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 10027
  • Карма: 1281
  • Рыцарь ObjectARX
  • Skype: rivilis
У динамического блока "дверь" имеется  5 анонимных определений блоков и всего 12 вхождений всех определений блоков.
Именно так.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение