Найти все вставки динамического блока если имя блока на кирилице

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

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

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

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Здравствуйте, подскажите возможно ли найти все вставки динблоков по имени, если имя на кирилице или на кирилице и имеет пробелы в название? Нашел в сети пример скрипта от А. Ривилиса CalcBlock, CalcBlock1 но они не находит если имя на кирилице, можно ли находить в таком случае или требовать от пользователя чтобы имена блоков были на латинице и не имели пробелов? Я думаю с пробелом наверно не получится, даже если программно задавать имя блока или можно как то в кавычки засунуть  ?

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Имена блоков прекрасно поддерживают как кириллицу, так и пробелы. В API тоже никаких проблем с этим нет - список вариантов динамического блока можно получить, список вставок блока ( BlockReference ) тоже. Так что проблема вымышленная.
Естественно для ввода имен удобней сделать маленькую форму, а не с консоли вводить. И лучше со списком всех имеющихся имен блоков.
И кстати, а чем не устраивает _SelectSimilar ?
« Последнее редактирование: 02-11-2020, 11:38:34 от avc »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Здравствуйте, подскажите возможно ли найти все вставки динблоков по имени, если имя на кирилице или на кирилице и имеет пробелы в название? Нашел в сети пример скрипта от А. Ривилиса CalcBlock, CalcBlock1 но они не находит если имя на кирилице, можно ли находить в таком случае или требовать от пользователя чтобы имена блоков были на латинице и не имели пробелов? Я думаю с пробелом наверно не получится, даже если программно задавать имя блока или можно как то в кавычки засунуть  ?
О каких это моих программах идёт речь? Не вижу ссылок и подтверждения, что что-то не работает.
Вот пример программы, которая должна работать: https://adn-cis.org/kak-najti-vse-vstavki-dinamicheskogo-bloka.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Так что проблема вымышленная.
да мне нечего делать и я выдумал

каких это моих программах идёт речь? Не вижу ссылок и подтверждения, что что-то не работает.
Вот пример программы, которая должна работать: https://adn-cis.org/kak-najti-vse-vstavki-dinamicheskogo-bloka.html

https://forums.autodesk.com/t5/net/c-find-block-references-by-name/td-p/1672857

не работает с кирилицей и если содержит пробелы
« Последнее редактирование: 02-11-2020, 12:59:27 от Yusuf »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
https://forums.autodesk.com/t5/net/c-find-block-references-by-name/td-p/1672857

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Цитата: Александр Ривилис от 02-11-2020, 10:54:24

    Так что проблема вымышленная.

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

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
да мне нечего делать и я выдумал
Не выдумал, а сохранил в тайне код, который не работает.
Как я сразу и понял вы пытаетесь, ввести строку с пробелами через командную строку. Это возможно, но нужно включить опцию PromptStringOptions.AllowSpaces.
Ну и искать объекты в базе данных чертежа, а не селектом с фильтрами

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Это не моя цитата. Так что будь внимательнее.
извиняюсь не обратил внимания на это и спасибо за ссылку
Не выдумал, а сохранил в тайне код, который не работает.
Как я сразу и понял вы пытаетесь, ввести строку с пробелами через командную строку. Это возможно, но нужно включить опцию PromptStringOptions.AllowSpaces.
Ну и искать объекты в базе данных чертежа, а не селектом с фильтрами
Мне надо не во всей базе а только в модели, поэтому пользовался тем старым пользовался
« Последнее редактирование: 02-11-2020, 14:33:52 от Yusuf »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Мне надо не во всей базе а только в модели, поэтому пользовался тем старым пользовался
Можно пользоваться тем кодом, который я дал в ссылке, только проверять значение OwnerId - если это ModelSpace, то берёшь, если нет - пропускаешь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Можно пользоваться тем кодом, который я дал в ссылке, только проверять значение OwnerId - если это ModelSpace, то берёшь, если нет - пропускаешь.
OwnerId  пытаюсь найти через дебаг, есть кажется только у anonymousBtr и он возвращает числа, как проверить их, лежит ли в модели

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Владелец есть у всех Entity, у все объектов вставляемых в чертеж. Вангую что вы пытаетесь найти OwnerId у BTR блока. Их там нет. BTR не вставляются в чертеж. Это только описание блока, но не Entity.  Надо взять все ссылки на блок (BlockReference) и уже смотреть куда они вставлены - в модель, на бумагу или в другие блоки.


Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Точно! У DBObject есть OwnerId, но это не то. Он у меня в коде один раз используется только у атрибутов. На пространство, куда вставлен Entity указывает именно   BlockId

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Точно! У DBObject есть OwnerId, но это не то. Он у меня в коде один раз используется только у атрибутов. На пространство, куда вставлен Entity указывает именно   BlockId
Для примитивов в блоке (в том числе в ModelSpace/PaperSpace) BlockId и OwnerId - это одно и тоже.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Для примитивов в блоке (в том числе в ModelSpace/PaperSpace) BlockId и OwnerId - это одно и тоже.
да оказывается одно и то же, только они же числа возращают и в дебаге не нашел есть все кроме Modelspace.

Нашел через ArxDBG что Modelspace есть в поле Block и  и MgdDbg  показывает что он в поле Name находится в SymbolTableRecord, а не в BlockTableRecord







p.s Прошу прошения что переспрашиваю, самому кажется что не реально туплю и не удобно все время спрашивать, вроде все разжевали а проглотить не могу, но хочется докапатся до истины.
p.p.s Кажется нашел решение сравниваю OwnerId блока с db.CurrentSpaceId, остается проверить по имени.
Вообще я на правильном пути или может можно по легче, суть в чем, пользователь выбирает один блок выходит окно с атрибутами этого блока, выбирает нужные атрибуты, нажимает Создать, потом по имени блока находим все блоки и нужные атрибуты и закидываем в эксель.

p.p.p.s Хотел проверить на совпадение имени блока и получил Model_Space оказывается у Entity.Blockname показывает где он лежит или я не прав?
« Последнее редактирование: 03-11-2020, 09:28:06 от Yusuf »