|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
30.05.2010, 16:24 | #1 | |
функции выбора. Вспомогательная информация
Инженер ЭОМ
Москва
Регистрация: 05.03.2009
Сообщений: 215
|
||
Просмотров: 9772
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Средствами lisp'а такое не сделать. Единственный вариант - попробовать через prompt показать свое сообщение и запросить выбор, "погасив" вывод в ком.строку (cmdecho = 0, menuecho = 0). Кажется, так.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Спасибо. Наверное я плохо изложил свою мысль. Я хотел чтобы при включенном динамическом вводе высвечивалась эта надпись "Выберите коммутационное оборудование"
Код:
Код:
|
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
lisp'ом такое не сделать (хотя через ObjectARX вроде бы есть возможность изменить приглашение).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
|
||||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
Нельзя подменять выбор объектов (одного или нескольких) указаниями точек ради "красивого" приглашения. Вреда от этого будет больше. Программист обязан предоставить пользователю возможность использовать все штатные средства выбора, имеющиеся в AutoCAD. Если необходим выбор множества объектов, то специфичное приглашение достаточно вывести один раз, как показано в #4. И пусть потом повторяется штатное "Выберите объекты" - это нормальный режим работы. Как вариант, возможен цикл с entsel, т.е. с выбором объектов по одному. Иногда это даже бывает предпочтительней, так как можно сразу отбрасывать объекты недопустимых типов. Конечно, хотелось бы иметь дополнительный аргумент приглашения в ssget... Но имеем то, что имеем... |
|||
|
||||
Моя идея вот в чем: сделать выбор объектов по аналогии с выбором объектов к примеру в команде matchprop. То есть, если пользователь щелкает на примитиве - тот добавляется в набор (в цикле работает функция entsel и функция ssadd), если на пустом месте - то щелчек воспринимается как первая точка рамки (весто entsel запускается функция getcorner) и предлагается указать вторую точку. Ну и дальше - если вторая точка левее первой - рамка секущая, правее - охватывающая... Все примитивы, выбранные рамками также добавляются в набор. Заканчиваетсяя выбор нажатием Enter. При этом, можно при помощи initget задавать дополнительные опции. Все, что я описал - легко реализуемо, даже представляю, как это можно сделать. Но вот как пропускать выбираемые объекты через фильтр ssget, для меня пока задача не решенная...
|
||||
|
||||
|
||||
|
||||
С рамкой-то понятно... Вот как отдельный примитив, выбранный с помощью entsel, внести в набор с учетом фильтра? Впрочем, есть пара задумок, надо садиться писать код
Стоп, а "_B" - это как? Что это за опция? я знаю только "_W" - выбор рамкой и "_C" - секущей рамкой. |
||||
|
||||
"_B" - от BOX (проверил в AutoCAD 2008 - работает некорректно). Так что или "_W" или "_C".
|
||||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
1. Нажата ESC - значит все дальнейшие действия надо безопасно прекращать. 2. Пользователь просто "промазал" мимо примитива. Здесь ты предполагаешь ввод точки. Может быть. А может и начать ssget. Для анализа причин завершения entsel используй errno. Вот примеры: 1. Низкоуровневая функция: Код:
Код:
Код:
Код:
Код:
|
|||
|
||||
Регистрация: 21.07.2008
Луцьк
Сообщений: 179
|
sdv79,
http://www.theswamp.org/index.php?to...6261#msg246261 убрать из функции SelAtts привязку к атрибутам, плюс добавить обработку нажатости shift функцией (acet-sys-shift-down), плюс фильтры и будет что-то похожее на ssget |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Здесь и сейчас предлагаю продолжить викторину, которую начал Дима_ в этой теме (начало в посте #10), поскольку предлагаемая мной задачка попадает в рамки данной темы.
Похожие темы (это если вдруг вы решите "погрузиться", выдержка из них будет чуть ниже): Как заменить текст запроса в стандартной команде? Lisp. Квинтэссенция ssget/entsel/vla-selectOnScreen для динамического ввода. Пустой ввод при выполнении entsel. Итак, Внимание, викторина! Я утверждаю, что на лиспе можно создать функцию, которая будет вести себя в точности как стандартная функция ssget или как стандартный запрос на множественный выбор объектов большинства штатных команд, но при этом вместо неинформативного "Выберите объекты: " можно будет увидеть возле курсора любое приглашение, если включен динамический ввод. На выходе функция вернет созданный интерактивно набор. Понимаю, что само понятие викторины не подразумевает столь глобальных изысканий и столь глобальных кусков кода, чтобы полностью повторить все поведение ssget, поэтому сразу приведу соль указанных тем и нужные куски кода, а вопросом викторины станет одна хитрая функция, которую первым опубликует победитель. Наградой будет второй тур викторины, в котором я выложу код, практически полностью повторяющий поведение ssget и даже больше, но в нем есть несколько отклонений от поведения стандартной функции выбора, которые участникам второго тура предстоит определить, просто жутко любопытно, насколько глубоко пользователи используют опции при выборе объектов. И потом совместными усилиями найти хитрые способы их устранения (это по ходу будет третий тур). Идею очень хорошо описал Do$ чуть выше, в #12: Цитата:
Код:
Код:
ВНИМАНИЕ, вопрос викторины Написать "хитрую" функцию на AutoLISP, которая заменит в коде функцию (get_ss_by_win) и в результате выдаст "правильную" рамку выбора объектов: залитую синим при выборе слева направо, и зеленым - справа налево. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Предложение: Готовые функции | Apelsinov | Библиотека функций | 170 | 27.06.2010 23:51 |
Функции AutoLISP из ... DLL! | Supermax | LISP | 21 | 27.06.2010 14:18 |
FILTER / фильтр | BM60 | Справочник команд | 0 | 08.07.2008 15:35 |
Информация по работе EPC/EPCM подрядчика | Кочетков Андрей | Поиск литературы, чертежей, моделей и прочих материалов | 0 | 14.03.2008 11:22 |
Выбор примитивов в функции (command) | mmax | Программирование | 12 | 19.05.2006 20:02 |