Не работает selection filter для вхождений блоков с заданным именем

Автор Тема: Не работает selection filter для вхождений блоков с заданным именем  (Прочитано 6401 раз)

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

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

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

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Всем привет. Тема достаточно раскрыта на просторах интернета, тем не менее, у меня (AutoCAD 2017x64) не работает фильтр "двойной" для вхождений блоков с заданным именем:
Код - C# [Выбрать]
  1. // Переменная для фильтра
  2. TypedValue[] filterlist = new TypedValue[2];
  3.  
  4. // Критерии фильтра
  5. filterlist[0] = new TypedValue(0, "INSERT");
  6. filterlist[1] = new TypedValue(2, blockName2);
  7.  
  8. // Создаем сам фильтр
  9. SelectionFilter filter = new SelectionFilter(filterlist);
  10.  
  11. // Выборка
  12. var selection = ed.SelectAll(filter);
  13.     if (selection.Status != PromptStatus.OK) return;
Думал, что где-то ошибка у меня, но потом нашел похожую тему на авторитетном ресурсе. Данный программный код у меня также не срабатывает.
В режиме отладки можно наблюдать следующее:
Код - Auto/Visual Lisp [Выбрать]
  1. selection
  2. {(Error,)}
  3.     Status: Error
  4.     Value: null
Может, кто-то сталкивался? Есть какие-то мысли? Заранее, спасибо за помощь!

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
А почему только три копии темы? Давай еще!

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

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
А почему только три копии темы? Давай еще!
Что-то ночью странное с форумом творилось. :( К сожалению, сейчас не могу исправить - не могу удалить, нет таких полномочий. При попытке создать тему выбрасывало ошибку c SQL, я откатывал в браузере назад, снова пытался создать. При этом загружал страницу с темами параллельно и свою там не видел. В общем, жесть какая-то.
Как только вчера это произошло, написал в ЛС Александру Наумовичу в надежде, что он поправит, но, видимо, его еще не было.
А ты думаешь я спецом создал три темы, чтобы мне быстрей ответили?

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
А ты думаешь я спецом создал три темы, чтобы мне быстрей ответили?
Да, т.к. увидел, что между созданием каждой дублируемой темы прошло некоторое время (т.е. не были созданы сразу одна за одной, что могло бы походить на глюк сайта). :)

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

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Да, т.к. увидел, что между созданием каждой дублируемой темы прошло некоторое время (т.е. не были созданы сразу одна за одной, что могло бы походить на глюк сайта).
Прошло около 30 секунд, которое "думал" сайт, прежде чем выдать ошибку.
Кстати, у меня периодически вот такие вещи случаются:

Понятия не имею, с чем они связаны.
Андрей Бушман, ты бы мне лучше насчет фильтра подсказал :)
Off-Topic: показать
А то наш диалог не конструктивен - я бы не стал создавать 3 темы, чтобы мне быстрей ответили, очевидно же. ) И также очевиден тот факт, что темы создавать на форуме умею - уже несколько раз делал подобное. Плюс, я не пью и не употребляю никаких веществ, которые могли бы привести к созданию 3х одинаковых тем.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Кстати, у меня периодически вот такие вещи случаются:
Знакомая картинка. Регулярно наблюдаю её на этом форуме (когда заглядываю) с некоторых пор.
ты бы мне лучше насчет фильтра подсказал :)
С ходу так не подскажу, т.к. давно уже не писал под AutoCAD. Забывается постепенно... По части фильтров, я помню, что когда создавал их в процессе работы в AutoCAD руками (т.е. не программно), то там было важно дополнительно использовать логические операторы AND, OR и скобки (если мне не изменяет память), т.к. в противном случае в выборку не попадало ничего.

Отмечено как Решение Максим Маркевич 17-12-2016, 19:48:46

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
1. Дубли удалил.
2. Блок динамический? Если да, то фильтр и не должен работать.

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

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

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
С ходу так не подскажу, т.к. давно уже не писал под AutoCAD. Забывается постепенно... По части фильтров, я помню, что когда создавал их в процессе работы в AutoCAD руками (т.е. не программно), то там было важно дополнительно использовать логические операторы AND, OR и скобки (если мне не изменяет память), т.к. в противном случае в выборку не попадало ничего.
Ну это в случае сложных фильтров, у меня все примитивно.
1. Дубли удалил.
Спасибо. Еще раз извиняюсь.
2. Блок динамический? Если да, то фильтр и не должен работать.
Блин. Вот же ж. Не работает из-за анонимных блоков?
Статейку видел, просто посчитал решение с фильтрами более изящным.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Цитата: Александр Ривилис от 17-12-2016, 13:33:12

    2. Блок динамический? Если да, то фильтр и не должен работать.

Блин. Вот же ж. Не работает из-за анонимных блоков?
Статейку видел, просто посчитал решение с фильтрами более изящным.
Именно. И видимо у тебя все вставки блоков стали анонимными, т.к. с ними производились какие-то действия (менялись динамические параметры). В противном случае фильтр бы сработал, но отобрал только (!!!) немодифицированные вставки блоков.
Можно воспользоваться и фильтром (не советую), но тогда в фильтре:
Код - C# [Выбрать]
  1. filterlist[1] = new TypedValue(2, "имя_блока,`анонимное_имя1,`анонимное_имя2,...");
и предварительно придётся получить имена анонимных блоков для данного динамического блока.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
И видимо у тебя все вставки блоков стали анонимными, т.к. с ними производились какие-то действия (менялись динамические параметры).
Да, так и есть!
Можно воспользоваться и фильтром (не советую), но тогда в фильтре:
Почему не советуете? Какие-то подводные камни?
Так то получить список анонимных блоков не сложно.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Почему не советуете? Какие-то подводные камни?
1. Так как в имени анонимного блока присутствует символ '*', то его необходимо экранировать, т.е. ему должен предшествовать символ '`'. В противном случае '*U1' будет фильтровать не только "*U1", но и "чтоугодноU1".
2. Если анонимных блоков порожденных динамическим блоком много, то длина строки содержащей их может быть очень большой. Я не помню ограничение на длину этой строки, но оно есть.
3. Выигрыша по скорости всё-равно не будет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Александр Наумович, спасибо за разъяснение.
Уже после
2. Если анонимных блоков порожденных динамическим блоком много, то длина строки содержащей их может быть очень большой. Я не помню ограничение на длину этой строки, но оно есть.
отбой!
3. Выигрыша по скорости всё-равно не будет.
Странно, я предполагал, что фильтры всегда быстрее перебора.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Странно, я предполагал, что фильтры всегда быстрее перебора.
Перебор работает однозначно быстрее, чем Editor.SelectAll, но вероятно медленнее чем Editor.SelectWindow/SelectCrossingPolygon/SelectCrossingWindow/SelectFence и им подобные, так как они оперируют не всей базой, а виртуальным экраном, на который уже спроецированы видимые в нём примитивы, что может быть значительно быстрее.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение