|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Как сделать команду copy многоразовой???
Архитектурные Фасадные Технологии
г. Фрязино
Регистрация: 09.02.2004
Сообщений: 8
|
||
Просмотров: 14749
|
|
||||
Регистрация: 21.08.2003
Штаб
Сообщений: 943
![]() |
Идея такая:
$M=$(if,$(eq,$(substr,$(getvar,cmdnames),1,4),grip),_copy,^C^C_copy) Если что-то в данный момент выделено, то запускается команда _COPY. Если ничего не выделено, то запускается команда ^C^C_COPY. Но проблема в том, что я не знаю, как в дизеле написать последовательность команд. Этот вопрос лучше задать Вове. |
|||
![]() |
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
![]() |
>Torino
А при чем тут дизель? Аргументы дизельных выражений разделены запятыми, а в последовательностях команд используется пробел или точка с запятой. Можно просто перечислить все команды, которые нужны в цепочке.... Или я чего то не понимаю... >All Еще один способ зациклить команду или последовательность - звездочка в начале Код:
|
|||
![]() |
|
||||
Регистрация: 21.08.2003
Штаб
Сообщений: 943
![]() |
>>vk
Я тоже так думал и сделал вот такую кнопку: $M=$(if,$(eq,$(substr,$(getvar,cmdnames),1,4),grip),_copy,^C^C_select;\_copy;p;;m;) Работать, как и ожидалось, она не хочет :( Думаю проблема в операторе if (полагаю он не переваривает несколько последовательных команд). Может быть есть какой-нибудь оператор, объединяющий несколько команд? (типа PROGN в Лиспе) |
|||
![]() |
|
||||
Проектирование обустройства нефтяных месторождений Регистрация: 28.08.2003
Самара
Сообщений: 352
|
1. сделал комбинацию (вариант если объект уже выделен): _copy m; Посадил на кнопочку - работает, вставляю в исходный - не работает.
2. комбинация Код:
Код:
Короче фигня получается. Ну где же это Vova [sm2600] |
|||
![]() |
|
||||
Engineer Регистрация: 05.09.2003
New-York
Сообщений: 10,288
|
Разобраться в хитросплетениях языка DIESEL может только программист, коим я не являюсь. Тот, кто обратит свой взор в сторону DIESEL, со временем получит преимущество перед чистым лисповиком. Это произойдет когда широкое распространение получит дешевый LT. Я же пользователь и мои знания программирования поверхностны. Поэтому и попытки исследования этого вопроса скорее дилетантские, чем профессиональные.
Слово "Grip" в макросе наводит на мысль о зависимости исполняемой команды от предварительного выделения об-екта грипсами (ручками). Но быстро выясняется, что это не влияет на работы команды Copy, а также команд Move, Rotate, Scale и Stretch, макросы которых похожи. Только переменная Pickfirst влияет на это. Значит, цель макроса другая?. Давайте препарируем выражение DIESEL из макроса, начиная с внутренних скобок. $(getvar,cmdnames) выдает имена текущих команд. А ими может быть в том числе и прозрачная команда. (Но когда запускается макрос может ли работать какая-нибудь команда? Хотя ^C^C не стоит в начале макроса) $(substr,$(getvar,cmdnames),1,4) Эта функция возвращает часть текстовой строки, в данном случае часть имени текущей команды, причем строка состоит из 4-х букв, начиная с первой. $(eq,$(substr,$(getvar,cmdnames),1,4),grip) Функция Eq, по-видимому происходит от Equal, равный. Она сравнивает 4-х буквенное слово, вытащенное из имени команды в предыдущем действии, со словом «Grip» (И где-же она пытается найти такое слово?). Если такое совпадение произошло, функция выдает 1, а если нет, то 0. И последняя функцие If (Если) За ней стоят два варианта команды _Copy и ^C^C_Copy. Если функция If получает 1, должна сработать первая команда, а если 0, то вторая. Чтобы убедиться в правильности этой логики я сделал следующее: Вместо Copy подставил Erase, сначала до ^C^C, а потом после. И убедился, что всегда исполняется вторая команда. И даже если вместо команды подставить какой-то сложный работающий макрос, он и исполниться. Как будто совсем нет здесь выражения DIESEL!Значит, если логика верна, функция If всегда выдает 0, то есть не находит действующей на данный момент команды, первые 4 буквы имени которой есть Grip. При каких обстоятельствах такая команда может появиться? А может, моя логика неверна... Напоминаю для исследователей, что проверить работу выражений DIESEL можно через Modemacro. А с чем ее кушать, почитайте здесь http://www.cad.dp.ua/stats/content.p...nt=diesel.html Это глава из моей книги, которую, как будто,на нашем форуме не очень читают, хотя я получаю хорошие отзывы. А книга, между прочим, учит логически мыслить |
|||
![]() |
|
||||
Engineer Регистрация: 05.09.2003
New-York
Сообщений: 10,288
|
Вован> Хорошо не получается: 1. Для одноразового копирования нет выбора рамкой. 2. После выбора объектов (поштучно) надо дважды щелкнуть ПК (чтобы пропустить запрос на "М"). 3. Для множественного копирования надо предварительно выделять. Не слишком ли много условностей? Надо выбрать для себя, чем вы пользуетесь чаще-многоразовой или одноразовой Copy, и такую кнопку себе оставить. Вот если бы кто-то разгадал, зачем в команде DIESEL, если и без него получается...
|
|||
![]() |