Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Предварительный выбор объектов с фильтром.

Предварительный выбор объектов с фильтром.

Ответ
Поиск в этой теме
Непрочитано 17.04.2013, 10:41 #1
Предварительный выбор объектов с фильтром.
Do$
 
AutoCAD/Civil3D LISP/C#
 
Санкт-Петербург
Регистрация: 15.08.2008
Сообщений: 1,702

Наткнулся на интересную особенность предварительного выбора объектов. Подчеркну сразу, что то о чем я расскажу, скорее всего, не зависит от API и языка. Обнаружил я это, когда писал на C#, используя NET API, проверил на LISP - там то же самое.
Дело вот в чем.
Предположим, что предварительно выбрано несколько объектов. Какие-то удовлетворяют определенному фильтру, какие-то нет. Если выполнить метод GetSelection с фильтром (или SSGET для LISP), то из предварительно выбранных элементов выберутся только те, которые удовлетворяют фильтру.
Если ничего не выбрано, то будет предложено выбрать объекты, завершение выбора - нажатие Enter.
Самое интересное, если предварительно выбраны объекты, которые все не удовлетворяют фильтру. Предвыбор сбрасывается, появляется предложение выбрать объекты, но позволяется сделать только один выбор! Либо рамкой, либо указанием. Но если выбран хотя бы один объект, удовлетворяющий фильтру, то выбор автоматически завершается! На мой взгляд, это очень нелогичное поведение, я ожидал выбора, завершающегося по Enter. Проверял на AutoCAD 2010, 2012, 2013 - везде так.
Может кто знает, в чем логика этого? Или это такая известная особенность? Или все же глюк?

Кто желает проверить - можно по такому алгоритму:
Рисуем в чертеже круги (CIRCLE) и линии (LINE). Предварительно выбираем только круги, запускаем коротенький LISP-код:
Код:
[Выделить все]
(ssget '((0 . "LINE")))
И пытаемся выбирать объекты.
Просмотров: 6490
 
Непрочитано 17.04.2013, 10:57
#2
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от Do$ Посмотреть сообщение
Но если выбран хотя бы один объект, удовлетворяющий фильтру, то выбор автоматически завершается! На мой взгляд, это очень нелогичное поведение, я ожидал выбора, завершающегося по Enter
Могу лишь предложить, если надо чтобы всегда работал выбор, завершающийся по Enter, перед ssget'ом принудительно сбрасывать pickfist -> 0
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 17.04.2013, 11:16
#3
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Ну да, получается, надо самому проверять предварительный выбор, и если он не устраивает, то сбрасывать его. PICFIRST я бы не стал трогать, в LISP можно sssetfirst использовать, а в NET, наверное, SetImpliedSelection.
Do$ вне форума  
 
Непрочитано 17.04.2013, 11:17
#4
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


По ходу этот момент прощелкали софтописцы - а бетатестеров на внутренние языки программирования (и апи для доступа) автодеск по ходу просто не держит.
Цитата:
Ну да, получается, надо самому проверять предварительный выбор
- ну для "простых" случаев, типа как в примере, еще можно, а чтоб "по хорошему" то боюсь придеться весь функционал ssget прогонять (на всякие рамки, or, and и пр).
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 17.04.2013 в 11:23.
Дима_ вне форума  
 
Непрочитано 17.04.2013, 11:24
#5
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
а бетатестеров на внутренние языки программирования (и апи для доступа) автодеск по ходу просто не держит.
В свете наблюдаемых в последнее время событий, я сильно подозреваю, что их у автодеска вообще нет, не только "на внутренние языки" (скомпилировалось - и хорошо...), а роль "группы тестирования" поневоле исполняют рядовые юзеры. Полагаю, что это своего рода политика манагеров: не нужно тратить деньги на группу тестирования, а вместо этого автодеску платят пользователи и они же бесплатно тестируют.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 17.04.2013 в 11:35.
hwd вне форума  
 
Непрочитано 17.04.2013, 11:40
#6
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


to hwd - ну в общем по крайней мере здесь из 3 десятков всевозможных специальностей (Job Function) я непосредственно выделенную линию тестирования не заметил - что как бы намекает на вторичное отношение (типа у нас этим попутно занимается отдел ххх) к этой задаче.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 17.04.2013, 11:42
#7
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
что как бы намекает на вторичное отношение (типа у нас этим попутно занимается отдел ххх) к этой задаче
Это в лучшем случае...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 17.04.2013, 12:03
#8
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
По ходу этот момент прощелкали софтописцы
Вот у меня такое же ощущение
Цитата:
Сообщение от Дима_ Посмотреть сообщение
ну для "простых" случаев, типа как в примере, еще можно, а чтоб "по хорошему" то боюсь придеться весь функционал ssget прогонять (на всякие рамки, or, and и пр).
Мой случай относительно прост, так что мне не особо критично. Главное, что я теперь знаю об этой особенности и смогу обработать как надо. А переписывать SSGET вряд ли стану, уже был опыт, хотел сообщение видеть около курсора при выборе. Больше трогать пока не хочется...
Цитата:
Сообщение от hwd Посмотреть сообщение
В свете наблюдаемых в последнее время событий, я сильно подозреваю, что их у автодеска вообще нет, не только "на внутренние языки" (скомпилировалось - и хорошо...), а роль "группы тестирования" поневоле исполняют рядовые юзеры. Полагаю, что это своего рода политика манагеров: не нужно тратить деньги на группу тестирования, а вместо этого автодеску платят пользователи и они же бесплатно тестируют.
Да, что-то в этом есть
Цитата:
Сообщение от Дима_ Посмотреть сообщение
ну в общем по крайней мере здесь из 3 десятков всевозможных специальностей (Job Function) я непосредственно выделенную линию тестирования не заметил
Интересная информация!
Do$ вне форума  
 
Непрочитано 17.04.2013, 18:02
#9
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Ничего нелогичного не вижу, может что-то пропустил????
gomer вне форума  
 
Автор темы   Непрочитано 17.04.2013, 18:08
#10
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Ну попробую объяснить логику. Идея такая: предвыбор есть и устраивает - принять его, предвыбора нет или не устраивает - дать выбрать что-то другое. Под "дать выбрать" я понимаю полноценный выбор объектов - хоть по одному, хоть рамкой, с опциями и т.д. до тех пор, пока не надоест выбирать. Вот такая простая логика, которую и не поддерживает этот случай.
Do$ вне форума  
 
Непрочитано 17.04.2013, 19:47
#11
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Теперь понятно. Для сравнения в ZWCAD такая же ситуация, а вот в Bricscad так, как хочется вам

попробуйте так
Код:
[Выделить все]
 (setq ss (cond ((ssget "_I" '((0 . "LINE"))))
               ((sssetfirst nil)
               (ssget '((0 . "LINE"))))))
gomer вне форума  
 
Непрочитано 17.04.2013, 19:49
#12
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Do$ Посмотреть сообщение
Ну да, получается, надо самому проверять предварительный выбор, и если он не устраивает, то сбрасывать его.
Похоже по другому никак
Код:
[Выделить все]
(if (not(setq ss (ssget "_I" '((0 . "LINE")))))
  (progn
    (sssetfirst)
    (setq ss(ssget '((0 . "LINE"))))
    )
  )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Предварительный выбор объектов с фильтром.

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Аттестация в Минрегионе по негосударственной экспертизе Людмила Охр Прочее. Архитектура и строительство 350 14.02.2015 17:50
Автоматический выбор объектов в последовательном порядке. Terminator637 AutoCAD 15 31.03.2010 19:54
FILTER / фильтр BM60 Справочник команд 0 08.07.2008 15:35
Выбор объектов с учетом XData (VBA) e_v_a Программирование 2 23.08.2007 13:32
Выбор объектов в VBA Бродяга Программирование 19 12.03.2007 09:33