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

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

Мои макрокоманды

Ответ
Поиск в этой теме
Непрочитано 19.05.2008, 15:20 1 |
Мои макрокоманды
zenon
 
Остекляем!!! Алюминим!!!
 
Москва
Регистрация: 21.02.2005
Сообщений: 3,826

Предлагаю в данной теме выкладывать используемые макрокоманды.
Выкладывать прошу с описанием, что данная макрокоманда выполняет и как. Если можно, то и рисунки к кнопкам соотвественно.

Выкладываю 4 своих макрокоманды.

Улучшенная команда _Break, разрыв в одной точке с повтором по правой клавише мышки.
Цитата:
^C^C^P(defun c:break2 () (vl-cmdf "_break" pause "f" pause "@")(princ));break2;
ps. Макрокоманда не моя. Рисунок со старой кнопки.


Объект Xline строится горизонтально
Цитата:
^C^C_xline;_h;
Объект Xline строится вертикально
Цитата:
^C^C_xline;_v;

Объект Xline строится по объекту (не работает по примитивам блока и arx объектов сторонних навесок на автокад).
Цитата:
*^C^C_xline;_offset;_Through;_nea;\_none;@;;
Макрокоманда зациклена, выход по Esc.
ps. Макрокоманда не моя.


Объект Xline строится по объекту, с поворотом в указанной точке на 90 градусов (не работает по примитивам блока и arx объектов сторонних навесок на автокад)
Цитата:
^C^C_xline;_offset;_Through;_nea;\_none;@;^C^C_rotate;_last;;\90;
ps. Макрокоманда доработана из предыдущей.

Соотвественно и кнопочки
Button.rar

__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
Просмотров: 451027
 
Непрочитано 13.02.2014, 17:13
#661
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,031


Цитата:
Сообщение от gomer Посмотреть сообщение
Вот такого например
Код:
[Выделить все]
 (defun c:test ()
  (setvar "CMDECHO" 1)
  (command "_pline" pause)
  (while (= 1 (getvar "CMDACTIVE"))
    (command pause)
  )
  (vla-put-Closed (vlax-ename->vla-object (entlast)) :vlax-true)
  (command "_cmddia" "0")
  (command "_.adeattachdata" "Apron" "_a" "_n" "_l")
  (command "_cmddia" "1")
)
И из тех, и из этого лиспа:
Цитата:
Команда: _cmddia
Новое значение CMDDIA <1>: 0
Команда: _.adeattachdata
Не удалось вызвать команду из ADS или AutoLISP.
Внутренняя ошибка.
Команда: Apron Неизвестная команда "APRON". Для вызова справки нажмите F1.
Команда: _a Неизвестная команда "A". Для вызова справки нажмите F1.
Команда: _n Неизвестная команда "N". Для вызова справки нажмите F1.
Команда: _l Неизвестная команда "L". Для вызова справки нажмите F1.
Команда: _cmddia
Новое значение CMDDIA <0>: 1
Команда: nil
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 18.02.2014, 22:03 Выравнивание однострочных текстов - макрос на кнопку или в палитру
#662
Stroit'el


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


Offtop: (По мотивам обнуления координаты z)
Написал для AUTOCAD LT 2009 Работает также и в AUTOCAD LT 2011
Корректно работает только для однострочных текстов
--------------------------------------------------------------------------------------------------------------------------------------------
Кнопки на палитру находятся здесь http://dwg.ru/dnl/12625
Подробный разбор макроса смотрите здесь http://forum.dwg.ru/showpost.php?p=1...&postcount=672

Offtop: Добавил комментарий по просьбе АлексЮстасу

Выравнивание однострочных текстов по X
Указать точку выравнивания, выбрать только текстовые объекты (можно рамкой)
Код:
[Выделить все]
^C^Cuserr1;0;_id;\userr1;'cal;rxof(@);\;;_select;$M=$(if,$(getvar,cmdactive),\,)_move;_pr;;1e99,0,0;;;_pr;;-1e99,0,0;;;_pr;;'cal;xof([$m=$(getvar,userr1),0,0]);;
Выравнивание однострочных текстов по Y
Указать точку выравнивания, выбрать только текстовые объекты (можно рамкой)
Код:
[Выделить все]
^C^Cuserr1;0;_id;\userr1;'cal;ryof(@);\;;_select;$M=$(if,$(getvar,cmdactive),\,)_move;_pr;;0,1e99,0;;;_pr;;0,-1e99,0;;;_pr;;'cal;yof([0,$m=$(getvar,userr1),0]);;
Изображения
Тип файла: jpg Picture.jpg (28.3 Кб, 379 просмотров)

Последний раз редактировалось Stroit'el, 01.03.2014 в 23:53. Причина: правка оформления
Stroit'el вне форума  
 
Непрочитано 27.02.2014, 02:52
1 | #663
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,031


Stroit'el - круто!
Я не столько про действия макросов (действуют), сколько про неведомые мне возможности, в них использованные. Одни циклы меня серьезно впечатляют.
Правда, мне в этих макросах мало что понятно. Можно их прокомментировать? Что в них что?
Например, что такое "userr1", что такое "_id"? И т.д.
__________________
количество моих сообщений не говорит о знании Автокада

Последний раз редактировалось АлексЮстасу, 27.02.2014 в 03:06.
АлексЮстасу вне форума  
 
Непрочитано 27.02.2014, 03:19
#664
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Переменные ORTHOMODE и POLARMODE - не оно? Хоть напрямую прописывать имя переменной в макрос, хоть функцией setvar. Если нужно менять режимы во время выполнения команды, то название переменной в макросе предваряется апострофом. Надеюсь, правильно понял вопрос.
Добавлено:
Пока писал ответ, вопрос уже исчез, получилось, будто я невпопад вообще что-то написал... Вопрос был в том, можно ли из макросов управлять режимами ОРТО и Отслеживания.

Последний раз редактировалось skkkk, 27.02.2014 в 03:32.
skkkk вне форума  
 
Непрочитано 27.02.2014, 03:27
#665
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,031


Цитата:
Сообщение от skkkk Посмотреть сообщение
ORTHOMODE и POLARMODE
Пардон, я уже до этих переменных добрался - сразу не заметил их. И потому изменил свой вопрос.
Но про эти переменные и их применение тоже спасибо - ключевые моменты я не знал.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 27.02.2014, 03:42
#666
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,031


Offtop: Тем более удалить, что номер его - ужас, ужас, ужас
Все-таки не POLARMODE, а AUTOSNAP (+РЕЖИМРИС) == 8 отвечает за включение/отключение полярного отслеживания?
Еще открытие для меня - этот плюс перед +РЕЖИМРИС! бывает и с плюсом?
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 27.02.2014, 03:49
#667
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Все-таки не POLARMODE, а AUTOSNAP
Все верно, ошибся я малёк... Буду впредь повнимательнее.
skkkk вне форума  
 
Непрочитано 27.02.2014, 04:02
#668
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,031


Цитата:
Сообщение от skkkk Посмотреть сообщение
Все верно
А POLARMODE==1 мне нужна для включения полярного отслеживания "от последнего сегмента".
Только вот привязки куда-то ичезли, хотя в настройках они включены!
По умолчанию AUTOSNAP у меня был 39. Когда вместо своей AUTOSNAP==8 ставлю AUTOSNAP в 39, то привязки восстанавливаются. Т.е. как и установить и полярное отслеживание, и чтобы работали привязки одновременно?
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 27.02.2014, 11:35
#669
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
как и установить и полярное отслеживание, и чтобы работали привязки одновременно?
Может, я чего не понимаю, но привязки и полярное отслеживание у меня работают независимо друг от друга. А вот орто с отслеживанием вместе работать не могут - либо одно, либо другое.
skkkk вне форума  
 
Непрочитано 27.02.2014, 15:54
#670
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,031


Цитата:
Сообщение от skkkk Посмотреть сообщение
привязки и полярное отслеживание у меня работают независимо друг от друга
Да, похоже, дело в том, что значения AUTOSNAP не просто выставляются, а плюсуются. Если установил просто 8, то будет без привязок. А если взять текущее значение (у меня было 39) и прибавить 8 (т.е. будет 47), то одновременно будет и полярное, и привязка.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 27.02.2014, 16:46
#671
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Только вот привязки куда-то ичезли, хотя в настройках они включены!
О каких привязках идет речь? OSNAP или AUTOSNAP? Видимо второе, а я подумал о первом...
Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Да, похоже, дело в том, что значения AUTOSNAP не просто выставляются, а плюсуются.
Все верно. Из справки:
Цитата:
Параметр хранится в виде битового кода, использующего сумму следующих значений.
skkkk вне форума  
 
Непрочитано 28.02.2014, 10:37
1 | #672
Stroit'el


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


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Stroit'el...Можно их прокомментировать? Что в них что?
Например, что такое "userr1", что такое "_id"? И т.д.

Сам макрос смотрите http://forum.dwg.ru/showpost.php?p=1...&postcount=662




Задача заключается в том, чтобы запомнить точку выравнивания, и затем по этой точке выровнять однострочные тексты, для этого используем переменную userr1. Идея выравнивания навеяна интересной макрокомандой обнуления координаты z.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
userr1; - пользовательская переменная, ; - здесь, - подтверждение в ответ на запрос команды

0; ввод числа 0 - обнуление userr1, ; - здесь, - заканчивает работу команды

_id; ввод команды id - получение координаты точки с чертежа, ; - здесь, - подтверждение ввода (аналог нажатия ENTER).

\userr1; - после указания точки на чертеже присваиваем новое значение переменной userr1, которое получим с помощью координатного фильтра калькулятора командной строки, \ - ввод. Далее, userr1 - вызов команды присвоения значения переменной, ; - переход к получению значения (аналог нажатия ENTER).

'cal;rxof(@);\;; - 'cal - прозрачный вызов калькулятора командной строки, rxof - фильтр по координате х, @ - координаты последней точки, которые хранятся в памяти программы AUTOCAD, точка эта была указана вначале работы макроса (использовалась команда _id).
_select;$M=$(if,$(getvar,cmdactive),\,) - выбор текстов в любом порядке, с учетом активности команды select (используется переменная cmdactive в выражении Дизель). Посмотрите примечание по этому поводу.

_move;_pr;;1e99,0,0;;;_pr;;-1e99,0,0;;;_pr;; - перемещаем тексты по координате x в бесконечность (1e99) и затем возвращаем обратно (-1e99) по координате х в точку 0, здесь: _pr - предыдущий набор выбора. Команда перемещения снова вызывается по ";" (соответствует нажатию ENTER). Разделитель для ввода значений координат - запятая.

'cal;xof([$m=$(getvar,userr1),0,0]);; - перемещение текстов из точки 0 в точку, которая была указана (точка выравнивания), обратите внимание на квадратные скобки для ввода координат

------------------------------------------------------------------------------------------------------------------------------------------------------------------
PS.
$m=$(getvar,userr1) - выражение на языке ДИЗЕЛЬ (в autocade LT есть очень удобный язык программирования ДИЗЕЛЬ и великолепный язык макрокоманд, спасибо разработчикам за то, что это у нас есть...) http://exchange.autodesk.com/autocad...30d6b-7b3c.htm

\ - ввод в ответ на запрос команды, использование которого очень интересно тем, что, например, позволяет ввести какую-либо другую команду и затем указать объекты, таким образом возможно осуществлять комбинацию различных команд

_ нижнее подчеркивание позволяет использовать англоязычные команды в локализованных версиях AUTOCAD (не используется для переменных).

Есть замечательная книга Владимира Света "Язык макрокоманд и создание кнопок" http://dwg.ru/dnl/3480.


*Примечание
Ограничение использования данного макроса для всех объектов, кроме текстов, заключается в том, что макрос "плющит" такие объекты, например, отрезки становятся нулевой длины, поэтому рекомендуется использовать данный макрос только для текстов.


Второй макрос работает аналогично.

Спасибо за проявленный Вами интерес.
Спасибо дорогому ФОРУМУ dwg.ru.

Последний раз редактировалось Stroit'el, 02.03.2014 в 00:43.
Stroit'el вне форума  
 
Непрочитано 04.03.2014, 16:17
#673
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,031


Можно ли в макросе запомнить текущее состояние параметров черчения (цвет, слой, вес, тип линий, ширину, масштаб типа линий), а также значение параметров черчения (AUTOSNAP), а после выполнения каких-то действий восстановить их?
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 04.03.2014, 16:41
#674
Кулик Алексей aka kpblc
Moderator

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


В макросе - нет (ну или использовать USER*-переменные. А там наверняка возникнет проблема с обратным восстановлением значений).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.03.2014, 16:42
#675
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,031


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
наверняка возникнет проблема с обратным восстановлением значений
В чем там засада с восстановлением?
Если нельзя или не стоит командами, то, значит, программно?
__________________
количество моих сообщений не говорит о знании Автокада

Последний раз редактировалось АлексЮстасу, 04.03.2014 в 16:51.
АлексЮстасу вне форума  
 
Непрочитано 04.03.2014, 17:37
1 | #676
Кулик Алексей aka kpblc
Moderator

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


Переменных USER* не так уж и много - 5 целых, 5 строковых и 5 действительных. При этом некоторые хранятся в чертеже, некоторые - нет.
Теперь смотри:
слой (clayer) - строковое значение, хранить в USERS#
цвет (cecolor) - опять строковое. Опять USERS#
вес (celweight) - целое, с возможностью отрицательных. USERI#
тип (celtype) - строка, USERS#
масштаб типа линии (celtscale или ltscale) - двойной точности, USERR#
Пока системных переменных немного, все хорошо, можно запомнить, где что лежит и как называется. А теперь добавь сюда, например, osmode (целое), autosnap (целое), - и очень быстро ты упрешься в то, что переменные USER* кончились

----- добавлено через ~3 мин. -----
Придется (по идее) либо писать лиспы, либо еще каким-то образом извращаться (и я даже догадываюсь каким )
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.03.2014, 20:29
#677
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,031


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
либо еще каким-то образом извращаться (и я даже догадываюсь каким )
Каким бы? Забить? Положить?

Если для совсем-совсем-совсем тупых - как, например, переменной USERS1 присвоить значение clayer в макросе?
Пишу, допустим: ^C^CUSERS1;CLAYER; - присваивает не значение CLAYER, а строку "CLAYER".
Или (собезьянничал): ^C^C(setvar "USERS1" CLAYER) - ругается: ошибка: Настройка переменной AutoCAD отвергнута: "USERS1" nil.
Или (тоже собезьянничал): ^C^C(setq USERS1 (getvar "CLAYER")) - не ругается, но и не присваивает ничего.
Или (еще собезьянничал): ^C^C$USERS1=$(getvar,CLAYER) - тоже не ругается, и ничего не присваивает.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 04.03.2014, 20:46
#678
Кулик Алексей aka kpblc
Moderator

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


Пишу без када, поэтому критика не принимается
^C^Cusers1;$(getvar,clayer);
^C^C(setvar "users1" (getvar "clayer"));
P.S. Поищи функцию универсального обработчика ошибок (уж поминали такие вещи миллион раз)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.03.2014, 20:53
1 | #679
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


АлексЮстасу, ^C^CUSERS1;$M=$(getvar,CLAYER);
gomer вне форума  
 
Непрочитано 04.03.2014, 21:03
#680
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,031


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Пишу без када, поэтому критика не принимается
^C^Cusers1;$(getvar,clayer);
^C^C(setvar "users1" (getvar "clayer"));
Абсолютно без критики: первая не дает ничего, а вторая присваивает почему-то "0".
Цитата:
Сообщение от gomer Посмотреть сообщение
^C^CUSERS1;$M=$(getvar,CLAYER);
тоже присваивает почему-то "0".
Активный слой совсем-совсем не "0".
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Мои макрокоманды

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мои динамические блоки Shoorup Динамические блоки 2713 21.04.2011 23:34
Повторение выполнения макрокоманды по циклу. КАК? Kostinok AutoCAD 12 05.12.2007 15:40
Мои проекты Vova Разное 10 08.10.2007 23:18
Мои палитры инструментов на соседний компьютер Pave1 AutoCAD 4 27.06.2006 09:45