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

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

Как сделать команду copy многоразовой???

Ответ
Поиск в этой теме
Непрочитано 21.04.2004, 13:35 #1
Как сделать команду copy многоразовой???
BAX
 
Архитектурные Фасадные Технологии
 
г. Фрязино
Регистрация: 09.02.2004
Сообщений: 8

Как сделать команду copy многоразовой??? Подскажите плиз...
__________________
Архитектурные Фасадные Технологии
Просмотров: 14749
 
Непрочитано 21.04.2004, 13:45
#2
Torino


 
Регистрация: 21.08.2003
Штаб
Сообщений: 943
<phrase 1=


Ты имеешь ввиду многоразовой по-умолчанию? Как в 2005-м Акаде?
Если да, то посади на кнопку макрос ^C^C_select;\_copy;p;;m;
Torino вне форума  
 
Автор темы   Непрочитано 21.04.2004, 14:27
#3
BAX

Архитектурные Фасадные Технологии
 
Регистрация: 09.02.2004
г. Фрязино
Сообщений: 8


Спасибо, именно это я и имел в виду =)
__________________
Архитектурные Фасадные Технологии
BAX вне форума  
 
Непрочитано 22.04.2004, 09:23
#4
Эдуард

строительство
 
Регистрация: 16.01.2004
Петербург
Сообщений: 165
<phrase 1=


Существует команда multiple которая позволяет
зациклить любую другую команду до выхода
из нее по ESC.
Эдуард вне форума  
 
Непрочитано 22.04.2004, 09:50 В 2005-м АКАДе несколько иначе сделано
#5
pmv


 
Сообщений: n/a


А именно: $M=$(if,$(eq,$(substr,$(getvar,cmdnames),1,4),grip),_copy,^C^C_copy)
 
 
Непрочитано 22.04.2004, 15:05
#6
Torino


 
Регистрация: 21.08.2003
Штаб
Сообщений: 943
<phrase 1=


Идея такая:
$M=$(if,$(eq,$(substr,$(getvar,cmdnames),1,4),grip),_copy,^C^C_copy)

Если что-то в данный момент выделено, то запускается команда _COPY.
Если ничего не выделено, то запускается команда ^C^C_COPY.

Но проблема в том, что я не знаю, как в дизеле написать последовательность команд.
Этот вопрос лучше задать Вове.
Torino вне форума  
 
Непрочитано 22.04.2004, 17:47
#7
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


>Torino
А при чем тут дизель? Аргументы дизельных выражений разделены запятыми, а в последовательностях команд используется пробел или точка с запятой. Можно просто перечислить все команды, которые нужны в цепочке.... Или я чего то не понимаю...

>All
Еще один способ зациклить команду или последовательность - звездочка в начале
Код:
К сожалению, в редких случаях не работает.
vk вне форума  
 
Непрочитано 22.04.2004, 18:52
#8
Torino


 
Регистрация: 21.08.2003
Штаб
Сообщений: 943
<phrase 1=


>>vk
Я тоже так думал и сделал вот такую кнопку:
$M=$(if,$(eq,$(substr,$(getvar,cmdnames),1,4),grip),_copy,^C^C_select;\_copy;p;;m;)

Работать, как и ожидалось, она не хочет :(
Думаю проблема в операторе if (полагаю он не переваривает несколько последовательных команд).
Может быть есть какой-нибудь оператор, объединяющий несколько команд? (типа PROGN в Лиспе)
Torino вне форума  
 
Непрочитано 23.04.2004, 13:43
#9
plaz

Проектирование обустройства нефтяных месторождений
 
Регистрация: 28.08.2003
Самара
Сообщений: 352


1. сделал комбинацию (вариант если объект уже выделен): _copy m; Посадил на кнопочку - работает, вставляю в исходный - не работает.
2. комбинация
Код:
[Выделить все]
$M=$(if,$(eq,$(substr,$(getvar,cmdnames),1,4),grip),_copy,^C^C_select;\_copy;p;;m;)
естественно не работает, а
Код:
[Выделить все]
$M=$(if,$(eq,$(substr,$(getvar,cmdnames),1,4),grip),_copy,^C^C_copy;\\m;)
работает, но позволяет выбрать только один объект

Короче фигня получается. Ну где же это Vova
[sm2600]
plaz вне форума  
 
Непрочитано 23.04.2004, 18:29
#10
plaz

Проектирование обустройства нефтяных месторождений
 
Регистрация: 28.08.2003
Самара
Сообщений: 352


А как этот макрос выглядит в Acad2005 :?:
plaz вне форума  
 
Непрочитано 23.04.2004, 18:42
#11
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


фигню написал, поэтому убрал
vk вне форума  
 
Непрочитано 24.04.2004, 07:26
#12
Vova

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 Это глава из моей книги, которую, как будто,на нашем форуме не очень читают, хотя я получаю хорошие отзывы. А книга, между прочим, учит логически мыслить
Vova вне форума  
 
Непрочитано 29.04.2004, 04:33
#13
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Ну что, нет больше желающих исследовать этот дизельный макрос? Хотелось бы мои предположения либо подтвердить, или опровергнуть.
Vova вне форума  
 
Непрочитано 13.05.2004, 15:15
#14
plaz

Проектирование обустройства нефтяных месторождений
 
Регистрация: 28.08.2003
Самара
Сообщений: 352


Так какже , все таки, этот макрос выглядит в Acad2005 :?: :?: :?:
plaz вне форума  
 
Непрочитано 14.05.2004, 04:03
#15
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Макрос Copy в 2005 такой-же $M=$(if,$(eq,$(substr,$(getvar,cmdnames),1,4),grip),_copy,^C^C_copy)
Vova вне форума  
 
Непрочитано 14.05.2004, 10:16
#16
plaz

Проектирование обустройства нефтяных месторождений
 
Регистрация: 28.08.2003
Самара
Сообщений: 352


Так в чем же разница? Почему они ведут себя по разному?
plaz вне форума  
 
Непрочитано 20.05.2004, 11:22
#17
Вован


 
Сообщений: n/a


По моему копирование зацикливается гораздо проще
$M=$(if,$(eq,$(substr,$(getvar,cmdnames),1,4),grip),_copy,^C^C_copy) _m
(т.е. к стандартной команде в конце подписывается _m)
только объект нада выделить до того как нажмешь на кнпку
 
 
Непрочитано 26.07.2004, 19:45
#18
DVAD


 
Сообщений: n/a


я думаю в 2005 появилась эта самая grip и теперь все работает, хотя ндо проверить. 2005-го у меня нет
 
 
Непрочитано 27.07.2004, 04:12
#19
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Вован> Хорошо не получается: 1. Для одноразового копирования нет выбора рамкой. 2. После выбора объектов (поштучно) надо дважды щелкнуть ПК (чтобы пропустить запрос на "М"). 3. Для множественного копирования надо предварительно выделять. Не слишком ли много условностей? Надо выбрать для себя, чем вы пользуетесь чаще-многоразовой или одноразовой Copy, и такую кнопку себе оставить. Вот если бы кто-то разгадал, зачем в команде DIESEL, если и без него получается...
Vova вне форума  
 
Непрочитано 27.07.2004, 08:57
#20
Alaspher


 
Сообщений: n/a


Насчёт дизеля не знаю, но, если интересует результат, может быть(?) вот так обойтись:
Код:
[Выделить все]
^C^C^P(ssget)(vl-cmdf "_.copy" "_p" "" "_m")(while (not (zerop (getvar "cmdactive")))(vl-cmdf pause))(princ)
 
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как сделать команду copy многоразовой???