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

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

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

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

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

Выкладываю 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:
Просмотров: 448739
 
Непрочитано 02.01.2018, 16:38
#861
Immortal_6666

вольный копейщик
 
Регистрация: 03.11.2010
Сообщений: 132


Цитата:
Сообщение от Setvar Посмотреть сообщение
Абстрактно рассуждаете, товарищ. Никакой связи ЗДЕСЬ ни с каким полем не обозначено. Топтание на пустом месте.
Setvar, Я картинку сделал. Может так понятнее будет?

Код данного поля такой:

%<\AcVar CustomDP.тест>%

Если я копирую эту строку в любой текст, вставляется поле. Разве это не связь? Она вполне конкретная. Но скормить эту строку выноске программно у меня не получается. Хотя руками через ctrl+v работает. По-моему чистая конкретика, а не абстракция.

Аналогично с переносом - в мтексте это \P
Но конструкция (command "_MLEADER" pause pause "Текст\PТекст") уже не работает.
Миниатюры
Нажмите на изображение для увеличения
Название: поле.PNG
Просмотров: 101
Размер:	34.0 Кб
ID:	197362  

Последний раз редактировалось Immortal_6666, 02.01.2018 в 16:48.
Immortal_6666 вне форума  
 
Непрочитано 02.01.2018, 17:47
#862
Сергей812


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


И в чем проблема с многострочным текстом? "\n" - управляющая группа переноса
Код:
[Выделить все]
(command "_MLEADER" pause pause "Текст\nText\nИ третья строка")
Сергей812 вне форума  
 
Непрочитано 02.01.2018, 18:02
#863
Immortal_6666

вольный копейщик
 
Регистрация: 03.11.2010
Сообщений: 132


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
И в чем проблема с многострочным текстом? "\n" - управляющая группа переноса
Код:
[Выделить все]
(command "_MLEADER" pause pause "Текст\nText\nИ третья строка")
в том, что не работает так... строка в принципе не выполняется тогда, разрываясь в месте "/". Cм. картинку.
Хм.. а не работает она именно с кнопки. А если скопировать весь код в кс, то работает.
Миниатюры
Нажмите на изображение для увеличения
Название: не работает.PNG
Просмотров: 54
Размер:	4.5 Кб
ID:	197363  
Immortal_6666 вне форума  
 
Непрочитано 02.01.2018, 18:08
#864
Сергей812


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


Лог:
Цитата:
Команда: (command "_MLEADER" pause pause "Текст\nText\nИ третья строка")
_MLEADER
Укажите местоположение полки выноски или [вначале Стрелка выноски/Вначале содержимое/Параметры] <Вначале содержимое>:
Положение стрелки выноски:
Введите текст: Текст
Text
И третья строка
Команда: nil
И результат:
Миниатюры
Нажмите на изображение для увеличения
Название: Выноска_с_многострочным_текстом.JPG
Просмотров: 47
Размер:	13.4 Кб
ID:	197364  
Сергей812 вне форума  
 
Непрочитано 02.01.2018, 18:10
#865
Immortal_6666

вольный копейщик
 
Регистрация: 03.11.2010
Сообщений: 132


Сергей812, видимо, вы код копируете прямо в кс. А попробуйте поместить кнопку на палитру или куда-либо еще. И будет обрываться на "\" выполнение. Почему-то разница есть.
Immortal_6666 вне форума  
 
Непрочитано 02.01.2018, 18:14
#866
Сергей812


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


а если сделать файл *.lsp
Код:
[Выделить все]
 (defun c:MLeader123(/)
  (command "_MLEADER" pause pause "Текст\nText\nИ третья строка")
)
загрузить в акад и повесить на кнопку? Команда будет MLeader123
Сергей812 вне форума  
 
Непрочитано 02.01.2018, 18:19
1 | #867
Immortal_6666

вольный копейщик
 
Регистрация: 03.11.2010
Сообщений: 132


Сергей812, это да, такое я уже сам попробовал. Работает конечно. Просто мне-то как раз уйти хотелось от внешних файлов. Странно, что без отдельного файла не хочет... это загадка для меня. Видимо, в файле загружает весь код, потом выполняет, а если сразу на кнопку, то по посимвольно интерпретирует.
В любом случае, спасибо большое за ответы!

Последний раз редактировалось Immortal_6666, 02.01.2018 в 18:35.
Immortal_6666 вне форума  
 
Непрочитано 02.01.2018, 22:33
#868
engngr

сети
 
Регистрация: 03.11.2008
Московия*
Сообщений: 5,766


А можно в строку команды на кнопке включить лисп с возвращаемым значением в виде двух строк? - сейчас сам не могу попробовать
engngr вне форума  
 
Непрочитано 03.01.2018, 10:53
#869
Immortal_6666

вольный копейщик
 
Регистрация: 03.11.2010
Сообщений: 132


engngr, я не смог понять, что имеется в виду. Вероятно, знаний не хватает. Пробовал вот так:

^C^C((setq ts "текст1\nтекст2")(command "_MLEADER" pause pause ts))

все равно прерывается на \
Immortal_6666 вне форума  
 
Непрочитано 03.01.2018, 16:04
#870
skkkk


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


Immortal_6666, тут должна сработать следующая последовательность:
1. Создаём выноску с любым текстом, можно пустую: "".
2. Назначаем ей текстовую строку:
Код:
[Выделить все]
(vla-put-textstring (vlax-ename->vla-object (entlast)) "тут код поля в кавычках")
Пишу с телефона и без проверок, но вроде не напутал со скобками.
Но есть в таком примитивном подходе большой минус. Если пользователь по каким-то причинам отменит создание выноски, то строка назначится последнему созданному в чертеже объекту, если он, конечно, текстовый. Это плохая программа получится. До тех пор, пока vl-cmdf возвращал T в случае успешного завершения и nil в противном случае, такую проверку было устроить легко при помощи if. Но (вроде) с 2012-й (или с 15-й) версии vl-cmdf возвращает не пойми что, и такую проверку сделать нельзя. Надо предварительно перед созданием выноски запоминать последний примитив и перед назначением выноске строки проверять, добавился ли объект или нет, и если да, то модифицировать ему строку. Есть функции от VVA mip:mark для установки метки и вторая (название не помню, но они вместе), которая проверяет, добавлялись ли объекты после установки метки.

Последний раз редактировалось skkkk, 03.01.2018 в 16:11.
skkkk вне форума  
 
Непрочитано 03.01.2018, 17:04
#871
Immortal_6666

вольный копейщик
 
Регистрация: 03.11.2010
Сообщений: 132


skkkk, я попытался вот так:

Код:
[Выделить все]
 (defun c:test4(/)
  (command "_MLEADER" pause pause "")
  (vla-put-textstring (vlax-ename->vla-object (entlast)) "%<\AcVar CustomDP.Тест>%"))
Вроде как "не создать выноску" тут никак. Если только не поставил вторую точку, но тогда и код далее не выполняется. В этом плане проблемы нет. Но вставляет решетки... Хотя свойство на которое ссылается поле в документе есть, проверял.

----- добавлено через ~7 мин. -----
Не знаю, важно ли это. Но если посмотреть код поля этих решеток, то у них название свойства с маленькой буквы, а у родного поля -с большой. Хотя в коде, большая стоит. Возможно причина, в проблемах с кодировкой! У меня первая буква подменяется на т со штрихом сверху... правлю в NotePad++ - может он виноват. С кодировкой разобрался, но не помогло.
Также, заметил что в коде поля пропадает \, добавил еще 1, получилось так:

Код:
[Выделить все]
(defun c:test4(/)
  (command "_MLEADER" pause pause "")
  (vla-put-textstring (vlax-ename->vla-object (entlast)) "%<\\AcVar CustomDP.Тест>%")
  )
Теперь код поля из лиспа и код "родного поля" не отличаются ничем. Но первое выдает статус "неизвестно" и решетки...

----- добавлено через ~4 мин. -----
Ура! Заработало! Более простым методом:

Код:
[Выделить все]
 (defun c:test4(/)
	(setq ts "%<\\AcVar CustomDP.Тест>%" )
	(command "_MLEADER" pause pause ts)
  )
Но слеш \ лишний все равно надо добавлять - куда-то он пропадает сам по себе.
Спасибо всем, кто участвовал в обсуждении!!!

Последний раз редактировалось Immortal_6666, 03.01.2018 в 17:50.
Immortal_6666 вне форума  
 
Непрочитано 03.01.2018, 18:11
1 | #872
skkkk


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


Цитата:
Сообщение от Immortal_6666 Посмотреть сообщение
слеш \ лишний все равно надо добавлять - куда-то он пропадает сам по себе.
Этот слэш является служебным символом, когда нужно, например в строке поставить его же, как в случае с полем или кавычку, чтобы она не заканчивала строку.
Так что он пропадает не зря.
skkkk вне форума  
 
Автор темы   Непрочитано 09.01.2018, 14:15
#873
zenon

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


Immortal_6666, в качестве бреда
последовательность
  1. Создать выноску с пустым текстовым полем
  2. Вызвать команду редактирования текста с выбором последнего созданного объекта (Последний/_L)
  3. Вставить требуемое значение
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 09.01.2018, 16:19
#874
Immortal_6666

вольный копейщик
 
Регистрация: 03.11.2010
Сообщений: 132


zenon, спасибо. В принципе, задача уже решилась. См. пост 871
Immortal_6666 вне форума  
 
Непрочитано 30.01.2018, 13:31
#875
engngr

сети
 
Регистрация: 03.11.2008
Московия*
Сообщений: 5,766


Цитата:
Сообщение от Immortal_6666 Посмотреть сообщение
Просто мне-то как раз уйти хотелось от внешних файлов.
Пока наткнулся: https://forum.dwg.ru/showpost.php?p=303625&postcount=89
engngr вне форума  
 
Непрочитано 23.03.2018, 16:36
#876
vedmak


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


Подскажите как отредактировать лисп чтобы он не только блокировал разблокировал ВЭ, но еще и слой видового экрана Defpoints ставил
Код:
[Выделить все]
 (defun c:vpunlockall () ; 06/07/04
  (vl-load-com)
  (vlax-for lay
                (vla-get-layouts
                  (vla-get-activedocument
                    (vlax-get-acad-object)
                  )
                )
    (if (eq :vlax-false (vla-get-modeltype lay))
      (vlax-for ent (vla-get-block lay) ; for each ent in layout
        (if (= (vla-get-objectname ent) "AcDbViewport")
          (progn
            (vla-put-displaylocked ent :vlax-false)
            (vla-put-color ent 3); 3 green
          )
        )
      )
    )
  )
)


(defun c:vplockall () ; 06/07/04
  (vl-load-com)
  (vlax-for lay
                (vla-get-layouts
                  (vla-get-activedocument
                    (vlax-get-acad-object)
                  )
                )
    (if (eq :vlax-false (vla-get-modeltype lay))
      (vlax-for ent (vla-get-block lay) ; for each ent in layout
        (if (= (vla-get-objectname ent) "AcDbViewport")
          (progn
            (vla-put-displaylocked ent :vlax-true)
            (vla-put-color ent 1);1 red
          )
        )
      )
    )
  )
)
vedmak вне форума  
 
Непрочитано 17.05.2018, 01:46
#877
Rijik-pijik


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


Добрый вечер. Подскажите пожалуйста как в этом макросе отредактировать точность площади до м2

проставляет площадь объекта
^C^C^P_.area;_Object;\^C(setq txt (getvar "AREA"))(princ "Укажите точку")(command "_text" pause "" "" txt)(princ)
Rijik-pijik вне форума  
 
Непрочитано 17.05.2018, 04:05
#878
art_rrc


 
Регистрация: 28.01.2013
Минск
Сообщений: 379


Цитата:
Сообщение от Rijik-pijik Посмотреть сообщение
Подскажите пожалуйста как в этом макросе отредактировать точность площади до м2
Просто задайте для файла по умолчанию в "units", должно сработать.
art_rrc вне форума  
 
Непрочитано 17.05.2018, 06:05
#879
RNB

Проектирование мостов
 
Регистрация: 29.01.2014
Новосибирск
Сообщений: 433


Цитата:
Сообщение от Rijik-pijik Посмотреть сообщение
Добрый вечер. Подскажите пожалуйста как в этом макросе отредактировать точность площади до м2

проставляет площадь объекта
^C^C^P_.area;_Object;\^C(setq txt (getvar "AREA"))(princ "Укажите точку")(command "_text" pause "" "" txt)(princ)
Попробуйте (setq txt (round(getvar "AREA")))
RNB вне форума  
 
Непрочитано 17.05.2018, 08:49
#880
Rijik-pijik


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


Цитата:
Сообщение от RNB Посмотреть сообщение
Попробуйте (setq txt (round(getvar "AREA")))

не работает
Rijik-pijik вне форума  
Ответ
Вернуться   Форум 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