Pltools отвечает на все вопросы которые у вас могут возникнуть при работе с полилиниями и 3d полилиниями. Конвертация, оптимизация, направление, и многое другое. В одной удобной, небольшой панели умещается функционал который по идее должен быть в Автокаде по умолчанию. История […]
автокад LISP в значение «по слою»
20.10.2015 26.10.2016 No Comments
LISP выставляет выделенным объектам свойства: цвет, толщину линии и тип линии в значение «по слою». (defun c:setbylayer () (prompt «nSelect objects:») (setq s1 (ssget)) (command «chprop» s1 «» «color» «bylayer» «LT» «bylayer» «lweight» «bylayer» «») (princ) )
Печать в Автокаде, приемы и настройка
07.10.2015 08.10.2015 1 комментарий
Печать в автокаде имеет ряд нюансов и свои, подчас не очевидные, особенности. Не смотря на кажущуюся прозаичность этой задачи любой кто сталкивался с ней прекрасно понимает сколько сложностей и подводных камней таит в этот процесс. В этой статье я постараюсь […]
Автокад Lisp Скрипт — подсчет блоков на чертеже
10.09.2015 02.03.2017 No Comments
Пример LISP программы с диалоговым окном.
Скрипт для подсчета количества блоков на чертеже. Имеет множество возможностей, в том числе позволяет в табличном виде вывести на чертеже информацию о количестве и типах блоков. Название скрипта Подсчет блоков на чертеже Версия скрипта 1.5 Ссылка для скачивания CountV1-5.lsp Оригинальная […]
Lisp, склеивание линий под блоком.
27.11.2014 26.10.2016 No Comments
Если у вас есть блок лежащий на линии, при этом линия под ним «разрезана», то -эта комманда поможет удалить блок «склеив» линию под ним. Работает следующим образом: HEAL2 Выбрать блок для удаления. Собственно всё. (defun c:HEAL2(/ block ll ur […]
Апостроф в autoLISP
27.10.2014 14.06.2017 No Comments
Столкнулся с вопросом что же делает апостроф в записях на autoLISP, покопавшись в интернетах нашел это исчерпывающее объяснение. Ну и в меру своих сил постарался перевести его на русский язык: Введение Мой опыт показывает, что информации о назначении апострофа в […]
Программы А.Ривилиса.
22.10.2014 29.05.2022 88 комментариев
В этой заметке собраны ссылки на приложения А.Ривилиса. Всем кто работает с Автокадом стоит ознакомиться с его программными расширениями, они просты в установке, и спасают огромное количество времени. Оглавление: Приложения А.Ривилиса Как загрузить приложение в Автокад Приложения А.Ривилиса: UPD: Актуальная […]
Источник: cadsupport.ru
Как использовать лисп, опубликованный на форуме
Добавлено: 26 Дек 2009
Вы нашли полезный для себя код на Лиспе и хотите его использовать. Можно выделить 3 шага:
- сохранение программного кода на своем компьютере
- загрузка файла
- запуск приложения
Примечание: AutoLISP программы могут быть запущены только на полной версии Автокада, они не работают под AutoCAD LT. (исключая случаи загрузки дополнительных приложений типа LT Extender и ему подобных, которые специально разработаны для запуска lisp и (или) arx приложений в среде AutoCAD LT.)
Пример простой программы на LISP
Сохранение программного кода на своем компьютере
С помощью курсора выделяем этот код и копируем его в буфер обмена, нажав правую кнопку мыши и выбрав пункт Копировать (или Ctrl+C).
Запускаем «Блокнот» и вставляем наш код с помощью меню Правка >> Вставить (или Ctrl+V):
(defun C:OFF2 (/ d obj ent adoc *error* undo lays Flag) (defun *error* (msg)(vla-EndUndoMark adoc)) (vl-load-com)(setq adoc (vla-get-activedocument (vlax-get-acad-object)) lays (vla-get-layers adoc))(vla-StartUndoMark adoc)(setvar «CMDECHO» 0) (if (null *OFF2*)(setq *OFF2* (abs (getvar «OFFSETDIST»)))) (if (zerop *OFF2*)(setq *OFF2* 1))(setq d (getvar «UNDOCTL»)) (cond ((= d 0) (vl-cmdf «_.UNDO» «_All»)) ((= d 3) (vl-cmdf «_.UNDO» «_Control» «_All»)) (t nil)) ;_ end of cond (princ «n Величина смещения <«)(princ *OFF2*)(princ «>: «) (initget 6)(if (null (setq d (getdist))) (setq d *OFF2*)) (setq *OFF2* d undo 0 Flag t) (initget «Undo Отмени Г J Exit Выход У D _Undo Undo Undo Undo Exit Exit Exit Exit») (while Flag (setq obj (entsel (strcat «n Выберите объект [» (if (not (zerop undo)) «Отмени/» «») «Выход] : «))) (cond ((= obj «Undo»)(if (not (zerop undo))(progn (vl-cmdf «_UNDO» «_B»)(setq undo (1- undo)))(alert «Нечего больше отменять»))) ((= obj «Exit»)(setq Flag nil)) ((null obj)(if (= (getvar «ERRNO») 52)(setq Flag nil)(princ » *** Мимо ***»))) (t (setq ent (vlax-ename->vla-object (car obj))) (cond ((= (vla-get-lock (vla-item lays (vla-get-layer ent))) :vlax-true) (alert «На блокированном слое!»)) ((vlax-method-applicable-p ent ‘Offset)(vl-cmdf «_UNDO» «_M»)(setq undo (1+ undo)) (vla-offset ent d)(vla-offset ent (- 0 d))) (t (alert «Не удается создать объект, подобный данному»))))) (initget «Undo Отмени Г J Exit Выход У D _Undo Undo Undo Undo Exit Exit Exit Exit»)) (vla-EndUndoMark adoc)(princ)) (princ «nНаберите в командной строке OFF2»))
После того как вставили код в блокнот, мы должны иметь что-то наподобие этого:
Теперь мы должны сохранить файл. Файл можно назвать, как вам нравится, но расширение у него должно быть .LSP. Правильнее (но не обязательно) будет назвать файл так же, как названа команда в найденном Вами коде. Команде всегда предшествует префикс C: после слова defun.
В примере выше видно, что команду назвали OFF2, соответственно файл называем off2.lsp. Таким образом, мы можем избежать беспорядка, т.к. будем знать, что в файле off2.lsp находится команда OFF2.
Иногда в коде представлено несколько функций. Необходимо найти «главную». Такая функция либо имеет префикс С:, либо сам автор кода уточняет, что «использовать как «. В случае нескольких «главных» именование файла не может иметь никаких рекомендаций.
Загрузка lisp файла
Далее, запускаем Автокад и выбираем Сервис >> Автолисп >> Загрузить (Tools >> AutoLISP >> Load) или набираем в командной строке _appload.
Мы должны увидеть диалоговое окно как представлено ниже:
Используйте следующую последовательность, чтобы загрузить off2.lsp:
- Перейдите к папке, куда Вы сохранили lisp файл.
- Выберите файл, который Вы хотите загрузить из списка.
- Нажмите кнопку Загрузить.
(Если все прошло удачно, Вы должны увидеть надпись «off2.lsp успешно загружено») - Нажмите кнопку Закрыть для завершения команды.
Команда или функция ?
Для начала необходимо определиться, что у нас: команда или функция?
Немного теории.
В описании практически любого кода есть такая строка, как
(defun … |
и потом после нее чего-то там написано. Так вот то, что там написано и есть имя функции.
Если первыми символами являются C:, то функция готова к вызову из командной строки. Если такого нет, то вызывать функцию надо, заключая ее имя в круглые скобки.
Например, есть функция
(defun c:test () ) |
Ее вызывать (при условии, что она подгружена) с командной строки можно напрямую:
И будут выполнены действия
А вот такую:
(defun test () ) |
Можно будет вызывать только так:
И будут выполнены действия .
С точки зрения AutoCAD’a это 2 разных модуля.
Запуск lisp программы
Как только lisp файл загружен, Вы можете вызвать команду из командной строки. Команда вызывается по ее имени. В нашем примере необходимо набрать в командной строке OFF2.
Запомните, имя команды содержит префикс C: после слова defun. Если Вы видите в коде:
(defun c: |
то в командной строке необходимо набрать без префикса C:.
Tips: Вы можете также загрузить lisp файл путем перетаскивания (drag-and-drop) иконки файла в графическое окно открытого документа Автокада.
AutoCAD ; error: no function definition:
Если Ваша функция или команда не работает или завершает работу с сообщением как в примере ниже, то Вам может помочь простой способ.
Команда: (vlax-get-acad-object) ; error: no function definition: VLAX-GET-ACAD-OBJECT |
Наберите в командной строке (vl-load-com) или (предпочтительнее) добавьте ее в начало lisp файла.
Команда: (vl-load-com) |
Теперь ваш lisp должен работать без ошибок.
Что такое это (vl-load-com) ?
Данная функция загружает большое количество функций, входящих в расширение AutoLisp, позволяющее работать с объектами, свойствами, методами и событиями ActiveX. Признаком необходимости загрузки расширения AutoLisp является наличие в тексте Вашей программы функций, начинающихся с префиксов vla- (например vla-get-activedocument), vlax- (например vlax-get-acad-object), vl- (например vl-catch-all-apply) и vlr- (например vlr-pers).
В любом случае никогда не помешает добавить (vl-load-com) в начало файла, чтобы избежать подобных ошибок.
Организация библиотеки лисп файлов.
Что делать, если набралось достаточное количество файлов? Каждый раз набирать _appload для загрузки того или иного приложения? Наиболее эффективным будет организация своей библиотеки. Для начала условимся, что все наши файлы будем складывать в одну папку. Например, D:MyLisp. Пропишем эту папку в путях доступа Автокада.
Для этого выбираем Сервис >> Настройка (Tools >> Options) или набираем в командной строке _options. Переходим на закладку Файлы (Files) и раскрываем список Путь доступа к вспомогательным файлам (Support File Search Path).
Мы должны увидеть диалоговое окно, как представлено ниже:
Используйте следующую последовательность, чтобы прописать папку в путях доступа:
- Нажмите кнопку Добавить.
- Нажмите кнопку Обзор и выберите целевую папку (в нашем случае , D:MyLisp)
- Путь к папке должен появиться в диалоговом окне.
- Нажмите кнопку OK для завершения команды.
^C^C(if (null C:)(load «»));;
^C^C(if (null C:OFF2)(load «off2»));OFF2;
Вместо текста мы должны будем подставлять имя нужной нам команды, а вместо текста имя того файла, в котором эта команда сохранена. Напоминаю, что файл должен иметь расширение .lsp. Более подробно по организации меню можно почитать еще здесь http://www.kulichki.com/cadhlp/pdmnu.htm
Автозагрузка файлов.
Если есть необходимость загружать свои lsp файлы при открытии чертежа, то нужно добавить необходимые файлы в список автозаргузки.
Запускаем Автокад и выбираем Сервис >> Автолисп >> Загрузить (Tools >> AutoLISP >> Load) или набираем в командной строке _appload.
В открывшемся диалоговом окне жмем на кнопку Приложения рядом с изображение портфеля
В следующем диалоговом окне жмем на кнопку Добавить и указываем на необходимые файлы.
Они должны появиться в списке приложений.
Теперь перечисленные файлы будут загружаться каждый раз при открытии рисунка.
Важно понимать, что (по крайней мере в полной версии AutoCAD) загрузка приложений, помещенных в Автозагрузку (Startup Suite), как правило, выполняется во все профили и сессии AutoCAD’a.
Кроме того, есть еще один момент. Если существует 2 или более файлов, в которых описаны функции с одинаковыми именами, выполняться будет та, которая загрузилась последней. Поскольку предсказать, в какой последовательности будет выполняться загрузка приложений, невозможно, подобных ситуаций следует избегать.
Автор статьи: Владимир Азарко aka VVA
Источник: dwg.ru
Пример простой программы на autolisp’е
Пример простой программы на автолиспе — создание простой детали без задаваемых параметров.
В архиве лежит один пример со скриншотом результата работы программы и ещё три примера без него.
Один из примров лежащих в архиве:
(defun c:ddd(/ Cyl Box0 Cyl0 Box0 Box1 Box2 Box3 Cyl1 Box1 Cyl2 Cyl3 Cyl4 Cyl5 Cylin Cylin0 klin1 klin2)
(setvar «OSMODE» 0) ; отключаем привязку
(command «_-view» «_right») ; устанавливаем вид сверху
(command «_cylinder» «0,0,30» «50» «90») ; основной цилиндр 1
(setq Cylin0 (entlast))
(command «_cylinder» «0,0,0» «50» «30») ; основной цилиндр 2
(setq Cylin (entlast))
(command «_cylinder» «0,0,0» «15» «200») ; вырезаемый по центру вертикальный цилиндр
(setq Cyl1 (entlast))
(command «_subtract» Cylin0 «» Cyl1 «»)
(command «_box» «-22.5,-300,100» «22.5,300,100» 20) ; Вырезаемый параллепипед дна
(setq Box3 (entlast))
(command «_-view» «_top»)
(command «_cylinder» «30,0,-50» «20» «100») ; Вырезаемый цилиндр поперёк
(setq Cyl3 (entlast))
(command «_cylinder» «30,0,-50» «20» «100») ; Вырезаемый цилиндр поперёк
(setq Cyl5 (entlast))
(command «_box» «56,60,20» «0,-60,-20» 150) ; Вырезаемый параллепипед
(setq Box0 (entlast))
(command «_box» «56,60,20» «0,-60,-20» 150) ; Вырезаемый параллепипед
(setq Box1 (entlast))
(command «_box» «56,60,20» «0,-60,-20» 150) ; Вырезаемый параллепипед
(setq Box2 (entlast))
(command «_cylinder» «30,0,-50» «30» «100») ; Цилиндр поперёк
(setq Cyl4 (entlast))
(command «_subtract» Cylin0 «» Box0 «») ; Вычитание
(command «_subtract» Cylin «» Box1 «»)
(command «_subtract» Cyl4 «» Box2 «»)
(command «_subtract» Cylin0 «» Cyl3 «»)
(command «_subtract» Cylin «» Cyl5 «»)
(command «_intersect» Cyl4 Cylin «») ; Умножение (пересечение)
(setq Cyl4 (entlast))
(command «_subtract» Cylin0 «» Box3 «»)
(command «_-view» «_right») ; устанавливаем вид сверху
(command «ПСК» «z» 180); Меняем оринтацию систмы координат
(command «_wedge» «-22.5,100,100» «-34.0470041,-100,120» 60) ; Клин
(setq klin1 (entlast))
(command «_wedge» «22.5,100,100» «34.0470041,-100,120» 60) ; Клин
(setq klin2 (entlast))
(command «_subtract» Cylin0 «» klin2 «»)
(command «_subtract» Cylin0 «» klin1 «»)
(command «_union» Cylin0 Cyl4 «»)
;(command «_plan» «_w») ; устанавливаем мировую систему координат
;(command «_vscurrent» «_c») ; устанавливаем визуальный стиль «концептуальный» это для AutoCAd 2008
;(command «_shademode» «_o») ; задаём режим раскрашивания (визуальный стиль) «реалистичный» для AutoCAd 2006
;(command «_-view» «_swiso») ; устанавливаем вид юго-западная изометрия
;(setvar «osmode» 16383) ; включает все режимы объектной привязки
Похожие материалы:
- Работа с файлами в WINDOWS (winAPI)
- 3. Работа с процессами — презентация
- Программирование на языках выского уровня, алгоритмические языки
- Процедура разработки функциональных описаний для задачи: «Купить хлеб в магазине» (Программирование)
- Строки, представление строк в языке Си — презентация
Источник: fevt.ru