Как сделать лисп для автокада

Добавил пользователь Владимир З.
Обновлено: 04.10.2024

Блог о том как быстро работать в AutoCAD. Русские долго запрягают, но быстро едут.

Поиск по этому блогу

четверг, 10 октября 2013 г.

Автоматизация рутинных задач или использование скриптов Lisp, ARX и пр.

Для эффективной работы в AutoCAD я рекомендую освоить работу с консолью и научится загружать дополнительные программы, и скрипты Lisp.

В своей работе я активно использую скрипты для разного рода автоматизации задач на выполнение которых мне бы понадобилось очень много времени. Приведу примеры:
- Подсчёт суммарной длины линий;
- Подсчёт суммарной площади помещений;
- Сумма числовых значений в текстовых полях;
- Перевод однострочного текста в многосторчный;
- Перенумерация;
- Создание оксонометрических схем для раздела ОВИК;
- Перевод чертежа из 3D в 2D;
И многое другое.

Все приводимые скрипты можно скачать в разделе Загрузки
1. Загрузка скрипта в оболочку AutoCAD.

Загрузка скрипта происходит по команде _APPLOAD либо редактированием автоматически загружаемого файла находящегося по пути
C:\Program Files\Autodesk\AutoCAD 2013\Support\acad2013.lsp



Рис.1 _APPLOAD
Загруженный скрипт либо приложение будет доступно только в том чертеже где был загружен скрипт. Для того чтобы скрипт загружался постоянно при загрузке AutoCAD-а


Рис. 2 Добавление скрипта в список постоянно загружаемых
Теперь файлы которые содержатся в списке будут автоматически загружаться в AutoCAD при загрузке.
2. Пример скрипта на языке Lisp
Скриптом является обычный текстовый файл с расширением *.lsp

;;;функция для нумерации.
;;;вводите начальное число
;;;выбираете предварительно подготовленный текст по порядку
;;;программа увеличивает выбранное число на 1 от предыдущего
(defun c:plus1(/ s n g a name string1 string2) - "команда запуска скрипта"
(setq Name 0)
(setq i 1)
(setq s (getint "\nВведите первый номер:"))
(setq i (getint "\nВведите Шаг:"))
(setq string1 (getstring T "\nВведите начало текста. "))
(setq string2 (getstring T "\nВведите окончание текста. "))

; (if (i=nil) (setq i 1))

;(princ (strcat "\nСу " (rtos i 2 2)))

(while Name
(setq Name (car (entsel "\nУкажите текст или [Enter]:")))
(if Name
(if (= (cdr (assoc '0 (entget Name))) "TEXT")
(progn
(setq n (entget name))
(print n)
(setq str (strcat string1 (rtos s 2 0) string2 ) )
(setq g (cons 1 str ) )
(entmod (subst g (assoc '1 n) n))
(setq s (+ i s))
);progn
);if
);if
);while
);defun

Для того что бы узнать какая команда используется для запуска скрипта необходимо найти строчку "defun c:plus1" , plus1 - команда запуска скрипта.

3. Суммарная длина линий
Скрипт суммарной длины линий. Команда: dlina

Рис.3 Функция DLINA

4. Перенумерация однострочного текста.
Скрипт перенумерации. Команда: plus1


Рис.4 Функция перенумерации однострочного текста
5. Использование скрипта для измерения площади

После первой загрузки данной утилиты она будет автоматически загружаться вместе с AutoCAD при последующих запусках.

LISP’ы – это микропрограммы, которые дополняют функционал Autocad и способствуют автоматизации рутинных операций.

Для использования LISP-программ требуется совершить их загрузку.

Для этого необходимо проделать следующий порядок действий:

Довольно часто исходные данные для проекта весят неоправданно много, что, конечно, влияет на производительность Autocad и, в итоге, на нашу скорость работы.

Порядок действий следующий:

  1. Загружаем LISP
  2. Вводим cleandwg в командной строке
  3. Выбираем параметры (обычно по умолчанию)

Правилом хорошего тона в проектировании является некое затенение подложки, относительно проектируемой системы. Синие санузлы в проекте пожарной сигнализации смотрятся совсем не эстетично, правда?



Порядок действий следующий

  1. Загружаем LISP
  2. Набираем в командной строке bgcolor
  3. Выбираем нужный цвет и немного ждем
  4. Получаем готовые к работе планы

Вашему вниманию предлагается очень простой LISP, показывающий сумму длин выбранных отрезков. Алгоритм действий следующий:

Адресация устройств в проекте является одним из самых трудозатратных и рутинных процессов при выполнении проекта. Рады представить вам универсальный инструмент нумерации любых элементов на чертеже – NumInc. Помимо стандартных функций нумерации он умеет строить массивы значений (актуально для таблиц), заменять существующий текст новым значением (используется, например, при нумерации листов проекта или замене скопированных адресов) и много чего ещё! Познакомиться с полным функционалом этого комбайна можно на сайте разработчика.

Минимальный алгоритм действий следующий

  1. Загружаем программу
  2. Вводим numinc
  3. Задаем Prefix, Middle и Suffix
  4. Выбираем инкремент
  5. Выбираем какая конкретно ячейка (Prefix, Middle или Suffix) будет увеличиваться на заданное значение при каждом клике мышью.
  6. Настраиваем параметры текста
  7. Кликаем ОК и нумеруем оборудование.

Большинство проектировщиков работает в пространстве модели, но опытные проектировщики знают значительную пользу от работы с листами, например, пакетная печать проекта. Для автоматического создания листов из пространства модели отлично подходит LISP AddLay.

Порядок действий следующий

  1. Загружаем LISP
  2. Набираем в командной строке AL
  3. Выбираем рамку. AddLay запомнит слой в котором расположена рамка и будет воспринимать объекты данного слоя как границы.
  4. Выделяем все элементы для перевода в листы. Настраиваем параметры.

Удобным инструментом для редактирования названия и задания нужного нам порядка листов является LISP TabSort.

Порядок действий следующий

  1. Загружаем LISP
  2. Набираем в командной строке TABSORT
  3. Редактируем названия и порядок листов

Офлайн каталог продукции RUBEZH в вашем телефоне.
Скачивайте мобильное приложение RUBEZH Ассистент

Здесь вы можете скачать документацию и программы для САПР AutoCAD, PCAD, 3DS, Inventor, Pro/E, Solidworks и других CAD CAM CAE EDA GIS


Инструкция по использованию acad.lsp и acaddoc.lsp

Стартовая установка AutoCAD обычно не включает загрузочный файл acad.lsp, вы должны будите создать его (например с помощью Блокнота) и поддерживать его самостоятельно. Зачем нужен acad.lsp? К примеру вы постоянно используете определенные подпрограммы на AutoLISP, и хотите, что бы они были всегда доступны при работе. Когда вы запускаете AutoCAD, он ищет в каталоге \support или другом каталоге, установленном как содержащий файлы поддержки, файл acad.lsp. Если файл acad.lsp будет обнаружен, он будет загружен в память.

acad.lsp будет загружен в только в первую чертежную сессию только при запуске AutoCAD. Если же вы хотите, чтобы ваши подпрограммы были доступны в каждой вновь открытой чертежной сессии, вы должны разместить их в файле acaddoc.lsp, который также должен быть расположен в каталоге поддержки.

Функциональность acad.lsp и acaddoc.lsp может быть изменена с помощью системной переменной ACADLSPASDOC. Если ACADLSPASDOC установлена в 0 (состояние по умолчанию), файл acad.lsp будет загружен только один раз - при запуске AutoCAD. Если ACADLSPASDOC установлена в 1, файл acad.lsp будет загружаться в каждый новый чертеж.

При работе AutoCAD в SDI (режиме работы AutoCAD только с одним документом) значение ACADLSPASDOC будет игнорироваться. Когда системная переменная SDI установлена в 1, переинициализация AutoLISP между чертежами зависит LISPINIT. Когда LISPINIT установлена в 1, функции и переменные AutoLISP действительны только в текущем чертеже; каждый раз, когда вы начинаете новый чертеж или открываете существующий, все функции и переменные очищаются из памяти и acad.lsp перезагружается. Изменение значение системной переменной LISPINIT в 0 при активном режиме SDI не дает никакого эффекта.

Файл acad.lsp может содержать код одной или множества AutoLISP-подпрограмм или список внешних lisp-файлов для загрузки. Второй метод предпочтительнее, так как более удобен для модификации. Например, вы можете сохранить свой код в файлы mysessionapp1.lsp, databasesynch.lsp, и drawingmanager.lsp и загружать их каждый раз при запуске AutoCAD, разместив в файле acad.lsp следующие директивы:

acadYEAR.lsp

Не модифицируйте зарезервированный загрузочный файл acadYEAR.lsp (acad2000.lsp, acad2000i.lsp acad2002.lsp, acad2004.lsp, acad2005.lsp, acad2006.lsp, acad2007.lsp, acad2008.lsp, acad2009.lsp, acad2010.lsp, acad2011.lsp). Этот файл зарезервированы Autodesk для определения функций AutoLISP, необходимых для работы AutoCAD. Он загружается в память непосредственно перед загрузкой acad.lsp

Как создать файл acad.lsp, если он не существует

Кликните в каталоге, в котором вы хотите сохранить файл acad.lsp правой кнопкой мыши и выберите Новый>Текстовый документ в отобразившемся контекстном меню. Измените имя документа на acad.lsp. Теперь откройте файл по двойному клику мыши. По умолчанию он откроется в Блокноте Windows. В дальнейшем вы можете использовать Блокнот для редактирования, сохранения и просмотра acad.lsp

Возможные места расположения acad.lsp:

Если вы хотите определить, какие каталоги использует AutoCAD для поиска файлов поддержки, запустите команду OPTIONS и посмотрите поле Support File Search Path в панеле Files.

Аннотация: В этой лекции будет показана возможность программирования в среде AutoCAD 2010 на языке AutoLISP (LISt Processing) . Результатом развития языка явилось создание среды Visual LISP, облегчающей работу пользователя. Выражения AutoLISP могут быть введены непосредственно в командную строку. Но чаще они оформляются в виде файла, который можно сохранить, а затем выполнить. Код AutoLISP представляет собой процедуры, в которых записаны команды для выполнения чертежных операций. Библиотеки таких процедур имеются на многих Web-сайтах САПР.

Цель лекции: приобрести навыки работы с интегрированной средой разработки и составить простые процедуры.

Запуск среды Visual LISP

Файл с текстовым кодом AutoLISP можно создавать в блокноте. Однако пользователям предлагается специальный удобный интерфейс - IDE (Integrated Development Environment ) . Интегрированная среда разработки предназначена для создания кода, отладки его и тестирования программы AutoLISP . Запуск среды производится по команде Tools - AutoLISP - Visual LISP Editor . Можно также набрать в командной строке команду Vlide . Окно Visual LISP показано на рис. 2.1.

 Окно среды Visual LISP

В строке заголовка приведен адрес открытого файла в окне AutoCAD . Ниже строки меню расположены панели инструментов:

  • Standard ;
  • Search ;
  • Debug ;
  • View ;
  • Tools .

В рабочей области размещены три окна:

  • файл AutoLisp с расширением .LSP , открытый по команде File - Open File ;
  • консоль Visual LISP Console ;
  • отладчик Trace .

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

Создание процедуры

Выполните команду File - New File . В окне введите текст процедуры, который приведен ниже:

Хотя текст здесь разбит на строки, это сделано только для наглядности. Все тело процедуры и каждый оператор в отдельности заключены в круглые скобки. Количество открывающих и закрывающих скобок должно быть одинаковым. Позиция закрывающей скобки несущественна. Если имеются встроенные скобки, то интерпретатор обрабатывает в первую очередь выражение во внутренних скобках. Результат этой обработки используется далее для обработки выражения во внешних скобках.

Любой текст после точки с запятой считается комментарием. Слова "Creates a line of length 10 relative X" интерпретатором не обрабатываются. Эти слова пишут, чтобы облегчить понимание процедуры читающими их людьми.

Первая строка начинается со слова defun (DEfine FUNction) - определение функции. Далее идет имя функции с:line10 . Можно было бы написать просто line10 . Но тогда для запуска процедуры в AutoCAD нужно набирать в командной строке ( line10 ), т.е. это имя в скобках. Задание имени процедуры с префиксом с: позволяет вызывать ее как простую команду путем набора имени line10 .

Последним элементом в первой строке является выражение (/pt). pt - это переменная (от слова point ). Так как перед именем переменной стоит слеш (прямая косая черта), то это локальная переменная. Она хранит какое-то значение , которое используется только в данной процедуре. Чтобы эта переменная была доступной и в других процедурах, надо сделать ее глобальной. Для этого нужно записать ее определение без слеша - (pt) . При задании нескольких переменных они перечисляются через пробел . Если переменные не задаются, то круглые скобки оставляют пустыми.

Вторая строка выводит в командной строке текст Please click a point: (Пожалуйста, укажите точку: . В командную строку выводится текст в кавычках, стоящий после оператора princ .

В третьей строке вначале выполняется команда getpoint , заключенная во внутренних скобках. Можно перевести это как "получить координаты точки, заданной пользователем". При этом пользователь вправе воспользоваться любым методом задания координат: набрать числа в командной строке, щелкнуть в нужном месте экрана или использовать объектную привязку. В любом случае программа считывает заданные координаты . Говорят, что функция getpoint "возвращает свое значение ".

Следующей выполняется команда в наружной паре скобок: setq pt (getpoint) . Оператор setq присваивает переменной pt значение , возвращаемое функцией getpoint . Например, мы щелкнули в точке с координатами 5,10. Тогда переменная pt примет значение 5,10.

В четвертой строке процедуры стоит выражение command "_line" pt "@10,0" "" . Функция command просто отправляет на выполнение любую следующую команду AutoCAD , заключенную в кавычки. В данном случае это команда построения отрезка line . Напоминаем, что нижнее подчеркивание вводится для команд на английском языке только в локализованных (русских) версиях.

При выполнении этой команды вначале запрашиваются координаты первой точки. Затем запрашиваются координаты второй точки. В соответствии с этими запросами после имени команды записаны параметры команды. На запрос Specify first point: берется значение переменной pt . На запрос Specify next point or [Undo]: берется значение @10,0 . Напомним, что знак @ означает задание относительных координат.

Четвертая строка заканчивается пустыми кавычками. Это эквивалентно нажатию клавиши ENTER , т.е. приводит к окончанию операции .

Таким образом, программирование в среде AutoLISP сводится к заданию всех параметров команды в том порядке, какой наблюдается при черчении в пространстве модели . AutoCAD делает запрос о выборе параметра команды или о значении параметра. Ответ он находит в процедуре AutoLISP .

Редактирование и запуск процедуры

Редактор Visual LISP автоматически раскрашивает набранный текст в зависимости от элемента синтаксиса:

  • Голубой - встроенные функции и защищенные символы;
  • Пурпурный - текстовые строки;
  • Зеленый - целые числа;
  • цвет морской волны - действительные числа;
  • пурпурный на сером фоне - комментарии;
  • красный - скобки;
  • черный - нераспознанные элементы.

Для форматирования кода процедуры можно нажать кнопку Format Edit Window панели инструментов Tools или запустить команду Tools - Format Code in Editor . Если вы хотите форматировать только выделенный фрагмент процедуры, то нужно щелкнуть по кнопке Format Selection .

Типичные ошибки в синтаксисе (несоответствие скобок, неверное употребление функций и пр.) можно обнаружить, щелкнув по кнопке Check Edit Window (Check Selection) . Результаты проверки отобразятся в окне Build Output .

При необходимости можно преобразовать выделенный операторный блок программы в комментарий нажатием кнопки Comment Block . Такая операция часто применяется при настройке программы.

Для выполнения процедуры в AutoCAD выполните следующие действия:

  • загрузите код программы в активное окно AutoCAD щелчком по кнопке Load active edit window ;
  • в окне Console введите выражения ( c:line10 ↵) - откроется окно AutoCAD с приглашением: Command: 'VLIDE Please click a point: ;
  • укажите точку любым способом - щелкните мышью по экрану или наберите координаты в командной строке. В пространстве модели будет построен отрезок. Затем снова откроется окно Visual LISP ;
  • щелкните в окне текстового редактора и сохраните файл в папке \AutoCAD 2007\Support как Line10.lsp .

Зумировать чертеж, растянув отрезок на весь экран

В .окне Visual LISP добавьте к файлу Line10.lsp команду (command "_zoom" "e" "")

Далее выполните следующие действия:

  • загрузите процедуру щелчком по кнопке " Load edit active window ";
  • перейдите в окно AutoCAD щелчком по кнопке " Activate AutoCAD ";
  • наберите в командной строке Line10 ↵;
  • вернитесь в окно Visual LISP и сохраните файл;
  • закройте окно Visual LISP .

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

Чтобы использовать в данном чертеже AutoCAD процедуру AutoLISP , необходимо ее в этот чертеж загрузить. Это можно сделать либо в среде AutoLISP , либо непосредственно в пространстве AutoCAD .

В среде AutoLISP нужно открыть файл по команде File - Open File . Для его загрузки, как описано выше, нужно выполнить команду Tools - Load Text in Editor .

В среде AutoCAD загрузить процедуру AutoLISP можно двумя способами. По первому способу для загрузки процедуры Line10.lsp нужно в командной строке набрать ( load "line10" )↵. Имя без расширения заключается в кавычки. Круглые скобки показывают интерпретатору командной строки , что это выражение AutoLISP . В ответ будет выдано имя функции . Протокол командной строки будет выглядеть следующим образом:

Чтобы запустить загруженную процедуру, наберите в командной строке имя функции как простую команду: line10 . В ответ на приглашение укажите точку. В протоколе операции будут отображены таким образом:

После запуска команды ( load "line10" ) программа ищет файл Line10.lsp во всех каталогах (папках) поддержки. Маршруты поиска файлов поддержки можно просмотреть в диалоговом окне, открываемом по команде Tools - Options - Files (рис.2.2):

 Списки маршрутов поиска файлов поддержки

Маршруты поиска файлов поддержки можно редактировать: удалять, добавлять, изменять порядок списка. Рекомендуется создать отдельную папку LISP для файлов .lsp и ввести ее адрес в список маршрутов.

Для совместного использования функций в нескольких открытых чертежах вместо команды ( load "ИМЯ ФАЙЛА" ) нужно применить команду ( vl-load-all "ИМЯ ФАЙЛА" ). Это эквивалентно помещению процедуры AutoLISP в файл acaddoc.lsp .

Второй способ загрузки процедуры AutoLISP состоит в использовании команды Tools -Load Application . Можно просто набрать в командной строке AppLoad . После запуска команды активизируется диалоговое окно Load/Unload Application (рис. 2.3). Для облегчения поиска нужно указать тип файлов lsp .

 Диалоговое окно Load/Unload Application

Загрузка файла процедуры в чертеж

Откройте Блокнот и наберите в нем следующий текст:

Закрасьте контур прямоугольника красным цветом по команде ChProp . Сравните свой текст процедуры с таким вариантом:

Процедуры для трехмерного пространства

Откройте новый чертеж. В среде Visual LISP создайте две процедуры для построения трехмерных объектов. В конце команды ставится "" (Enter) .

Проанализируйте эти процедуры. Запустите в модели AutoCAD команды chprop, view, union, zoom . Рассмотрите параметры этих команд. Установите рабочее пространство 3DModeling . Запустите процедуры. В процедуре Gantel фигура закрашивается красным. Исправьте процедуру так, чтобы закрашивался весь объект . Измените число изолиний на нуль по команде isolines . В процедуре с:box1 введите визуальный стиль Realistic . Закрасьте box цветом cyan .

Попробуйте построить box и gantel вручную, набирая команды в командной строке. Предварительно для каждой фигуры создайте новый слой. Обратите особое внимание на параметры команд, которые предлагаются для выбора.

После освоения основных принципов работы в AutoCAD возникает необходимость избавиться от рутинных операций, которые, в зависимости от специфики выполняемых задач, могут занимать много времени. Для этого существует дополнительные приложения, написанные на языке программирования LISP. Отсюда и происходит название скриптов: лисп-приложения.

Если тема программирования далека от вас не стоит расставаться. Все основные LISP-приложения уже давно разработаны для Автокада. Все что вам остается сделать – это определиться, какие команды или функции будет вам полезны, после чего скачать само приложение и загрузить его в AutoCAD.

Программы Lisp для Автокада

ЛИСП для AutoCAD

Согласитесь, команда весьма полезная, однако по умолчанию такой инструмент не предусмотрен. Если перед вами стоит задача выровнять 5-10 текстовых строк в чертеже, то на это уйдет определенное время, а главное, вы будете повторять одни и те же действия несколько раз. А вот, как эти действия можно выполнить одной командой (в данном случае Z-TEXT-ALIGN ).

Как видно, ЛИСП-программы для Автокада могут быть полезны на различных этапах выполнения проекта. Также следует учитывать специфику выполняемых работ. Так существуют лиспы для Автокада для геодезистов или проектировщиков, использование которых характерно для конкретной области.

Как подгрузить Лисп в Автокад

Выше мы уже рассмотрели, что из себя представляет LISP-приложения для AutoCAD. Теперь давайте рассмотрим, как его внедрить в работу.

ПРИМЕЧАНИЕ:

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

Как установить файл *.lsp в Автокад?

ПРИМЕЧАНИЕ:

ЛИСП для AutoCAD 4

ЛИСП для AutoCAD 5

Как запустить команду приложения lisp?

В AutoCAD lisp команды посмотреть нельзя. Следует отталкиваться от исходного файла, который был загружен в программу.

ЛИСП для AutoCAD 6

ПРИМЕЧАНИЕ:

Далее следуйте указаниям командной строки и пошагово выполняйте запросы установленного скрипта. Как правило, все достаточно интуитивно понятно.

Как подгрузить lisp в Автокад LT?

К сожалению, приложения, написанные на AutoLISP, работают только на полной версии программы AutoCAD. Поэтому такие скрипты нельзя внедрить в AutoCAD LT или др. версии.

Исключением могут являться специализированные приложения типа LT Extender и подобные ему, которые были разработаны чтобы запускать файлы *.lsp или *.arx непосредственно в среде Автокад LT.

Как сделать кнопку в Автокад для LISP-приложения

Создание кнопки в Автокаде необходимо, когда вы используете сторонние приложения lisp и скрипты. Это связано с тем, что не всегда удобно обращаться к инструменту через командную строку, особенно если вы часто пользуетесь какой-то опцией.

1.Novaia-komanda

Ранее мы рассмотрели, что из себя представляют LISP-приложения для Автокада и как загружать дополнительные скрипты. Осталось узнать, как создать кнопку в Автокаде с новой командой и разместить ее на ленте для быстрого доступа.

Однако создание кнопки доп. скрипта имеет некоторые нюансы, которые мы сейчас разберем.

Создаем новые кнопки в Автокаде для запуска LISP

Чтобы добавить кнопку в Автокад для новой команды, которая была загружена в программу, нужно:

  1. Прописать путь к файлу, который содержит загружаемое приложение. Напомню, такие файлы могут иметь расширение *.arx, *.crx, *.lsp, *.dvb, *.dbx, *.vlx, *.fas.

ПРИМЕЧАНИЕ:

3. sozdanie_new_komandi

Задать ее название, а также макрос. Если с именем все понятно, то код макроса следует искать в самом файле приложения. Напомним, открыть его можно через обычный блокнот.

4. Macros

Далее выберите иконку для кнопки. Можно создать свою или отредактировать уже имеющуюся картинку.

Читайте также: