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

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

Команда SELECT и предварительный выбор

Ответ
Поиск в этой теме
Непрочитано 09.09.2004, 09:57
Команда SELECT и предварительный выбор
Admin
Administrator
 
Регистрация: 21.08.2003
Сообщений: 4,466

Хочу с помощью SELECT выбрать набор объектов для дальнейшей работы с ними, например слой поменять.

Захожу выбираю секущей, после второго предложения жму ПК или Ентер. По логике выбор должен сохраниться. Однако все возвращается в исходную.

Это только у меня так или так задумано было?

Код:
[Выделить все]
Command: SELECT

Select objects: f

First fence point:
Specify endpoint of line or [Undo]:
Specify endpoint of line or [Undo]:
47 found

Select objects:

Command:
Просмотров: 13997
 
Непрочитано 19.02.2010, 11:30
#21
Bonifatcu

РЗиА
 
Регистрация: 03.02.2010
Белгород
Сообщений: 14


Внесу свою ложку... Долго пытался "победить" предварительный выбор. В функционировании обычных команд, при включенном предварительном выборе, есть два противоположных варианта:
- сначала нажимаем кнопку, затем выбираем объекты;
- сначала выбираем объекты, затем нажимаем кнопку.
При отключенном предварительном выборе, при нажатии кнопки выбранные до этого объекты "сбрасываются", аналогично команде pselect. ИМХО не универсально, да и большинство пользователей работают с включенным предварительным выбором.
А при составлении своих макросов возникают проблемы, для примера макрос (сначала перемещает объекты, потом их же копирует):
1.
Код:
[Выделить все]
^C^C_move;\\;\\_copy;_p;;
Минусы: после команды "_move" выбираем объекты рамкой "\\", но стоит ошибиться в выборе и все заново; вторая проблема - если выбрать объекты заранее и потом нажать кнопку команда срабатывает неверно (предварительный выбор!).
2.
Код:
[Выделить все]
^C^C_select;\_move;_p;;\\_copy;_p;;
Используя "_select" решаем проблему с возможным ошибочным выбором объектов - можно сколько угодно добавлять, исключать, обводить объекты, но остается проблема с предварительным выбором.
3.
Код:
[Выделить все]
^C^C_select;$M=$(if,$(getvar,cmdactive),\,)_move;_p;;\\_copy;_p;;
DIESEL решает проблему, теперь можно процесс выбора объектов и нажатия кнопки выполнять в любой последовательности, с включенным предварительным выбором.
$M=$(if,$(getvar,cmdactive),\,) - проверяется, если после нажатия кнопки активна команда (здесь это "_select"), то пользователю дается возможность сделать выбор объектов "\", если активной команды нет, значит объекты были выбраны предварительно и можно продолжать выполнение макроса.
__________________
Лучше день потерять, потом за пять минут долететь!
Bonifatcu вне форума  
 
Непрочитано 19.02.2010, 13:39
#22
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


Цитата:
Сообщение от Bonifatcu Посмотреть сообщение
есть два противоположных варианта
Регулируемые системной переменной pickfirst.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.02.2010, 22:53
#23
Bonifatcu

РЗиА
 
Регистрация: 03.02.2010
Белгород
Сообщений: 14


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Регулируемые системной переменной pickfirst.
Не, оба варианта возможны при значении pickfirst = 1 (Предварительный выбор включен). Т.е. выбираем объекты жмем кнопочку, например, копировать и собственно копируем; или сначала нажимаем кнопочку копировать, потом выбираем объекты, и копируем.
При pickfirst = 0 возможно только второе.
Не совсем регулирование, скорее косвенное влияние
__________________
Лучше день потерять, потом за пять минут долететь!
Bonifatcu вне форума  
 
Непрочитано 20.02.2010, 05:56
#24
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Именно регулирование, блин. При чем тут DIESEL? Можно и AutoLisp приплести.
Profan вне форума  
 
Непрочитано 20.02.2010, 14:59
#25
Bonifatcu

РЗиА
 
Регистрация: 03.02.2010
Белгород
Сообщений: 14


Цитата:
Сообщение от Profan Посмотреть сообщение
При чем тут DIESEL?
Вроде бы подробно расписал... Попробуйте приведенные мной макросы вставлять в кнопки, поймете проблему. Попробуйте последний макрос с DIESEL. Если можно обойтись без него буду рад узнать решение.
__________________
Лучше день потерять, потом за пять минут долететь!
Bonifatcu вне форума  
 
Непрочитано 20.02.2010, 15:38
#26
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Ты не понял назначение переменной pickfirst. А DIESEL - это другая история. Этот язык существовал еще до pickfirst.
Profan вне форума  
 
Непрочитано 21.02.2010, 18:26
#27
Bonifatcu

РЗиА
 
Регистрация: 03.02.2010
Белгород
Сообщений: 14


Цитата:
Сообщение от Profan Посмотреть сообщение
Ты не понял назначение переменной pickfirst
Значение pickfirst = 1 дает возможность выбрать объекты до запуска команды. Что-то еще..?
__________________
Лучше день потерять, потом за пять минут долететь!
Bonifatcu вне форума  
 
Непрочитано 21.02.2010, 19:25
#28
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Установи pickfirst в 0, выдели объект и попробуй стереть его клавишей DEL...
Выдели объект и посмотри, как изменилось отображение текущего слоя в выпадающем списке слоев...
А DIESEL и AutoLisp, и ObjectARX призваны решать всякие задачи, но использовать их вместо простого переназначения системной переменной как-то неразумно. Другое дело - версии LT, в которых нет инструментов программирования, - там DIESEL вполне к месту.
Profan вне форума  
 
Непрочитано 24.02.2010, 23:13
#29
Bonifatcu

РЗиА
 
Регистрация: 03.02.2010
Белгород
Сообщений: 14


Чесслово, напоминает разговор слепого с глухим...
Как я понимаю макросы не "пробовали"!?
Стандартные кнопки (переместить, копировать и т.д.) работают в двух "режимах":
1. Сначала нажимаем кнопку потом выбираем объекты;
2. Сначала выбираем объекты потом нажимаем кнопку (само собой, предварительный выбор включен).
Рукописные (чуть более сложные) макросы могут работать только в одном из "режимов". Пример: ^C^C_copy;\;@;\ - работает по первому варианту, и НИКАКИМ образом изменяя переменную pickfirst НЕВОЗМОЖНО заставить сработать команду по второму варианту! Редактируем: ^C^C_select;$M=$(if,$(getvar,cmdactive),\,)_copy;_p;;@;\ - работают оба, одновременно!
Так что приведенное выражение DIESEL и
Цитата:
Сообщение от Profan Посмотреть сообщение
простого переназначения системной переменной
никоим образом не связаны!
__________________
Лучше день потерять, потом за пять минут долететь!
Bonifatcu вне форума  
 
Непрочитано 25.02.2010, 00:32
#30
Chapter

Инженер-проектировщик автомобильных дорог
 
Регистрация: 21.10.2009
Южно-Сахалинск
Сообщений: 245
<phrase 1=


Цитата:
Сообщение от Bonifatcu Посмотреть сообщение
никоим образом не связаны!
Чувак ты сделал что то что работает независимо от значения pickfirst) Я правильно тебя понял?) Если тебя удовлетворяет результат которого ты достиг, то в принципе что ещё тебе нужно?

Offtop:
Мой любимый смайл
Chapter вне форума  
 
Непрочитано 25.02.2010, 06:19
#31
Profan


 
Регистрация: 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.
Profan вне форума  
 
Непрочитано 26.02.2010, 10:02
#32
Bonifatcu

РЗиА
 
Регистрация: 03.02.2010
Белгород
Сообщений: 14


Цитата:
Сообщение от Chapter Посмотреть сообщение
работает независимо от значения pickfirst) Я правильно тебя понял?
Нет, при значении pickfirst = 0, DIESEL выражение $M=$(if,$(getvar,cmdactive),\,) бессмысленно.
Цитата:
Сообщение от Chapter Посмотреть сообщение
то в принципе что ещё тебе нужно?
Дык вот пытаемся выяснить с Profan, что получилось и для чего

Для Profan
Цитата:
Макрос работает, но в качестве базовой точки выбралось черт знает что
Звиняйте, писал после тяжелого трудового, первое что в голову пришло, потому и получилось кривовато и не обкатанно, но! ...посмотрели вы все таки мой (хоть и "кривоватый") макрос и счас мы до истины доберемся, я думаю...
Цитата:
Первый макрос ^C^C_copy;\;@;\ работает так, как и следовало ожидать: если объект выбран заранее, то макрос не работает. А почему? А потому, что предварительный выбор не предоставляет команде "_copy" ("копировать") информацию о базовой точке и параметр @ теряет смысл.
Вот! Вот она соль, суть проблемы, для этого и DIESEL выражение $M=$(if,$(getvar,cmdactive),\,) и больше не для чего!
В приведенном мной макросе "мешает" параметр @, если взять другой макрос будет "мешать" другой параметр. Т.е. (хотел написать невозможно) у меня не получилось написать универсальный макрос который бы работал и в случае когда объекты выбраны заранее и когда сначала нажата кнопка а потом выбраны объекты.
На сей раз пример из книги В.Свет "Язык макрокоманд и создание кнопок".
^C^C_select;\_move;_p;;\\_rotate;_p;;@;\ - как и в случае с моим примером,
Цитата:
если объекты выбраны заранее, то макрос не работает
Здесь "все портит" \ после _select;
Перепишем макрос:
^C^C_select;_move;_p;;\\_rotate;_p;;@;\ - теперь все работает ТОЛЬКО если объекты выбраны заранее.
Создавать две кнопки для каждого случая? Чуть дополним макрос
^C^C_select;$M=$(if,$(getvar,cmdactive),\,)_move;_p;;\\_rotate;_p;;@;\ - теперь все работает с одной кнопки!
__________________
Лучше день потерять, потом за пять минут долететь!

Последний раз редактировалось Bonifatcu, 26.02.2010 в 10:54.
Bonifatcu вне форума  
 
Непрочитано 03.03.2014, 15:05
#33
pentaone


 
Регистрация: 10.05.2013
Сообщений: 41


Добрый день! Возникла проблема следующего рода:
Ранее при выборе объектов командой Выбрать(Select) независимо от режима выбора и нажатии пкм(Enter) на выбранных объектах появлялись маркеры в характерных точках.
Сейчас заметил, что при работе данной команды после выбора объектов и нажатии на подтверждение пкм(Enter) командная строка информирует о количестве выбранных объектов и действие команды прекращается, т.е. маркеры не появляются.
Скорее всего за это отвечает какая нибудь переменная, но какая?
pentaone вне форума  
 
Непрочитано 03.03.2014, 15:09
#34
Bull

Конструктор по сути (машиностроитель)
 
Регистрация: 10.10.2005
Набережные Челны (это где КамАЗ)
Сообщений: 11,391


тут
Изображения
Тип файла: jpg Снимок.JPG (100.5 Кб, 135 просмотров)
__________________
Век живи, век учись - ...
Bull вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Команда SELECT и предварительный выбор