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

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

Как переопределить команду Mirror?

Ответ
Поиск в этой теме
Непрочитано 15.09.2005, 14:51 #1
Как переопределить команду Mirror?
Styx
 
проектировщик ОВ и ТМ
 
Ростов-на-Дону
Регистрация: 16.08.2005
Сообщений: 106

При работе с этой командой появляется вопрос: "Erase source objects" и по умолчанию стоит "N".Как сделать,чтобы по умолчанию стояло "Y"?
Заранее спасибо.
Просмотров: 4893
 
Непрочитано 15.09.2005, 15:19
#2
AY

webcad.pro
 
Регистрация: 06.01.2005
Московская обл.
Сообщений: 501


Либо макрос на кнопку
Код:
[Выделить все]
^C^C_select;_auto;\_mirror;_p;;\\_y;
либо тоже самое как команда через лисп
Код:
[Выделить все]
(DEFUN c:mirror2 ()
(command "_select" "_auto" pause "_mirror" "_p"  "" pause pause "_y")
(princ)
)
AY вне форума  
 
Автор темы   Непрочитано 15.09.2005, 16:12
#3
Styx

проектировщик ОВ и ТМ
 
Регистрация: 16.08.2005
Ростов-на-Дону
Сообщений: 106


Поставил макрос на существующyю кнопку. При первом нажатии выполняет вообще не спрашивая,но исходный объект валит нафиг, при повторном нажатии на правую кнопку (повтор последней команды) команда выполняется в обычном режиме, т.е по умолчанию "N".
Styx вне форума  
 
Непрочитано 15.09.2005, 17:47
#4
Геннадий aka PG

Машиностроение, Проектирование
 
Регистрация: 15.09.2003
Москва
Сообщений: 1,113
<phrase 1=


Вешай на кнопку лисп выполняется по ЕНТЕРу последняя команда и только, поэтому макрос надо загнать в скобки - сделать как единую команду
__________________
С уважением,
Геннадий aka PG
Геннадий aka PG вне форума  
 
Непрочитано 15.09.2005, 18:08
#5
AY

webcad.pro
 
Регистрация: 06.01.2005
Московская обл.
Сообщений: 501


Вот вариант с опциям, о которых вы спрашивали. Он, правда, немного "шумный"
Код:
[Выделить все]
(DEFUN c:mirror2 (/ a)
(initget "_Yes _No")
(command "_select" "_auto" pause "_mirror" "_p"  "" pause pause
         (if (setq a (getkword "\nDelete source objects? [Yes/No] <Y>:"))
             a
             "_Yes"
         )) 
(princ) 
);
Если не знаете как обращаться с лиспом - повесьте как макрос на кнопку, только запишите весь код в одну строку без переносов и добавьте в начало ^C^C а в конец ;mirror2;

ps исправился - добавил в первую троку кода / a
AY вне форума  
 
Непрочитано 15.09.2005, 18:14
#6
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,917
<phrase 1=


Попробуй такой макрос, будет повторять покеда не прервешь ескейпом
Код:
[Выделить все]
*^C^C_Select;\_mirror;P;;\\_y;
В. Свет, спасибо ему огромное, большие возможности заложены в макросах кнопок, его книга мне глаза открыла :shock:
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 16.09.2005, 05:57
#7
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Всем привет!

Осталось только заменить встроенную команду на
переопределенную и будет полное счастье :-)

Для этого есть команды _undefine (НЕТКОМ) и ее
антипод _redefine (ДАКОМ)

Тогда и менюшки переделывать не придется...
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Автор темы   Непрочитано 16.09.2005, 10:23
#8
Styx

проектировщик ОВ и ТМ
 
Регистрация: 16.08.2005
Ростов-на-Дону
Сообщений: 106


Всем большое спасибо!
Немножко о том,что получается: Макросы работают безусловно, т.е исходный объект eras'ится без всяких "Y"/"N".Это все-таки не совсем комфортно. А вот лисп с вариантами - это как раз то,что нужно. Загрузил его в Startup Suite,а в макросе на кнопке заменил mirror на mirror2.
Единственное (не считайте это хамством ) - если объект выделен, то при запуске новой команды выделение убирается,но команда не работает. Нужно сначала выбрать команду (нажать кнопку), и только затем объект.

Еще раз большое спасибо.
Styx вне форума  
 
Непрочитано 16.09.2005, 10:39
#9
AY

webcad.pro
 
Регистрация: 06.01.2005
Московская обл.
Сообщений: 501


Не торопитесь благодарить, проверьте работают ли опции Y/N. Похоже я немного намудрил. Вроде вчера работало, а сегодня нет

Проверю в русской версии, выложу исправление если само собой не заработает.
AY вне форума  
 
Автор темы   Непрочитано 16.09.2005, 11:11
#10
Styx

проектировщик ОВ и ТМ
 
Регистрация: 16.08.2005
Ростов-на-Дону
Сообщений: 106


Мдя... Не работают. Пока меня устраивает, но будет здорово,если заработают.
Styx вне форума  
 
Непрочитано 16.09.2005, 11:28
#11
Кулик Алексей aka kpblc
Moderator

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


> AY : замени строку (initget "_Yes _No") на (initget "Да Нет _ Yes No"). Возвращаться будет в любом варианте Yes или No. Тогда в (command) надо будет писать... В общем, вот твой код:
Код:
[Выделить все]
(DEFUN c:mirror2 (/ a) 
(initget "Да Нет _ Yes No") 
(command "_.select" "_auto" pause "_.mirror" "_p"  "" pause pause 
         (if (setq a (getkword "\nDelete source objects? [Yes/No] <Y>:")) 
             (strcat "_" a)
             "_Yes" 
         )) 
(princ) 
);
---
Добавлено (и исправлено):
P.S. Для гарантии работы желательно при вызове команд использовать не "_", а "_."
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 16.09.2005, 11:38
#12
Styx

проектировщик ОВ и ТМ
 
Регистрация: 16.08.2005
Ростов-на-Дону
Сообщений: 106


Я конечно дико извиняюсь, но таки опять не работает.
Styx вне форума  
 
Непрочитано 16.09.2005, 12:35
#13
AY

webcad.pro
 
Регистрация: 06.01.2005
Московская обл.
Сообщений: 501


>>kpblc
А зачем мне "Да Нет" если я их не использую это может вести к ошибке если юзер нажмет в руcской раскладке Н думая, что нажимает Y в английской и функция вернет _No , а в остальном ты прав, конечно.

Я вот пробовал сделать, что б все запросы были в таком же виде как в mirror получилось не совсем идентично.

Код:
[Выделить все]
(DEFUN c:mirror2 (/ doc old er)
(vl-load-com)
(setq doc (vla-get-activedocument (vlax-get-acad-object))
      old (getvar "cmdecho")
         ) 
        (vla-startundomark doc)

    (setq er
       (vl-catch-all-apply
             '(lambda ()
 (initget "Yes No")
             (setvar "cmdecho" 0)     
  (command  "_.mirror" (ssget))
                  (terpri)
(setvar "cmdecho" 1)
           (command   ""  pause )
(setvar "cmdecho" 0)
     (command pause
         (strcat "_" (cond (
(getkword "\nDelete source objects? [Yes/No] <Y>:"))
               (t "Yes")
         )))
(setvar "cmdecho" 1)
              ) ;_ lambda
             ) ;_ vl-catch-all-apply
    ) ;_ setq
    (if (vl-catch-all-error-p er)
        (princ (vl-catch-all-error-message er))
    ) ;_ if
(vla-endundomark doc)
(if (= (getvar "cmdactive") 1)
    (command)
    )
    (setvar "cmdecho" old)
(princ) 
)
AY вне форума  
 
Непрочитано 16.09.2005, 12:42
#14
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Привет!

Попробуй

(initget "Да Yes Нет No _ Yes Yes No No")

Где-то как-то что-то подобное обсуждалось, забыл только, где и что.
Так что играться надо с (initget), возможно, и мой вариант
окажется не универсальным - так, слепил "на скорую руку"...
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 16.09.2005, 13:34
#15
AY

webcad.pro
 
Регистрация: 06.01.2005
Московская обл.
Сообщений: 501


>>===AAA===
Это не решает проблему все равно если нажимать Y при включенной руской раскладке (а такое будет сучаться гораздо чаще, чем можно подумать) функция будет возвращать _No. Если подходить серьезно то, наверное, надо писать отдельно вызовы "удалить да/нет" -для русской локализации и отдельно английский вариант и запускать необходимый вариант в соответствии с локализацией.
AY вне форума  
 
Непрочитано 16.09.2005, 13:52
#16
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Привет!

Так-то оно так, но во-первых, на экране отражается
символ, который вводит пользователь, а во-вторых,
зачем ему давить "Y" (да еще и на русской раскладке!),
если "Y" стоит по-умолчанию и достаточно нажать Enter?

Хотя, в принципе, ты прав - программа _может_ отработать
не так, как об этом _подумал_ пользователь :-)

В любом случае - это не смертельно, т.к. есть команда "Отмени".

А юзеров надо воспитывать, а не пытаться додумывать
все за них :-)))
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 20.09.2005, 13:57
#17
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,917
<phrase 1=


В конце концов создай две кнопки
удаляет
Код:
[Выделить все]
*^C^C_Select;\_mirror;P;;\\_y;
не удаляет
Код:
[Выделить все]
*^C^C_Select;\_mirror;P;;\\_n;
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Автор темы   Непрочитано 20.09.2005, 15:21
#18
Styx

проектировщик ОВ и ТМ
 
Регистрация: 16.08.2005
Ростов-на-Дону
Сообщений: 106


$M=$(if,$(eq,$(substr,$(getvar,cmdnames),1,4),GRIP),_mirror,^C^C_mirror)

Вот это макрос на кнопке MIRROR в 2006 Каде. Я только начинаю учить функции лиспа, поэтому еще не все понимаю. Может здесь зарыта собака?

А две кнопки - хорошо, только на 6-м часу работы в каде уже COPY с MOVE путаешь, не то что 2 MIRRORa.
Styx вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как переопределить команду Mirror?