Пример программы на autolisp

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.)

Читайте также:
Как пользоваться программой rs partition recovery

Пример простой программы на 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»))

После того как вставили код в блокнот, мы должны иметь что-то наподобие этого:

image001

Теперь мы должны сохранить файл. Файл можно назвать, как вам нравится, но расширение у него должно быть .LSP. Правильнее (но не обязательно) будет назвать файл так же, как названа команда в найденном Вами коде. Команде всегда предшествует префикс C: после слова defun.

В примере выше видно, что команду назвали OFF2, соответственно файл называем off2.lsp. Таким образом, мы можем избежать беспорядка, т.к. будем знать, что в файле off2.lsp находится команда OFF2.
Иногда в коде представлено несколько функций. Необходимо найти «главную». Такая функция либо имеет префикс С:, либо сам автор кода уточняет, что «использовать как «. В случае нескольких «главных» именование файла не может иметь никаких рекомендаций.

Загрузка lisp файла

Далее, запускаем Автокад и выбираем Сервис >> Автолисп >> Загрузить (Tools >> AutoLISP >> Load) или набираем в командной строке _appload.
Мы должны увидеть диалоговое окно как представлено ниже:

image004

Используйте следующую последовательность, чтобы загрузить off2.lsp:

  1. Перейдите к папке, куда Вы сохранили lisp файл.
  2. Выберите файл, который Вы хотите загрузить из списка.
  3. Нажмите кнопку Загрузить.
    (Если все прошло удачно, Вы должны увидеть надпись «off2.lsp успешно загружено»)
  4. Нажмите кнопку Закрыть для завершения команды.

Команда или функция ?

Для начала необходимо определиться, что у нас: команда или функция?
Немного теории.
В описании практически любого кода есть такая строка, как

(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).
Мы должны увидеть диалоговое окно, как представлено ниже:

image005

Используйте следующую последовательность, чтобы прописать папку в путях доступа:

  1. Нажмите кнопку Добавить.
  2. Нажмите кнопку Обзор и выберите целевую папку (в нашем случае , D:MyLisp)
  3. Путь к папке должен появиться в диалоговом окне.
  4. Нажмите кнопку 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.
В открывшемся диалоговом окне жмем на кнопку Приложения рядом с изображение портфеля

Читайте также:
Как переставить программы на телевизоре Самсунг

image006

В следующем диалоговом окне жмем на кнопку Добавить и указываем на необходимые файлы.

image007

Они должны появиться в списке приложений.
Теперь перечисленные файлы будут загружаться каждый раз при открытии рисунка.
Важно понимать, что (по крайней мере в полной версии 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

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru