Тема: Почему не работает макрос
^C^C_fillet;_r;0; - так работает
*^C^C_fillet;_r;0;\\ - так не хочет, останавливается
на подтверждении радиуса и не запрашивает объекты.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → Настройка меню и DIESEL → Почему не работает макрос
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
^C^C_fillet;_r;0; - так работает
*^C^C_fillet;_r;0;\\ - так не хочет, останавливается
на подтверждении радиуса и не запрашивает объекты.
Сделай так *^C^Cfiletrad;0;_fillet;//
Написал и вижу, что ошибся, надо было обратные косые черты вместо прямых. Хотел-было исправить, да решил проверить. И, оказалось, работает! (2002) Как-бы против классики (а кто классик? хе-хе)
> Vova
1.filletrad пишется с 2-мя f.
2. В AutoCAD 2005 макрос
*^C^C_filletrad;0;_fillet;//
не работает. Работает в таком виде:
*^C^C_filletrad;0;_fillet;\\
Да, промахнулся со второй буквой F, спешил, когда печатал. Но все работает от 02 до 05 с палочками любой косины и даже вообще без палочек, и даже так *^C^Cfilletrad;0;_fillet; в-лесу-родилась-елочка; Потому что автокад воспринимает палочки и елочки так:
Command: в-лесу-родилась-елочка Unknown command "В-ЛЕСУ-РОДИЛАСЬ-ЕЛОчКА". Press F1 for help
.
Просто игнорирует но профилетила до этого. То есть нормально будет так: *^C^Cfilletrad;0;_fillet;^Z
В 2005 я поставил ^z чтобы прессечь разнос автокада, который появляется если после (;) остается незамеченный пробел, равноценный Enter. Чтобы в этом убедиться, поставьте вторую (;) ^z запретит нежелательные пробелы.
> Vova
Вот что у меня происходит при выполнении макроса
*^C^C_filletrad;0;_fillet;//
Команда: _filletrad Новое значение FILLETRAD <0.0000>: 0 Команда: _fillet Текущие настройки: Режим = С ОБРЕЗКОЙ, Радиус сопряжения = 0.0000 Выберите первый объект или [полИлиния/раДиус/Обрезка/Несколько]: // *Неверный выбор* Требуется точка или Рамка/Последний/Секрамка/БОКС/Линия/РМн-угол/СМн-угол Выберите первый объект или [полИлиния/раДиус/Обрезка/Несколько]: *Прервано*
Интересное дело: специально следил, чтобы в конце макроса не было пробела, но при такой записи макроса он вставляется по неизвестной причине. Точка с запятой в конце не помогает. И ^Z не помогает. AutoCAD 2005 РУС.
Зато такой (нормальный) макрос
*^C^C_filletrad;0;_fillet;\\
работает очень странно: если после выполнения очередного сопряжения нажать не Esc, а Enter или правую кнопку мыши, то кажется, что цикл закончился корректно. Однако нажатие ЛЕВОЙ кнопки мыши опять запускает команду "_fillet".
А шо ж вы хочете? По правому клику вызывается последняя команда. Без опций. Отсюда мораль - оформляйте как отдельную defun (если это в принципе возможно), тогда и вызываться будет она :) Например, так:
^C^C^P(defun c:myfil() (while (vl-cmdf "_.filletrad" 0 "_fillet") (princ)));myfil;
Писал без запущенного акада, и без проверок соответственно. Так что за возможные ошибки прошу не бить :)
> Кулик Алексей aka kpblc
По правому клику - ясно. А вот почему по ЛЕВОМУ?
Спасибо всем за ответы.
*^C^C_filletrad;0;_fillet;\\
меня устраивает (проблемы с ПРАВЫМ/ЛЕВЫМ не очень для меня существенны)
поэтому решение вопроса есть.
Но есть новый вопрос. Как сделать, чтобы после отработки этого макроса,
значение текущего радиуса вернулось на предыдущее?
Это называется дашь палец-руку откусит. То, что ты просишь, называется программированием. Мне кажется, интереснее для тебя будет, если сделаешь сам, потому что тогда ты распространишь свои знания на многие вещи в автокаде, и тебе станут интересными такие детали, как - по какому клику что и почему происходит. Пока
проблемы с ПРАВЫМ/ЛЕВЫМ не очень для меня существенны)
Купи книжку AutoCAD Язык макрокоманд и создание кнопок, там все есть
Ну ладно, не ругайтесь. Нет, так нет.
Все равно спасибо,
Суважением, wo!
Стоп, ребята. WO! какой у тебя автокад? Начиная от 2004 есть опция U для множественного сопряжения. В 2006 (по-памяти) опция М. Здесь звездочка не требуется
^C^Cfilletrad;0;_fillet;_u
Тут какая-то чертовщина. Если мы вызываем команду "_fillet" из меню или из командной строки, то надо задавать опцию "_m" исходя из запроса
Select first object or [Undo/Polyline/Radius/Trim/Multiple]:
Если же команда вызывается из макроса, то надо вводить опцию "_u" исходя из запроса
Select first object or [uNdo/Polyline/Radius/Trim/mUltiple]:
Откуда такая разница в опциях?
Прошу прощения, не указал сразу версию.
У меня 2006 рус.
А опция множественного сопряжения действительно есть.
Макрос с ней работает красивей. Я эту опцию и на стандартную кнопку приписал.
И чего так сразу не сделать? Как раньше копирование было с опцией.
Теперь слава богу догадались. На верное и до сопряжения очередь дойдет.
Спасибо
С уважением, wo!
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → Настройка меню и DIESEL → Почему не работает макрос
Форум работает на PunBB, при поддержке Informer Technologies, Inc