Справочник AutoLISP функций. По алфавиту.

Справочник по стандартным AutoLISP функциям, которые используются в примерах на этом сайте.

Арифметические функции:

(+ <число1> <число2> … [<числоN>])

( <число1> <число2> … [<числоN>])

(* <число1> <число2> … [<числоN>])

(/ <число1> <число2> … [<числоN>]) 

Логические функции:

(= <аргумент1> [<аргумент2>] … [<аргументN>])

(/= <аргумент1> [<аргумент2>] … [<аргументN>])

(< <аргумент1> [<аргумент2>] … [<аргументN>])

(<= <аргумент1> [<аргумент2>] … [<аргументN>])

(> <аргумент1> [<аргумент2>] … [<аргументN>])

(>= <аргумент1> [<аргумент2>] … [<аргументN>])

Функции AutoLISP по алфавиту:

A

(action_tile <код> <выражение>)

(append <список1> [<список2> … <списокN>])

(atof <строка>)

(atoi <строка>)

(alert <сообщение>)

(assoc <код> <список>)

C

(car <список>)

(cdr <список>)

(command [<параметр1>] … [<параметрN>])

D

(defun <имя> ([<аргументы>] / [<временные>]) <выражения>)

(distance <точка1> < точка2>)

(done_dialog  <число>)

E

(entget <примитив>)

(entlast)

(entsel [<запрос>])

(exit)

G

(get_tile <код>)

(getpoint [<точка1>] [<запрос>])

(getvar <имя>)

I

(if <условие>  <выражение1> [<выражение2>])

(itoa <число>)

L

(list <элемент1> [<элемент2>] … [<элементN>])

(load <файл> [<сообщение>])

(load_dialog <файл>)

N

(new_dialog <диалог> <номер> [<действие>] [<положение>])

(not <аргумент>)

(nth <номер> <список>)

M

(mapcar ‘<функция> <список1> [<список2> … <списокN>])

(member <элемент> <список>)

P

(polar <точка> <угол> <расстояние>)

(princ [<аргумент>] [<дескриптор>])

(progn выражение1> [<выражение2>] … [<выражениеN>])

R

(rtos <число> [<режим> [<точность>]])

S

(set_tile <код> <значение>)

(setq <переменная1> <выражение1> [<переменная2> < выражение2>] … [<переменнаяN> < выражениеN>])

(setvar <имя> <значение>)

(ssadd [<примитив> [<набор>]])

(ssget [<метод>] [<точка1>] [<точка2>] [<список>] [<фильтр>])

(sslength <набор>)

(ssname <набор> <номер>)

(sssetfirst <набор1> [<набор2>])

(start_dialog)

(strcat [<строка1>] [<строка2>] … [<строкаN>])

U

(unload_dialog <номер>)

V

(vl-cmdf  [<параметр1>] … [<параметрN>])

(vl-load-all <файл>)

W

(while <условие>  <выражение1> [<выражение2>] … [<выражениеN>])

Функция +.

Вычисляет сумму чисел.

(+ <число1> <число2> … [<числоN>])

Типы аргументов:

целые и вещественные числа.

Тип возвращаемого значения:

целое, если все аргументы целые; 
вещественное, если хотя бы один аргумент является вещественным.

Если аргументы не заданы, то возвращается 0 (целое). Если количество аргументов равно 1, то возвращается значение равное значению аргумента.

Примеры:

(+ 1 2) возвращает 3
(+ -5 3) возвращает -2
(+ 1 2 3,5) возвращает 6,5

Вернутся к началу справочника…

Функция .

Вычисляет разность чисел.

(- <число1> <число2> … [<числоN>])

Типы аргументов:

целые и вещественные числа.

Тип возвращаемого значения:

целое, если все аргументы целые; 
вещественное, если хотя бы один аргумент является вещественным.

Если аргументы не заданы, то возвращается 0 (целое). Если количество аргументов равно 1, то возвращается значение, вычитаемое из 0 (т.е. <число1> с противоположным знаком). Если количество аргументов равно 2 и более, то из первого числа вычитается сумма всех остальных.

Примеры:

(- 5) возвращает -5
(- -5 3) возвращает -8
(- 10 2 3,5) возвращает 4,5

Вернутся к началу справочника…

Функция *.

Вычисляет проиведение чисел.

(* <число1> <число2> … [<числоN>])

Типы аргументов:

целые и вещественные числа.

Тип возвращаемого значения:

целое, если все аргументы целые; 
вещественное, если хотя бы один аргумент является вещественным.

Если аргументы не заданы, то возвращается 0 (целое). Если количество аргументов равно 1, то возвращается значение аргумента. Если количество аргументов равно 2 и более, то выполняется перемножение всех аргументов.

Примеры:

(* 5) возвращает 5
(* -5 3) возвращает -15
(* 10 2 3,5) возвращает 70.0

Вернутся к началу справочника…

Функция /.

Вычисляет проиведение чисел.

(/ <число1> <число2> … [<числоN>])

Типы аргументов:

целые и вещественные числа.

Тип возвращаемого значения:

целое, если все аргументы целые; 
вещественное, если хотя бы один аргумент является вещественным.

Если аргументы не заданы, то возвращается 0 (целое). Если количество аргументов равно 1, то возвращается значение аргумента. Если количество аргументов равно 2 и более, то выполняется деление первого аргумента на произведение всех остальных.

Примеры:

(/ 5) возвращает 5
(/ -15 5) возвращает -3
(5 10) возвращает 0
(/ 5 10.0) возвращает 0.5

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

Вернутся к началу справочника…

Функция =.

Проверяет равенство аргументов (рекомендуется использовать для чисел или строк).

(= <аргумент1> [<аргумент2>] … [<аргументN>])

Типы аргументов:

любые.

Тип возвращаемого значения:

логическое (Т, если значения аргументов совпали, и nil, если не совпали).

Если задан только один аргумент, то возвращается Т. Если количество аргументов 2 или больше, то при совпадении значений всех аргументов возвращается Т, в противном случаи – nil. При сравнении строк Т выдается только в случае, когда длины всех строк равны и все строки посимвольно совпадают. При сравнении чисел Т выдается также в том случае, когда одни аргументы целые, а другие вещественные, но их значения совпадают.

Примеры:

(= 5)  возвращает Т.
(= 5.00 5 5.0) возвращает Т.
(= 7 “7”) возвращает nil
(= “abc” “abc”) возвращает Т.
(= “ABC” “abc” “abc”) возвращает nil.

Вернутся к началу справочника…

Функция /=.

Проверяет неравенство аргументов (рекомендуется использовать для чисел или строк).

(/= <аргумент1> [<аргумент2>] … [<аргументN>])

Типы аргументов:

любые.

Тип возвращаемого значения:

логическое (Т, если значения каких либо аргументов не совпали, и nil, если совпали). Если задан только один аргумент, то возвращается Т.

Примеры:

(/= 5)  возвращает Т.
(/= 5.00 5 5.0) возвращает nil.
(/= 7 “7”) возвращает Т
(/= “abc” “abc”) возвращает nil.
(/= “ABC” “abc” “abc”) возвращает Т.

Вернутся к началу справочника…

Функция <.

Проверяет расположение аргументов по возрастанию, слева на право

(< <аргумент1> [<аргумент2>] … [<аргументN>])

Типы аргументов:

числа (целые, вещественные) или строки.

Тип возвращаемого значения:

логическое (Т, если значения аргументов расположены по возрастанию, и nil – в противном случае).

Для текстовых строк производится посимвольное сравнение, по возрастанию кодов символов. Если задан только один аргумент, то возвращается Т.

Примеры:

(< 5)  возвращает Т.
(< 1.0 5 7) возвращает Т.
(< 3 3 7) возвращает nil.

Вернутся к началу справочника…

Функция <=.

Проверяет расположение аргументов по не убыванию, слева на право

(<= <аргумент1> [<аргумент2>] … [<аргументN>])

Типы аргументов:

числа (целые, вещественные) или строки.

Тип возвращаемого значения:

логическое (Т, если значения аргументов расположены по не убыванию, и nil – в противном случае).

Для текстовых строк производится посимвольное сравнение, по не убыванию кодов символов. Если задан только один аргумент, то возвращается Т.

Примеры:

(<= 5)  возвращает Т.
(<= 1.0 5 7) возвращает Т.
(<= 3 3 7) возвращает Т.
(<= 3 7 5) возвращает nil.

Вернутся к началу справочника…

Функция >.

Проверяет расположение аргументов по убыванию, слева на право

(> <аргумент1> [<аргумент2>] … [<аргументN>])

Типы аргументов:

числа (целые, вещественные) или строки.

Тип возвращаемого значения:

логическое (Т, если значения аргументов расположены по убыванию, и nil – в противном случае).

Для текстовых строк производится посимвольное сравнение, по убыванию кодов символов. Если задан только один аргумент, то возвращается Т.

Примеры:

(>5)  возвращает Т.
(7 5 3.0) возвращает Т.
(3 7) возвращает nil.
(3 1 1) возвращает nil.

Вернутся к началу справочника…

Функция >=.

Проверяет расположение аргументов по не возрастанию, слева на право

(>= <аргумент1> [<аргумент2>] … [<аргументN>])

Типы аргументов:

числа (целые, вещественные) или строки.

Тип возвращаемого значения:

логическое (Т, если значения аргументов расположены по не возрастанию, и nil – в противном случае).

Для текстовых строк производится посимвольное сравнение, не возрастанию кодов символов. Если задан только один аргумент, то возвращается Т.

Примеры:

(>= 5)  возвращает Т.
(>= 7 5 3.0) возвращает Т.
(>= 3 7) возвращает nil.
(>= 3 1 1) возвращает Т.

Вернутся к началу справочника…

Функция action_tile.

Задает при помощи LISP-выражение действие, которое нужно выполнить при выборе поля или редактировании его содержимого

(action_tile <код> <выражение>)

Аргументы

<код> - строка с кодом поля;
<выражение> - строка с LISP-выражением.

Возвращаемое значение – Т.

Пример:

(action_tile "accept" "(raz_paral) (done_dialog 1)") мы можем прочитать так:

При нажатии на кнопку «ОК» («accept» – код кнопки ОК) выполнить пользовательскую функцию (raz_paral) и функцию (done_dialog 1).

Вернутся к началу справочника…

Функция append

Функция append выполняет слияние списков в один.

(append <список1> [<список2> … <списокN>])

Типы аргументов:

<список1> <список2> <списокN>  — списки.

Возвращаемое значение:

Новый список включающий в себя элементы <список1> , к которому добавлены элементы второго и последующих списков.

Примеры:

(append(5  7)  ‘(3  4))  –  возращает  (5 7 3 4)
(append nil  ‘(3  4))  –  возращает  (3 4)
(append(nil  T)  ‘(3  4))  –  возращает  (nil T 3 4)

Вернутся к началу справочника…

Функция atof.

Преобразует строку в вещественное число.

(atof <строка>)

Тип аргумента:

строка.

Тип возвращаемого значения:

вещественное число.

Примеры:

(atof  “127.78”) возвращает 127.78
(atof “-77.8”) возвращает -77.8
(atof “771234567890”) возвращает 771234567890

Вернутся к началу справочника…

Функция atoi.

Преобразует строку в целое число.

(atoi <строка>)

Тип аргумента:

строка.

Тип возвращаемого значения:

целое число.

Примеры:

(atoi  “127”) возвращает 127.
(atoi “-77.8”) возвращает -77 (дробная часть отбрасывается).

Число символов в строке не должно превышать 10. Если их больше, функция atoi вернет последние 10:

(atoi “771234567890”) возвращает 1234567890

Вернутся к началу справочника…

Функция alert.

Позволяет вывести на экран диалоговое окно с сообщением.

(alert <сообщение>)

Аргумент:

текстовая строка.

Возвращаемое значение nil.

Вернутся к началу справочника…

Функция assoc.

Функция assoc применяется к сложному списку, каждый элемент которого начинается с DXF-кода. Именно по этому коду функция assoc и извлекает элемент из списка.

(assoc <код> <список>)

Типы аргументов:

<код>  - целое число (DXF-код).
<список> - список с данными примитива.

Примеры:

(assoc 0 ((0 . "LINE") (410 . "Model") (8 . "Слой1"))
возвращает (0 . "LINE")
(assoc 410 ((0 . "LINE") (410 . "Model") (8 . "Слой1")) 
возвращает (410 . "Model")
(assoc 8 ((0 . "LINE") (410 . "Model") (8 . "Слой1")) 
возвращает (8 . "Слой1")

Вернутся к началу справочника…

Функция car.

Извлекает первый элемент из списка или DXF-код точечной пары.

(car <список>)

Типы аргументов:

список или точечная пара.

Примеры:

(car ‘(2 3 4 5)) возвращает 2
(car ‘(0 . "LINE")) возвращает 0

Вернутся к началу справочника…

Функция cdr.

Извлекает подсписок без первого элемента или данные точечной пары.

(cdr <список>)

Типы аргументов:

список или точечная пара.

Примеры:

(cdr ‘(2 3 4 5)) возвращает (3 4 5)
(cdr ‘(0 . "LINE")) возвращает "LINE"

Вернутся к началу справочника…

Функция command (похожа на функцию vl-cmdf).

Функция command имитирует ввод пользователя в командной строке AutoCAD.

(command [<параметр1>] … [<параметрN>])

Типы аргументов:

<параметр1>]… <параметрN> - любые выражения, которые нужно передать в командную строку (в качестве аргументов нельзя использовать функции интерактивного ввода (getint, getpoint и т. п.).

Возвращаемое значение –  nil

Пример:

(command "_line" '(300 300) '(700 300) '(700 700) "")

— построить отрезки с координатами первой точки (X=300, Y=300)  координатами второй точки (X=700, Y=300) и координатами третий точки (X=700, Y=700).

Если аргументы отсутствую (command) – это равносильно нажатию пользователем клавиши <Esc>.

Применение функции command смотрите в уроке: AutoLISP. Стандартные команды Автокад.

Вернутся к началу справочника…

Функция  defun

Позволяет пользователю, создать свою функцию.

(defun <имя> ([<аргументы>] / [<временные>])
   <выражения>
)

Аргументы:

<имя> -  любой набор символов, имя новой функции.

Если перед именем добавить префикс «с:», то эту функцию можно будет использовать как стандартную команду AutoCAD.

<аргументы> – символы, разделенные пробелами и используемые в качестве
аргументов новой функции.
<временные> – временные переменные, которые используются в выражениях.
<выражения> - любая последовательность выражений, которые используют
аргументы, временные переменные, глобальные переменные (сохраняют свое
значение после завершения функции) и другие функции.

Возвращаемое значение:

результат последнего вычисляемого выражения.

Пример:

(defun Rasch (a b / с)
    (setq с (* a b))
    (+ с a)
)

Создана новая функция Rasch. У функции два аргумента (a и b) и одна временная переменная (с). В функции два выражения: первое вычисляет произведение a и b, и сохраняет его в переменной с, второе рассчитывает сумму с и а.

Если функция загружена, ее можно вызвать:

Пример вызова функции Rasch:

(Rasch 2 3) возвратит 8.
(Rasch 1 3) возвратит 4.

Вернутся к началу справочника…

Функция distance.

Вычисляет расстояние между двумя точками

(distance <точка1> < точка2>)

Типы аргументов:

списки из двух или из трех чисел. (двухмерные или трехмерные координаты точек)

Примеры:

(distance ‘(0 0) ‘(170.0 0.0)) возвращает 170.0.
(distance ‘(0 0 0) ‘(0.0 270.0 0.0)) возвращает 270.0.

Вернутся к началу справочника…

Функция done_dialog.

Закрывает диалоговое окно и передает значение, которое можно прочитать функцией start_dialog.

(done_dialog  <число>)

Аргумент:

< число > - это положительное число, которое станет возвращаемым значение
функции start_dialog.

Возвращаемое значение:

список из двух целых чисел с координатами левого верхнего угла диалогового
окна в момент его закрытия.

Пример:

(done_dialog 7) может вернуть (200 200)

Функция start_dialog в этом случаи вернет 7.

Вернутся к началу справочника…

Функция start_dialog.

(start_dialog)

Возвращает:

целое число, которое было передано в качестве аргумента функции done_dialog.

Вернутся к началу справочника…

Функция  entget.

Функция entget получает список с характеристиками примитива и является основным средством извлечения информации о геометрии и свойствах.

(entget <примитив>)

Аргумент:

<примитив> - имя примитива

Возвращаемое значение:

список с характеристиками примитива.

Пример:

(entget (entlast))

Возвращает: ((-1 . <Имя объекта: 7ec9f5f0>) (0 . «LINE») (330 . <Имя объекта: 7ec9dcf8>) (5 . «236») (100 . «AcDbEntity») (67 . 0) (410 . «Model») (8 . «Слой1») (100 . «AcDbLine») (10 1132.85 1117.63 0.0) (11 1591.69 1412.34 0.0) (210 0.0 0.0 1.0))

Вернутся к началу справочника…

Функция  entlast.

Функция entlast извлекает имя последнего нарисованного основного  примитива.

Возвращаемое значение

Имя последнего основного примитива

Пример:

(entlast)

Возвращает: <Имя объекта: 7ec9f5f0>

Вернутся к началу справочника…

Функция  entsel.

Функция entsel предлагает пользователю указать объект, выдавая запрос, текст которого задан в качестве аргумента.

(entsel [<запрос>])

Аргумент:

<запрос> - Строковый (текст запроса).

Возвращаемое значение:

Имя объекта и координаты точки, указанной при выборе объекта.

Пример:

(entsel “Выберите отрезок:»: ")

Возвращает: (<Имя объекта: 7ec9f5f0> (1401.43 1292.2 0.0))

Вернутся к началу справочника…

Функция  exit.

Осуществляет принудительный выход из программы.

(exit)

Возвращаемого значения нет. В командную строку выводится сообщение об ошибке:

;ошибка: завершить / выйти прервать

Вернутся к началу справочника…

Функция get_tile.

Читает содержимое поля (значение атрибута value).

(get_tile <код>)

Аргумент:

< код > - строка с кодом поля

Возвращаемое значение:

строка с текущем значением поля.

Пример:

(get_tile “eb_Dl”) может вернуть “200”.

Вернутся к началу справочника…

Функция getpoint.

Позволяет пользователю задать координаты точки при помощи мыши или клавиатуры.

(getpoint [<точка1>] [<запрос>])

Типы аргументов:

<точка1> - списки из двух или трех чисел (двухмерные или трехмерные координаты точек).
<запрос> - текстовая строка, которая подсказывает пользователю, что нужно сделать.

Если указан аргумент <точка1>, то от координат этой точки, при указании точки с помощью мыши, рисуется резиновая нить. И мы задаем свою точку ориентируясь на координаты точки заданные в аргументе <точка1>.

Тип возвращаемого значения:

список из двух или трех чисел (двухмерные или трехмерные координаты точки).

Вернутся к началу справочника…

Функция getvar.

Читает текущее значение системной переменной с наименованием, заданным аргументом <имя>

(getvar <имя>)

Тип аргумента:

текстовая строка с наименование системной переменной.

Возвращаемое значение:

текущее значение указанной системной переменной.

Примеры:

(getvar “osmode”) возвращает значение системной переменной OSMODE. (Текущие значение объективных привязок)
(getvar “CLAYER”) возвращает значение системной переменной CLAYER. (Имя текущего слоя)

Вернутся к началу справочника…

Функция if.

Выполняет условную операцию типа if-then-else (если-то-иначе)

(if <условие> <выражение1> [<выражение2>])

Типы аргументов:

любые.

Тип возвращаемого значения:

вычисленное значение аргумента <выражение1>, если значение <условие> равно Т (истина).

Или вычисленное значение аргумента <выражение2>, если значение <условие> равно nil (ложь).

Примеры:

(if (a>b) 100 7)  возвращает 100, если a>b, и 7 – в остальных случаях.
(if (a=b) (+ a b) (- a b)) возвращает результат вычисления выражения (+ a b), если a=b, иначе результат выражения (- a b)
(if (a=b) (+ a b)) возвращает результат вычисления выражения (+ a b), если a=b, иначе nil (т.к. <выражение2> опущено).

Если функция if использует для обработки по условию не одно выражение, а несколько, то эти выражения следует объединить с помощью функции prong.

Вернутся к началу справочника…

Функция itoa.

Преобразует целое число в строку.

(itoa <число>)

Тип аргумента:

целое число.

Тип возвращаемого значения:

строка.

Примеры:

(itoa 127) возвращает “127”.
(itoa 77) возвращает “77”.

Вернутся к началу справочника…

Функция list.

Объединяет элементы в список.

(list <элемент1> [<элемент2>] … [<элементN>])

В качестве аргументов, образующих список, могут выступать любые объекты, которыми оперирует AutoLISP.

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

Тип возвращаемого значения:

Список.

Примеры:

(list 15.5 10.7 25.7) возвращает (15.5 10.7 25.7)
(list 15.5 nil T) возвращает (15.5 nil T)
(list 2 “abc” (list 1 2 3)) возвращает (2 “abc” (1 2 3))
(list 2 ‘(0 . "LINE")) возвращает (2 (0 . "LINE")) – второй элемент списка точечная пара (0 . "LINE")

Вернутся к началу справочника…

Функция load

Функция load выполняет загрузку файла программы в текущий документ.

(load <файл> [<сообщение>])
<файл> - текстовая строка с именем загружаемого файла;
<сообщение> - строка с текстом сообщения об ошибке, которая появится, если загружаемый файл будет не найден. Аргумент <сообщение> может быть опущен, в этом случаи при ошибке загрузки выдается стандартное сообщение AutoCAD.

Возвращаемое значение:

– В случаи удачной загрузки: Результат последнего выражения или имя последней функции загружаемого файла.
– В случаи неудачной загрузки: Текст сообщения об ошибке.

Пример:

(load “prog.lsp” “Файл не найден”)

Если файла “prog.lsp” не в папках поддержки AutoCAD, в качестве аргумента <файл> нужно указывать полный путь к файлу. Например “d:/MyLisp/ prog.lsp” или “d:\\MyLisp\\ prog.lsp”

Если расширение в имени файла опущено “prog”, то AutoCAD пытается выполнить загрузку, поочередно добавляя следующие расширения:

vlx – файлы vlx-приложений;

fas – файлы fas-приложений;

lsp – Lisp-файлы.

Вернутся к началу справочника…

Функция load_dialog.

Загружает DCL-файл в память.

(load_dialog <файл>)

Аргумент:

 <файл> - текстовая строка с именем загружаемого DCL-файла.

Возвращаемое значение:

 – целое число:
положительное – номер загруженного файла;
отрицательное – если загрузка не произошла.

Пример:

(load_dialog "mp_paral.dcl") возвращает 2.

Вернутся к началу справочника…

Функция new_dialog.

Открывает на экране диалоговое окно, если его диалог уже загружен в память.

(new_dialog <диалог> <номер> [<действие>] [<положение>])

Аргументы:

<диалог> - текстовая строка с именем диалога;
<номер> - положительное число с номером загруженного DCL-файла, 
в котором описан диалог;
<действие> - строка с LISP-выражением, выполняемым по умолчанию;
<положение> - список из двух чисел, задающих в пикселях положение 
левого верхнего угла диалогового окна. Если аргумент опущен, 
диалоговое окно располагается в центре экрана.

Возвращаемое значение:

T - если диалоговое окно открылось;
nul - если произошла ошибка открытия.

Пример:

(new_dialog "mp_paral" dcl_id)

Открывает диалоговое окно mp_paral из DCL-файла с номером dcl_id.

Вернутся к началу справочника…

Функция nth

Функция nth извлекает из списка элемент по порядковому номеру (нумерация элементов списка начинается с нуля).

(nth <номер> <список>)

Типы аргументов:

<номер> — целое не отрицательное число;
<список> — список.

Возвращаемое значение:

Возвращает значение элемента расположенного на соответствующем номере.

Если номер превышает количество элементов списка, то возвращается nil.

Примеры:

(nth 0 ‘ (3 5 7 9))  –  возвращает  3
(nth 1 ‘ (3 5 7 9))  –  возвращает  5
(nth 2 ‘ (3 5 7 9))  –  возвращает  7
(nth 3 ‘ (3 5 7 9))  –  возвращает  9
(nth 4 ‘ (3 5 7 9))  –  возвращает  nil

Вернутся к началу справочника…

Функция not.

Выполняет операцию логического отрицания

(not <аргумент>)

Типы аргументов:

любые.

Тип возвращаемого значения:

логическое (Т, если значение аргумента равно nil, и nil – в противном случае).

Примеры:

(not T)  возвращает nil.
(not nil)  возвращает Т.
(not 7)  возвращает nil.
(not “abc”)  возвращает nil.

Вернутся к началу справочника…

Функция mapcar 

(mapcar '<функция> <список1> [<список2> … <списокN>])

 Типы аргументов:

'<функция> — функция применяемая к элементам списка;
<список1> <список2> <списокN>  — списки значений.

Функция mapcar поочередно применяет <функцию> сначала к первым элементам списков, затем ко втором и так далее. В результате образуется новый список, который и является возвращаемым значением.

Возвращаемое значение:

Новый список.

Примеры:

(mapcar* (5  7)  ‘(3  4))  –  возвращает  (15 28)
(mapcar-(5  4(3  7))  –  возвращает  (2 -3)
(mapcar+(10 10 0)  ‘(0  0  15))  –  возвращает  (10 10 15)

Вернутся к началу справочника…

Функция member

Функцию member  проверяет принадлежность элемента списку

(member <элемент> <список>)

Типы аргументов:

<элемент> — любой;
<список> — список.

Возвращаемое значение:

–  Если < элемент > есть в аргументе <список>, то возвращается остаток списка, начиная с этого элемента.
–  Если < элемента > нет в аргументе <список>, то возвращается nil

Примеры:

(member 7 ‘(3 5 7 9))  –  возвращает  (7 9)
(member 4 ‘(3 5 7 9))  –  возвращает  nil
(member 3 ‘(3 5 7 9))  –  возвращает  (3 5 7 9)

Вернутся к началу справочника…

Функция polar.

(polar <точка> <угол> <расстояние>)

Вычисляет координаты второй точки отстоящей от первой точки, заданной аргументом <точка>, на расстояние, величина которого указана в качестве аргумента <расстояние>

в направлении луча образующим с ось Х угол в радианах, заданный аргументом <угол>.

Типы аргументов:

<точка> - списки из двух или трех чисел (двухмерные или трехмерные координаты точек).
<угол> - вещественное число, представляющее собой угол, в радианах, от положительного направления оси Х.
<расстояние> - число (целое, вещественное).

Возвращаемое значение:

списки из двух или трех чисел.

Примеры:

(polar ‘(0 0 0) (/ pi 2) 200)) возвращает (0.0 200.0 0.0).
(polar ‘(0.0 200.0 0.0) pi  200)) возвращает (-200.0 200.0 0.0).

Вернутся к началу справочника…

Функция princ.

Записывает значение аргумента <аргумент>, который может быть любым выражением AutoLISP, в виде текстовой строки в файл с заданным дескриптором.

(princ [<аргумент>] [<дескриптор>])

Если аргумент <дескриптор> опущен, то  <аргумент> выводится в командной строке

Возвращаемое значение:

вычисленное значение аргумента <аргумент>.

Если <аргумент> — строка, то текст выводится без кавычек.

Если оба аргумента опущены, то функция осуществляет так называемый тихий выход, т.е. не возвращает никакого значении, в том числе nil.

Примеры:

(princ ‘(5.0 7.5 0.0)) возвращает (5.0 7.5 0.0)
(princ “Привет”) возвращает Привет
(princ) не возвращает ничего.

Вернутся к началу справочника…

Функция progn.

Объединяет несколько выражений в одно, когда по синтаксису AutoLISP может использоваться только одно (как в функции if).

(progn выражение1> [<выражение2>] … [<выражениеN>])

Типы аргументов:

любые.

Вернутся к началу справочника…

Функция rtos.

Преобразует вещественное число в строку.

(rtos <число> [<режим> [<точность>]])

Типы аргументов:

<число> - вещественное или целое число.
<режим> - целое (номер режима).

Допустимые значения аргумента <режим>:

1 – научный

2 – десятичный

3 – инженерный (футы и дюймы)

4 – архитектурный (футы и дюймы)

5 – дробный

Чаще всего применяется десятичный режим.

<точность> - количество десятичных знаков в представлении вещественных чисел.

Если аргументы <режим> и <точность> опущены, то в качестве их значений принимаются текущие значения системных переменных LUNITS и LUPREC.

Тип возвращаемого значения: строка

Примеры:

(rtos 127.7) возвращает “127.7”.
(rtos 5.4321 2 1) возвращает “5.4”.

Вернутся к началу справочника…

Функция set_tile.

Позволяет менять содержимое поля, заданное атрибутом value.

(set_tile <код> <значение>)

Аргументы

< код > - строка с кодом поля;
< значение > - строка с новым значением поля.

Возвращаемое значение:

значение второго аргумента.

Пример:

(get_tile “eb_Dl” “300”) возвращает “300”.

Вернутся к началу справочника…

Функция setq

(setq <переменная1> <выражение1> [<переменная2> < выражение2>] … [<переменнаяN> < выражениеN>])

Сохраняет значение < выражения> в <переменной>. Функция setq может использоваться с любым количеством аргументов, которое должно быть обязательно четным.

Типы аргументов:

<переменная> - любые символы, не занятые в стандартных функциях;
<выражение> - любые выражения AutoLISP и имена переменных.

Примеры:

(setq sum (+ 1 2)) – сохраняет в переменной sum значение суммы (+ 1 2), т.е. 3.
(setq p1 (getpoint "\ Укажите базовую точку : ") p2 (polar p1 0 200))

Сохраняет в переменной p1 значение функции getpoint. Затем сохраняет в переменной p2 значение функции polar.

Вернутся к началу справочника…

Функция setvar.

Присваивает новое текущее значение системной переменной с наименованием, заданным аргументом <имя>.

(setvar <имя> <значение>)

Типы аргументов:

<имя> - текстовая строка с наименование системной переменной.
<значение> - число, список или строка. (тип определяется именем системной переменной)

Возвращаемое значение:

новой значение указанной системной переменной.

Примеры:

(setvar “osmode” 1) возвращает 1 (объективная привязка конечная точка)
(setvar “CLAYER” “Слой1”) возвращает “Слой1” - Имя нового текущего слоя.

Вернутся к началу справочника…

Функция  ssadd.

Функция ssadd добавляет примитив в набор.

(ssadd [<примитив> [<набор>]])

Типы аргументов:

<примитив> - имя примитива.
<набор> - имя набора.

Возвращаемое значение:

имя набора.

Пример:

(ssadd ) – создает пустой набор
(ssadd  (entlast)  ssnab) – добавляет последний нарисованный примитив в набор ssnab.

Возвращает: <Selection set: 4>

Вернутся к началу справочника…

Функция  ssget.

Функция ssget формирует набор по запросу или признаку:

(ssget [<метод>] [<точка1>] [<точка2>] [<список>] [<фильтр>])

Если все аргументы опущены:

(ssget) выдает стандартный запрос: «Выберите объекты:» и затем создает набор в соответствии с действиями пользователя. Пользователь может выбирать объекты по одному, рамкой или секущей рамкой. По окончанию выбора нужно нажать клавишу <Enter>.

Аргумент <метод> — это текстовая строка, принимающая одно из следующих значений, характеризующих метод выбора примитивов:

“_C” – выбор секущей рамкой;

“_CP” – выбор секущим многоугольником;

“_F” – выбор секущей линией;

“_I” – текущий выбор с помощью ручек;

“_L” – выбор последнего видимого примитива;

“_P” – последний сформированный ранее набор;

“_W” – выбор рамкой;

“_WP” – выбор многоугольником;

“_X” – вся база примитивов рисунка, включая объекты на замороженных слоях и вне видимой части экрана, с учетом аргумента <фильтр> (в этом случаи аргумент <фильтр> не должен быть опущен);

“_A” – вся база примитивов рисунка, включая объекты на замороженных слоях и вне видимой части экрана;

“_:E” – все примитивы, попадающие в прицел устройства указания;

“_:N” – выбор основных примитивов с помощью подпримитивов (вершин полилинии или компонентов блока); используется только при графическом варианте выбора и только для указания рамкой, секущей рамкой и точкой;

“_:S” – допускается выбор только одного объекта;

Аргумент <точка1> при отсутствии аргумента <точка2> определяет дополнительное условие для добавления в набор: включаемый примитив должен проходить через точку, заданную аргументом <точка1>. Если заданы оба аргумента <точка1> и <точка2>, то определяемые ими точки являются углами простой или секущей рамки (когда в качестве метода выбора применяются рамки, т.е. “_W” или “_C”.

Аргумент <список> представляет собой список, элементами которого являются точки, используемые в методах “_F”, “_WP”, “_CP”.

Аргумент <фильтр> — это список со структурой, аналогичной структуре списка, возвращаемого функцией entget, что позволяет оставить только те примитивы, которые удовлетворяют дополнительным признакам (определенному цвету, слою, весу и т.д.).

Возвращаемое значение:

имя созданного набора (или nil если создать набор не возможно). Имя набора возвращается в следующем виде: <Selection set: 4>

Примеры:

(ssget ‘(0 0 0)) создает набор из примитивов, проходящих через точку (0 0 0).
(ssget “_c” ‘(0 0 0) ‘(100.5 210.34 0)) создает набор из примитивов, выбираемых секущей рамкой с углами в точках  (0 0 0) и (100.5 210.34 0).
(ssget "_x" (list '(0 . "LINE"))) создает набор из всех отрезков рисунка.

В рисунке одновременно может быть открыто не более 128 наборов.

Вернутся к началу справочника…

Функция  sslength.

Вычисляет длину набора, т.е. количество содержащихся в нем примитивов.

(sslength <набор>)

Аргумент:

<набор> - имя набора.

Возвращаемое значение:

целое число.

Вернутся к началу справочника…

Функция  ssname.

Извлекает примитив из набора по порядковому номеру.

(ssname <набор> <номер>)

Аргументы:

<набор> - имя набора;
<номер> - целое число, номер элемента в наборе. Нумерация примитивов в наборе начинается с нуля.

Возвращаемое значение – имя примитива или nil, если примитива с данным номером в наборе нет.

Пример:

(ssname ssnab 0) 
возвращает имя первого примитива в наборе ssnab (<Имя объекта: 7ec9f5f0>)

Вернутся к началу справочника…

Функция  sssetfirst.

(sssetfirst <набор1> [<набор2>])

Функция sssetfirst включает ручки у примитивов, входящих в <набор1>.

А у примитивов входящих в <набор2> включает ручки и подсвечивает их пунктиром.

Возвращаемое значение:

список с именами наборов.

Пример:

(sssetfirst  ssnab1 ssnab2)

Возвращает: (<Selection set: 4> <Selection set: 8>)

ssnab1 – у набора будут включены только ручки.

ssnab2 – у набора будут включены ручки и включено подсвечивание.

<

Вернутся к началу справочника…

Функция strcat.

Сцепление строк.

(strcat [<строка1>] [<строка2>] … [<строкаN>])

Типы аргументов: строковый.

Если аргументы не заданы, то возвращается пустая строка (“”).

Примеры:

(strcat) возвращает “”.
(strcat “С но”  “вым”  “годом”) возвращает “С новым годом”.
(strcat “дом ” (itoa 2) “ кв.”  (itoa 33)) возвращает “дом 2 кв.33”.

Вернутся к началу справочника…

Функция unload_dialog.

Выгружает DCL-файл из память.

(unload_dialog <номер>)

Аргумент:

<номер> - положительное число с номером загруженного DCL-файла.

Возвращаемое значение – nil

Пример:

(unload_dialog 2) возвращает nil.

Вернутся к началу справочника…

Функция vl-cmdf (похожа на функцию command).

Функция vl-cmdf имитирует ввод пользователя в командной строке AutoCAD.

(vl-cmdf  [<параметр1>] … [<параметрN>])

Аргументы:

<параметр1>]… <параметрN> - любые выражения, которые нужно передать в командную строку.

Возвращаемое значение –  nil

Пример:

(vl-cmdf  "_line" '(300 300) '(700 300) '(700 700) "")

— построить отрезки с координатами первой точки (X=300, Y=300)  координатами второй точки (X=700, Y=300) и координатами третий точки (X=700, Y=700).

Если аргументы отсутствую (vl-cmdf ) – это равносильно нажатию пользователем клавиши <Esc>.

Отличие функции vl-cmdf от функции command.

Функция vl-cmdf в качестве аргументов может содержать функции интерактивного ввода (getint, getpoint и т. п.)

Функция command в качестве аргументов не может содержать функции интерактивного ввода (getint, getpoint и т. п.)

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

Функция command передает в командную строку по одному параметру, и AutoCAD по одному пытается их выполнить (Удобно использовать при отладке – видно на каком параметре было прервано выполнение).

Вернутся к началу справочника…

Функция vl-load-all

Функция vl-load-all выполняет загрузку файла программы во все открытые документы и открываемые в данном сеансе AutoCAD.

(vl-load-all <файл>)

Аргумент:

<файл> - текстовая строка с именем загружаемого файла.

Возвращаемое значение:

 –  В случаи удачной загрузки: Т
–  В случаи неудачной загрузки: Возвращаемого значения нет.

Пример:

(vl-load-all “prog.lsp”)

Если файла “prog.lsp” не в папках поддержки AutoCAD, в качестве аргумента <файл> нужно указывать полный путь к файлу. Например “d:/MyLisp/ prog.lsp” или “d:\\MyLisp\\ prog.lsp”

Если расширение в имени файла опущено “prog”, то AutoCAD пытается выполнить загрузку, поочередно добавляя следующие расширения:

vlx – файлы vlx-приложений;

fas – файлы fas-приложений;

lsp – Lisp-файлы.

Вернутся к началу справочника…

Функция while.

Выполняет операцию цикла по многократно проверяемому условию

(while <условие> <выражение1> [<выражение2>] … [<выражениеN>])

Типы аргументов:

любые.

Функция while прекратит свою работу, когда на некотором шаге аргумент <условие>  получит значение nil. При неудачном задании цикл может оказаться бесконечным.

Возвращаемое значение:

значение аргумента <выражениеN>.

Если уже на первом шаге <условие>  имеет значение nil, то функция  while возвращает nil.

Пример:

(while (> n 10)
  (setq a (+ a 10))
  (setq n (+ n 1))
)

Будут несколько раз выполняться строки:
(setq a (+ a 10))
(setq n (+ n 1))
Пока n не станет больше 10

Вернутся к началу справочника…

19 комментарии на “Справочник AutoLISP функций. По алфавиту.

  1. Дмитрий 23.07.2015 14:51

    Здравствуйте, допустим у меня есть программа которая считает сумму полилиний, отрезков, однако я хочу чтобы она выдавала не только сумму, но и размер каждой полилинии отдельно. Ну дело впринципе простое, задать массив, задать цикл, и при каждом щелчке записывать длины этих линий, и в конце вывести на экран))
    так вот, я что то не могу откопать функцию которая задала бы мне линейный массив) есть некий setf однако он не «красит» ее в синий цвет, что наверное не опознает ее как функцию, как команду вывода массива я вообще не нашел)
    Что посоветуете?)

    • Михаил Орлов 23.07.2015 20:46

      Массивов, в классическом понимании, в LISP нет.
      Записывайте длины в список:
      В начале создайте нулевой список

      (setq sp_dlin nil)

      Затем в цикле добавляйте длины в этот список

      (setq sp_dlin (append sp_dlin (list dlina))))

      В конце список можно вывести на экран

      • Дмитрий 24.07.2015 09:07

        Большое спасибо, а выводить ее при помощи команды princ?

        (princ (strcat sp_dlin))?

        Еще небольшой вопрос по функциям, вот в этом коде где мы походу суммируем длину полилиний:

        (setq int:curveEntities (1+ int:curveEntities) 
               rea:length      (+ rea:length 
                          (vlax-curve-getDistAtParam 
                       (vlax-ename->vla-object 
                         (ssname set:entities int:l) 
                       ) ;_ vlax-ename->vla-object 
                       (vlax-curve-getEndParam 
                         (ssname set:entities int:l) 
                       ) ;_ vlax-curve-getEndParam 
                          ) ;_  vlax-curve-getDistAtParam 
                       ) ;_  + 
              ) ;_  setq

        функцией определяющей длину выделенного объекта является

        vlax-curve-getDistAtParam ?

        т.е мне чтобы просто зафиксировать в список выбранную длину
        нужно

        (setq dlln   (*  *MIP-MODEMACRO-SCALE*;(коэффициент масштаба); vlax-curve-getDistAtParam;(та самая функция);)

        а потом уже ее пихать в массив посредством appenda и выводить о_0

  2. Михаил Орлов 27.07.2015 08:58

    Да, все правильно. Сначала сохраняете длину в переменой, затем добавляете ее в список (массив).
    Выводить на печать можно списком:

    (princ sp_dlin)

    Или по одному значению:

    (setq i 0)
    (setq n (length sp_dlin))
    (repeat n
      (setq dlina (strcat "\n" (itoa(nth i sp_dlin))))
      (princ dlina)
      (setq i (+ i 1))
    ); end repeat
    • Дмитрий 10.08.2015 12:01

      Тут такое дело, оно выдает экую неизвестную ошибку.

      î; неверный тип аргумента: numberp: #

      • Дмитрий 13.08.2015 08:03

        Прошу прощения, все я разобрался) дело в том что

        (vlax-curve-getDistAtParam
        (vlax-ename->vla-object
        (ssname set:entities int:l)
        ) ;_ vlax-ename->vla-object
        (vlax-curve-getEndParam
        (ssname set:entities int:l)
        ) ;_ vlax-curve-getEndParam
        ) ;_ vlax-curve-getDistAtParam
        ) ;_ +
        именно этот фрагмент целиком определяет длину полилинии)

  3. Мигран 24.11.2016 12:14

    Здравствуйте
    подскажите пожалуйста как скопировать высоту одной точке другой

    • Михаил Орлов 24.11.2016 18:46

      Просим указать точку 1:

      (setq p1 (getpoint "\nУкажите точку 1: "))

      Раскладываем по координатам:

      (setq x1 (nth 0 p1))
      (setq y1 (nth 1 p1))
      (setq z1 (nth 2 p1))

      Просим указать точку 2:

      (setq p2 (getpoint p1 "\nУкажите точку 2: "))

      Раскладываем по координатам:

      (setq x2 (nth 0 p2))
      (setq y2 (nth 1 p2))
      (setq z2 (nth 2 p2))

      Меняем координату «у» в точки 2 на координату «у» точки 1

      (setq p2 (list x2 y1 z2))

      Рисуем отрезок. (поскольку координаты «у» у точек одинаковы, отрезок будет параллелен оси «Х»)

      (command "_line" p1 p2 "")
      • Мигран 25.11.2016 07:01

        А как можно сделать что бы сама высота второй точки изменилась

        • Мигран 25.11.2016 07:02

          перестроить ее как бы

  4. Максим 09.06.2017 07:43

    Здравствуйте
    подскажите пожалуйста как построить третью точку между двумя другими

    • Михаил Орлов 09.06.2017 19:21
      (setq p1 (getpoint "\ Укажите базовую точку1 : "))
      (setq p2 (getpoint p1 "\ Укажите базовую точку2 : "))

      Точка между р1 и р2

      (setq p3 (mapcar '(lambda (a1 a2)(/ (+ a1 a2) 2)) p1 p2)); координаты середины
  5. Александр 13.06.2017 09:07

    Здравствуйте, хотелось бы узнать где я допустил ошибку в программе, при выборе из списка значений происходит сброс и вместо 180 мм на чертеж выходит 18.

  6. ДИАНА 18.06.2017 17:29

    подскажите как сделать :Разработать программу, которая переносит все дуги чертежа на слой «1», а линии на слой «2».

    • Михаил Орлов 19.06.2017 17:25

      Это можно сделать по разному. Приведу один из возможных вариантов:

      (vl-load-com)
      (setq set_all (ssget "_x"))
      (setq n (sslength set_all))
      
      (while (> n 0)
        (setq ent_obj (ssname set_all (- n 1)))
        (setq vla_obj (vlax-ename->vla-object ent_obj))
        (setq tip_obj (vla-get-ObjectName vla_obj))
      
        (if (= tip_obj "AcDbArc")(vla-put-Layer vla_obj "1"))
        (if (= tip_obj "AcDbLine")(vla-put-Layer vla_obj "2"))
        
        (setq n (- n 1))
      ); end while 
  7. Дмитрий 11.04.2018 10:12

    Спасибо вам огромное за сайт! Не могли ли вы описать (или дать подсказку где искать) процесс вставки заранее созданного блока (не динамического) с помощью аутолиспа.
    Вот я написал программу но она блоки не вставляет(((

    (DEFUN sk_mshu ()

    (SETQ p_msh '(130.0 4600.0))
    (SETQ kl_name 1)
    (SETQ kl_pr 1)

    (SETQ name_mshu (LIST (LIST 1 "TMAD_L_")
    (LIST 2 "TMAD_R_")
    (LIST 3 "TMA_")
    )
    )
    (SETQ pr_mshu (LIST (LIST 1 "is")
    (LIST 2 "pr")
    )
    )
    (SETQ a1 (nth 1(ASSOC kl_name name_mshu)))
    (SETQ a2 (nth 1(ASSOC kl_pr pr_mshu)))

    (SETQ inf_mshu (STRCAT a1 a2))

    (SETQ nam_MSHU (ASSOC kl_msh baza_MSHU))

    (COMMAND "_insert" nam_MSHU p_msh 1 1 0 )
    )

    • Михаил Орлов 14.04.2018 14:23

      Если в выражение:

      (COMMAND "_insert" Name_block point 1 1 0)

      Подставить:
      Name_block — Имя блока
      point — координаты точки вставки
      И блок находится в файле, то оно вставить блок с именем Name_block в точку с координатами point.
      У Вас ошибка в строке:

      (SETQ nam_MSHU (ASSOC kl_msh baza_MSHU))

      kl_msh и baza_MSHU — не определены, и следовательно имеет значение nil
      Поэтому переменная nam_MSHU, которую Вы используете в качестве имя блока тоже nil.
      Посмотрите уроки:https://acad-prog.ru/autolisp-sozdanie-bloka/

  8. Борис 21.01.2021 14:50

    Только стал вникать в lisp. Очень полезный и интересный сайт. Увлёкся автоматизацией работы в автокаде. Нашёл простенькую программу и стал разбираться. В программе попались сокращения ht, at, pt. Где бы узнать о других сокращениях поподробней. C уважением Борис!

Оставить комментарий

Ваш mail не будет опубликован.

Вы можете использовать HTML теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>