Реклама i
|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
РЗиА Регистрация: 03.02.2010
Белгород
Сообщений: 14
|
Внесу свою ложку... Долго пытался "победить" предварительный выбор. В функционировании обычных команд, при включенном предварительном выборе, есть два противоположных варианта:
- сначала нажимаем кнопку, затем выбираем объекты; - сначала выбираем объекты, затем нажимаем кнопку. При отключенном предварительном выборе, при нажатии кнопки выбранные до этого объекты "сбрасываются", аналогично команде pselect. ИМХО не универсально, да и большинство пользователей работают с включенным предварительным выбором. А при составлении своих макросов возникают проблемы, для примера макрос (сначала перемещает объекты, потом их же копирует): 1. Код:
2. Код:
3. Код:
$M=$(if,$(getvar,cmdactive),\,) - проверяется, если после нажатия кнопки активна команда (здесь это "_select"), то пользователю дается возможность сделать выбор объектов "\", если активной команды нет, значит объекты были выбраны предварительно и можно продолжать выполнение макроса.
__________________
Лучше день потерять, потом за пять минут долететь! |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431
|
Регулируемые системной переменной pickfirst.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
РЗиА Регистрация: 03.02.2010
Белгород
Сообщений: 14
|
Не, оба варианта возможны при значении pickfirst = 1 (Предварительный выбор включен). Т.е. выбираем объекты жмем кнопочку, например, копировать и собственно копируем; или сначала нажимаем кнопочку копировать, потом выбираем объекты, и копируем.
При pickfirst = 0 возможно только второе. Не совсем регулирование, скорее косвенное влияние ![]()
__________________
Лучше день потерять, потом за пять минут долететь! |
|||
![]() |
|
||||
РЗиА Регистрация: 03.02.2010
Белгород
Сообщений: 14
|
Вроде бы подробно расписал... Попробуйте приведенные мной макросы вставлять в кнопки, поймете проблему. Попробуйте последний макрос с DIESEL. Если можно обойтись без него буду рад узнать решение.
![]()
__________________
Лучше день потерять, потом за пять минут долететь! |
|||
![]() |
|
||||
РЗиА Регистрация: 03.02.2010
Белгород
Сообщений: 14
|
![]()
__________________
Лучше день потерять, потом за пять минут долететь! |
|||
![]() |
|
||||
Регистрация: 25.12.2005
Москва
Сообщений: 13,627
|
Установи pickfirst в 0, выдели объект и попробуй стереть его клавишей DEL...
Выдели объект и посмотри, как изменилось отображение текущего слоя в выпадающем списке слоев... А DIESEL и AutoLisp, и ObjectARX призваны решать всякие задачи, но использовать их вместо простого переназначения системной переменной как-то неразумно. Другое дело - версии LT, в которых нет инструментов программирования, - там DIESEL вполне к месту. |
|||
![]() |
|
||||
РЗиА Регистрация: 03.02.2010
Белгород
Сообщений: 14
|
Чесслово, напоминает разговор слепого с глухим...
Как я понимаю макросы не "пробовали"!? Стандартные кнопки (переместить, копировать и т.д.) работают в двух "режимах": 1. Сначала нажимаем кнопку потом выбираем объекты; 2. Сначала выбираем объекты потом нажимаем кнопку (само собой, предварительный выбор включен). Рукописные (чуть более сложные) макросы могут работать только в одном из "режимов". Пример: ^C^C_copy;\;@;\ - работает по первому варианту, и НИКАКИМ образом изменяя переменную pickfirst НЕВОЗМОЖНО заставить сработать команду по второму варианту! Редактируем: ^C^C_select;$M=$(if,$(getvar,cmdactive),\,)_copy;_p;;@;\ - работают оба, одновременно! Так что приведенное выражение DIESEL и никоим образом не связаны! ![]()
__________________
Лучше день потерять, потом за пять минут долететь! |
|||
![]() |
|
||||
Инженер-проектировщик автомобильных дорог Регистрация: 21.10.2009
Южно-Сахалинск
Сообщений: 245
![]() |
|
|||
![]() |
|
||||
Регистрация: 25.12.2005
Москва
Сообщений: 13,627
|
Для Bonifatcu
Да хрен с ними, с макросами, я ими перестал баловаться еще 17 лет назад, когда перешел на AutoLisp. Ты пытаешься доказать, что в переменной pickfirst нет никакого смысла, раз ее можно обойти программированием? Однако, посмотрю, все-таки, твои макросы.Первый макрос ^C^C_copy;\;@;\ работает так, как и следовало ожидать: если объект выбран заранее, то макрос не работает. А почему? А потому, что предварительный выбор не предоставляет команде "_copy" ("копировать") информацию о базовой точке и параметр @ теряет смысл. По той же причине не работает и макрос ^C^C_select;\;_copy;_p;;@;\. Более того, этот макрос вообще не работает. Теперь разберем макрос ^C^C_select;$M=$(if,$(getvar,cmdactive),\,)_copy;_ p;;@;\ Прежде всего уберем пробел перед p 1. pickfirst = 1. Предварительного выбора нет. Макрос работает так, как и хотелось. Теперь выберем предварительно объекты. Макрос работает, но в качестве базовой точки выбралось черт знает что, особенно, если перед применением этого макроса выполнялась какая-нибудь команда отрисовки. Вспомним, что "@" обозначает координаты последней указанной точки. Как в этих условиях точно привязать копируемые объекты? 2. pickfirst = 0. Предварительного выбора нет. В новом чертеже нарисуем прямоугольник и выполним макрос. Сработал, как хотелось. Теперь выполним макрос уже для двух (или более) объектов. Опять видим, что базовая точка стала неопределенной. Выберем предварительно объекты и попробуем выполнить макрос. Макрос не работает с предварительным выбором, предлагает выбрать объекты. Более того, не работает и клавиша Delete при попытке стереть выбранные объекты. Макросы тестировались на AuoCAD 2005 и 2010. Последний раз редактировалось Profan, 26.02.2010 в 10:09. |
|||
![]() |
|
||||
РЗиА Регистрация: 03.02.2010
Белгород
Сообщений: 14
|
Нет, при значении pickfirst = 0, DIESEL выражение $M=$(if,$(getvar,cmdactive),\,) бессмысленно.
Дык вот пытаемся выяснить с Profan, что получилось и для чего ![]() Для Profan Цитата:
Цитата:
В приведенном мной макросе "мешает" параметр @, если взять другой макрос будет "мешать" другой параметр. Т.е. (хотел написать невозможно) у меня не получилось написать универсальный макрос который бы работал и в случае когда объекты выбраны заранее и когда сначала нажата кнопка а потом выбраны объекты. На сей раз пример из книги В.Свет "Язык макрокоманд и создание кнопок". ![]() ^C^C_select;\_move;_p;;\\_rotate;_p;;@;\ - как и в случае с моим примером, Цитата:
Перепишем макрос: ^C^C_select;_move;_p;;\\_rotate;_p;;@;\ - теперь все работает ТОЛЬКО если объекты выбраны заранее. Создавать две кнопки для каждого случая? Чуть дополним макрос ^C^C_select;$M=$(if,$(getvar,cmdactive),\,)_move;_p;;\\_rotate;_p;;@;\ - теперь все работает с одной кнопки!
__________________
Лучше день потерять, потом за пять минут долететь! Последний раз редактировалось Bonifatcu, 26.02.2010 в 10:54. |
|||
![]() |
|
||||
Регистрация: 10.05.2013
Сообщений: 41
|
Добрый день! Возникла проблема следующего рода:
Ранее при выборе объектов командой Выбрать(Select) независимо от режима выбора и нажатии пкм(Enter) на выбранных объектах появлялись маркеры в характерных точках. Сейчас заметил, что при работе данной команды после выбора объектов и нажатии на подтверждение пкм(Enter) командная строка информирует о количестве выбранных объектов и действие команды прекращается, т.е. маркеры не появляются. Скорее всего за это отвечает какая нибудь переменная, но какая? |
|||
![]() |