Книги_AutoCad_2 / Настройка AutoCAD_Sham_Tickoo-Customizing_2006г
.pdf
Использование AutoLISP |
411 |
Функция “больше или равно”
Формат:
(>=элемент1 элемент2 ...)
Эта функция (>=) сравнивает значения элементов, указанных в скобках. Если первый элемент (элемент1) больше или равен второму (элемент2), функция возвращает значение T. Если это условие не выполняется, функция возвращает значение nil. В первом из приведенных примеров 78 больше 50. Таким образом, это утверждение является истинным, поэтому функция возвращает значение T.
Примеры
(>= |
78 50) |
возвращает “T” |
|
(>= |
"x" |
"y") |
возвращает “T” |
(>= |
"78" |
"80") |
возвращает “nil” |
Функции defun, setq, getpoint и Command
Функция defun
Функция defun используется для определения функций в программе AutoLISP. Эта функция имеет следующий формат:
(defun имя [аргумент])
где
•имя — имя определяемой функции;
•аргумент — список параметров.
Примеры
(defun ADNUM ( ))
Эта функция определяет функцию ADNUM, не имеющую каких-либо параметров или локальных символов. Это означает, что все переменные, используемые в данной программе, являются глобальными переменными. Глобальные переменные сохраняют присвоенные значения после завершения программы.
(defun ADNUM (a b c))
Эта функция определяет функцию ADNUM, которая имеет следующие параметры: a, b и c. Переменные a, b и c получают значения вне выполняемой программы.
(defun ADNUM (/a b))
Эта функция определяет функцию ADNUM, содержащую две локальные переменные a и b. Локальные переменные сохраняют свои значения во время выполнения программы и могут использоваться только в определенной программе.
(defun C:ADNUM ( ))
Выражение C:, стоящее перед именем функции, дает вам возможность выполнить эту функцию, если вы введете ее имя в командную строку AutoCAD. Если выражение C: отсутствует, необходимо указывать имя функции в круглых скобках.
412Глава 12
Примечание
AutoLISP содержит ряд встроенных функций. Имена этих функций не следует присваивать другим функциям или переменным. Ниже приведен список имен, зарезервированных для встроенных функций AutoLISP. (Для получения полного списка встроенных функций AutoLISP обратитесь к руководству “AutoLISP Programmer’s Reference”.)
abs |
ads |
alloc |
and |
angle |
antgos |
append |
apply |
atom |
ascii |
assoc |
atan |
atof |
atoi |
distance |
equal |
fix |
float |
if |
length |
list |
load |
member |
nil |
not |
nth |
null |
open |
or |
pi |
read |
repeat |
reverse |
set |
type |
while |
Функция setq
Функция setq позволяет присваивать переменным различные значения. Эта функция имеет следующий формат:
(setq имя значение [имя значение] ...)
где
•имя — имя переменной;
•значение — значение, присваиваемое переменной.
Значение, присваиваемое той или другой переменной, может быть выражением любого типа (числовым, строковым или буквенно-цифовым.)
Command: (setq X 12)
Command: (setq X 6.5)
Command: (setq X 8.5 Y 12)
В последнем выражении переменной X присваивается значение 8,5, а переменной Y — значение 12.
Command: (setq answer "YES")
В этом выражении переменной answer присваивается строковое значение “YES”. Функция setq может также использоваться в сочетании с другими выражениями.
Ниже приведены примеры использования функции setq для присвоения различных значений тем или иным переменным.
(setq pt1 (getpoint "Enter start point: ")) (setq ang1 (getangle "Enter included angle: ")) (setq answer (getstring "Enter YES or NO: "))
Примечание
В языке AutoLISP используются имена и символы некоторых встроенных функций, которым нельзя присваивать какие-либо значения. В следующих примерах показаны действующие функции, использование которых не допускается. Это связано с тем, что выражения pi и angle являются зарезервированными функциями, которые будут переопределены.
(setq pi 3.0) (setq angle (...))
Использование AutoLISP |
413 |
Функция getpoint
Функция getpoint создает паузу, которая позволяет пользователю ввести координаты X и Y (или X, Y и Z) той или другой точки. Координаты точки могут вводиться с помощью клавиатуры или экранного курсора. Функция getpoint имеет следующий формат:
(getpoint [точка] [подсказка])
где
•точка — ввод координат или выбор точки на чертеже;
•подсказка — текст приглашения, которое будет выводиться на экран.
Примеры
(setq pt1 (getpoint))
(setq pt1 (getpoint "Enter starting point: "))
Примечание
Функция getpoint не позволяет обращаться к другим программам AutoLISP.
Координаты 2Dили 3D-точки всегда определяются по отношению к текущей пользовательской системе координат (UCS — User Coordinate System).
Функция Command
Функция Command используется для выполнения стандартных команд AutoCAD из программ, написанных на языке AutoLISP. Имя команды AutoCAD и имена соответствующих опций необходимо заключать в двойные кавычки. Функция Command имеет следующий формат:
(Command "имя_команды")
где
•Command — функция AutoLISP;
•имя_команды — имя команды AutoCAD.
Пример
(Command "line" pt1 pt2 "")
Здесь
•"line" — имя команды LINE (ОТРЕЗОК);
•pt1 — координаты первой точки;
•pt2 — координаты второй точки;
•"" — две двойные кавычки без пробела между ними, выполняющие функцию команды RETURN.
Примечание
Функция Command стала использоваться для выполнения команды PLOT (ПЕЧАТЬ) только после появления 12-й версии программы AutoCAD. До этого момента выражение (Command “plot” ...) не имело под собой никакой силы. AutoCAD 13 и более поздние версии этой программы дают возможность отправить чертежи на плоттер, используя для этого функцию Command (Command “plot” ...).
414Глава 12
Функция Command в сочетании с командой TEXT (ТЕКСТ) может использоваться также для ввода текстовых данных. Например, введите выражение (Command “text” “4.04” “” “AutoCAD Text”) в командную строку — этот текст автоматически отобразится на текущем чертеже.
Следует заметить, что функция Command не поддерживает использование функций ввода, имеющихся в языке AutoLISP. К функциям ввода относятся getpoint, getstring, getangle и getint. Например, функции (Command “getpoint” ...) или (Command “getangle” ...) являются недействительными. При загрузке программы, содержащей подобные функции, на экране появится сообщение о соответствующей ошибке. Тем не менее, функции ввода можно вывести на экран, заключив их имена в круглые скобки (например, Command “text” (getpoint) (getdist) (getangle) “hello, sailer”).
Пример 1
Напишите программу, которая позволит вам определить вершины треугольника, а затем провести линии через выбранные точки и построить треугольник, показанный на рис. 12.1.
Шаг 1: знакомство с программами AutoLISP
Как правило, программы состоят из трех основных частей: ввод, обработка и вывод данных. Процесс обработки включает в себя генерирование требуемых выходных данных, которые создаются на основе ранее введенных данных (рис. 12.2). Прежде чем писать программу, вам необходимо
определить основные элементы, из которых она будет со- Рис. 12.1. Треугольник Р1Р2Р3 стоять. В нашем примере ввод данных — определение вершин треугольника. Выходные данные представляют собой треугольник, построенный на
чертеже. Процесс обработки включает в себя генерирование треугольника, образуемого путем соединения вершин Р1, Р2 и Р3. Четкое определение основных элементов программы значительно упрощает процесс программирования.
Рис. 12.2. Основные элементы программы
Раздел программы, описывающий процесс обработки данных, имеет первостепенное значение для успешного решения поставленной задачи. Этот раздел может быть простым, но может также содержать сложнейшие вычисления. Если приходится выполнять множество различных вычислений, разбейте программу на несколько разделов (или
Использование AutoLISP |
415 |
даже подразделов), упорядочив их в логическом и систематическом отношении. Не забывайте также о том, что время от времени программу необходимо редактировать. В этом есть определенный смысл, поскольку программу следует документировать таким образом, чтобы обеспечить ясность и однозначность ее изложения. Это позволит другим программистам разобраться в том, что происходит в программе на различных стадиях ее выполнения. Поэтому старайтесь там, где это возможно, вводить описания и определения используемых переменных.
Ввод данных |
Обработка |
Вывод данных |
Определение точки Р1 |
Соединение точек Р1 и Р2 |
Треугольник Р1Р2Р3 |
Определение точки Р2 |
Соединение точек Р2 и Р3 |
|
Определение точки Р3 |
Соединение точек Р3 и Р1 |
|
Шаг 2: написание программы AutoLISP
Для написания программы на языке AutoLISP можно использовать любой текстовый редактор. Ниже приведен листинг программы AutoLISP для примера 1. Номера строк,
указанные в правой части листинга, не являются частью программного кода и используются только для ссылок.
;Эта программа позволяет определить вершины треугольника, |
1 |
|
;введя их координаты с клавиатуры или выделив их на чертеже |
2 |
|
;с помощью экранного курсора. Точки P1, P2 и P3 являются |
3 |
|
;вершинами данного треугольника. |
4 |
|
(defun C:TRIANG1() |
5 |
|
6 |
||
(setq P1 |
(getpoint "\n Enter first point of Triangle: ")) |
7 |
(setq P2 |
(getpoint "\n Enter second point of Triangle: ")) |
8 |
(setq P3 |
(getpoint "\n Enter third point of Triangle: ")) |
9 |
(Command "LINE" P1 P2 P3 "C") |
10 |
|
) |
|
11 |
Пояснения
Строки 1–3
В первых четырех строках содержатся комментарии, которые описывают назначение этой программы. Эти строки имеют первостепенное значение, так как наличие комментариев упрощает редактирование программы. Тем не менее, комментарии должны использоваться только по мере необходимости. Строка комментариев всегда начинается точкой с запятой. При загрузке программы строки, начинающиеся с этого символа, игнорируются.
Строка 5
Это пустая строка, отделяющая раздел комментариев от основной части программы. Пустые строки могут использоваться также для разделения различных модулей программы. Это позволяет упростить идентификацию разделов, содержащихся в программе. Наличие пустых строк на работу программы не влияет.
Строка 6
(defun C:TRIANG1()
В этой строке содержится функция defun, используемая для определения функции TRIANG1. Выражение C:, стоящее перед именем этой функции, дает вам возможность
416 |
Глава 12 |
выполнять функцию TRIANG1 так, как и обычные команды AutoCAD. В том случае, если выражение С: отсутствует, для выполнения функции TRIANG1 вам придется взять ее имя в круглые скобки (TRIANG1). Функция TRIANG1 содержит три глобальных переменных (Р1, Р2 и Р3). Создавая программы на языке AutoLISP, старайтесь на первых порах использовать глобальные переменные, что даст вам возможность определять их значения после загрузки и выполнения программы. Для этого достаточно ввести в командную строку имя переменной, поставив перед ним восклицательный знак (например, Command: !P1). Проверив программу и убедившись в ее работоспособности, сделайте переменные локальными (defun C:TRIANGE1(/P1 P2 P3)).
Строка 7
(setq P1 (getpoint "\n Enter first point of Triangle: "))
Функция getpoint, содержащаяся в этой строке, создает паузу, во время которой пользователь может определить первую вершину треугольника. При этом на экране в области командных строк появляется выражение Enter first point of Triangle (“Укажите первую вершину треугольника”). Для этого необходимо ввести координаты точки с клавиатуры или выбрать точку на чертеже с помощью экранного указателя. После этого функция setq присваивает заданные координаты переменной P1. Параметр \n обеспечивает возврат каретки в исходное положение, в результате чего предложение, следующее за этим параметром, печатается на следующей строке (“n” обозначает “newline”).
Строки 8 и 9
(setq P2 (getpoint "\n Enter second point of Triangle: ")) (setq P3 (getpoint "\n Enter third point of Triangle: "))
Функции, содержащиеся в этих строках, позволяют определить вторую и третью вершины треугольника. Координаты, заданные этим точкам, присваиваются переменным Р2 и Р3. Параметр \n обеспечивает возврат каретки в исходное положение, что позволяет отобразить приглашение на ввод координат в следующей строке.
Строка 10
(Command "LINE" P1 P2 P3 "C")
Функция Command, содержащаяся в этой строке, используется для вызова команды LINE, с помощью которой вычерчиваются линии, соединяющие точки P1 и P2, P2 и P3. Параметр "C" (для вызова опции “Close”) соединяет последнюю точку (Р3) с первой (Р1). Имена команд и опций AutoCAD, используемых в программах на языке AutoLISP, должны указываться в кавычках. Переменные P1, P2 и P3 разделены пробелами.
Строка 11
Эта строка содержит закрывающую круглую скобку, которой завершается определение функции TRIANG1. Закрывающая скобка может быть объединена с предыдущей строкой, но лучше вынести ее в отдельную строку. Это позволит вам выделить строку, которая является концом определения. В представленной программе имеется только одно определение функции, поэтому отличить завершающую строку довольно легко. Но для программ, содержащих большое количество определений или состоящих из нескольких модулей, четкое разграничение элементов программы приобретает особое значение. Круглые скобки и пустые строки помогают идентифицировать начало и конец определений или различных разделов программы.
Использование AutoLISP |
417 |
Загрузка программ на языке AutoLISP
Сохраните введенный текст в виде файла с расширением .lsp. Как правило, существует два имени, ассоциируемых с программой AutoLISP: файловое имя программы и имя функции. Например, triang1.lsp является именем файла, но не именем функции. Файлы AutoLISP имеют расширение .lsp. В каждом файле может быть определена одна или несколько различных функций. Например, функция, описанная в предыдущем примере, называется TRIANG1. Для ее выполнения необходимо загрузить файл программы AutoLISP, в котором была определена эта функция. Для этого откройте графический редактор AutoCAD и загрузите файл AutoLISP, выполнив следующую процедуру.
Загрузка программы AutoLISP выполняется с помощью диалогового окна или командной строки, в которую вводится соответствующая команда. Откройте диалоговое окно Load/Unload Application (Загрузить/Выгрузить приложение) (рис. 12.3), выполнив команду Tools AutoLISP Load (Сервис AutoLISP Загрузить) или выбрав команду Load Application (Загрузить приложение) из меню Tools (Сервис). Это диалоговое окно может использоваться для загрузки файлов приложений LSP, VLX, FAS, VBA, DBX и ObjectARX. Файлы VBA, DBX и ObjectARX загружаются при выборе соответствующего файла. Файлы с расширением LSP, VLX и FAS “выстраиваются” в очередь и загружаются только тогда, когда вы закроете диалоговое окно Load/Unload Application. В окне, расположенном в верхней части диалогового окна, показаны файлы, содержащиеся в выбранном каталоге. Если вам необходимо изменить тип файла, введите выражение (*.lsp) в текстовое окно Files of type (Тип файла) или выберите нужный тип файла в раскрывающемся списке. Чтобы загрузить определенное приложение, выделите нужный файл и щелкните на кнопке Load (Загрузить) или дважды щелкните мышью на имени соответствующего файла. В следующих разделах вы познакомитесь с другими опциями диалогового окна Load/Unload Application.
Рис. 12.3. Загрузка файлов AutoLISP с помощью диалогового окна Load/Unload Application
418 |
Глава 12 |
Кнопка Load
Кнопка Load используется для загрузки или перезагрузки выделенных файлов. Файлы могут быть выбраны из списка файлов в верхней части диалогового окна, а также из вкладки Loaded Applications или History List. Файлы ObjectARX не перезагружаются. Вам придется вначале выгрузить файлы ObjectARX, а затем загрузить из повторно.
Вкладка Loaded Applications
При переходе на вкладку Loaded Applications программа AutoCAD отображает список приложений, загруженных в настоящее время. Чтобы ввести в этот список другие приложения, выберите файл из списка, находящегося в верхней части диалогового окна, и перетащите его в список Loaded Applications.
Вкладка History List
При переходе на вкладку History List программа AutoCAD отображает список файлов, загруженных с установленным флажком опции Add to History. Если флажок этой опции не установлен, то при перетаскивании файлов из списка в окно History List приложения успешно загружаются, но имена файлов в списке History List не отображаются.
Флаговая кнопка Add to History
Если флажок опции Add to History установлен, то при перетаскивании файлов из списка, расположенного в верхней части диалогового окна, в окно History List, имена этих файлов вводятся в список History List.
Кнопка Unload
Кнопка Unload появляется в диалоговом окне при переходе на вкладку Loaded Applications. Чтобы выгрузить то или иное приложение, выделите имя соответствующего файла в списке Loaded Applications и щелкните на кнопке Unload. Файлы LISP и ObjectARX, не внесенные в список разгрузки, не выгружаются.
Кнопка Remove
Кнопка Remove появляется в диалоговом окне при переходе на вкладку History List. Чтобы удалить файл из списка предыстории, выделите его имя в списке History List, а затем щелкните на кнопке Remove.
Пиктограмма Startup Suit
Файлы, перечисленные в диалоговом окне Startup Suit, автоматически загружаются при каждом запуске программы AutoCAD. При щелчке на пиктограмме Startup Suit AutoCAD отображает диалоговое окно Startup Suit, содержащее список соответствующих файлов. Чтобы ввести в список дополнительные файлы, щелкните на кнопке Add. Можно также перетащить нужные файлы из списка, расположенного в верхней части диалогового окна, оставив их на пиктограмме Startup Suit. Чтобы добавить файлы, перечисленные в списке History List, щелкните на имени файла правой кнопкой мыши и выберите опцию Add to Startup Suit из контекстного меню.
Использование AutoLISP |
419 |
Для загрузки программы AutoLISP можно также использовать команду LOAD, имеющую следующий формат:
Command: (load "[путь]имя_файла")
где
•Command: — приглашение на ввод команды, используемое в программе AutoCAD;
•load — команда, выполняющая загрузку файла программы AutoLISP;
•[путь]имя_файла — путь и имя файла программы AutoLISP.
Имя файла и необязательное путевое имя программы AutoLISP необходимо указывать в кавычках. Кроме этого выражения load и имя_файла должны быть взяты в круглые скобки. Если скобки отсутствуют, программа AutoCAD вместо файла AutoLISP попытается загрузить файл формы или текстового шрифта. Отделять пробелом параметры load и имя_файла не требуется. Если приложение успешно загружено, имя соответствующей функции появится на экране в области командной строки.
Чтобы запустить программу, введите имя функции в командную строку AutoCAD (Command: TRIANG1), а затем нажмите клавишу <Enter>. Если в имени функции, содержащейся в данной программе, отсутствует параметр C:, то при запуске программы имя этой функции необходимо указывать в круглых скобках.
Command: TRIANG1 или Command: (TRIANG1)
Примечание
При определении путевого имени файла, требуемого для загрузки программы AutoLISP, следует использовать левую косую черту. Например, если файл программы TRIANG1 находится на диске С: в подкаталоге LISP, то команда, используемая для загрузки файла, будет иметь следующий вид. (Вместо левой косой черты можно также использовать двойную обратную косую черту (//).)
Command: (load "c:/lisp/triang")
или
Command: (load "c:\\lisp\\triang")
Совет
Для загрузки приложений можно также использовать стандартный метод “drag-and- 


drop”, используемый в операционной системе Windows. Чтобы загрузить программу AutoLISP, выделите файл в окне просмотра Windows Explorer, а затем перетащите его в графическое окно программы AutoCAD. Выбранная вами программа будет автоматически загружена.
Упражнение 1
Напишите программу AutoLISP, которая начертит линию, проходящую через две точки (рис. 12.4). Эта программа должна вывести приглашение, которое позволит пользователю определить координаты X и Y первой и второй точек.
Рис. 12.4. Линия, проходящая через точки P1 и P2
420 Глава 12
Функции getcorner, getdist и setvar
Функция getcorner
При выполнении функции getcorner создается пауза, которая дает вам возможность определить координаты точки. Для этого необходимо ввести координаты с клавиатуры или определить местоположение точки с помощью экранного перекрестья. При использовании этой функции требуется также указать исходную точку. При перемещении курсора, имеющего форму перекрестья, на экране отобразится прямоугольный контур, одной из вершин которого будет указанная точка. Функция getcorner имеет следующий формат:
(getcorner точка [подсказка])
где
•точка — исходная точка;
•подсказка — текст приглашения, отображаемого на экране.
Примеры
(getcorner pt1)
(setq pt2 (getcorner pt1))
(setq pt2 (getcorner pt1 "Enter second point: "))
Примечание
Местоположение исходной (или базовой) точки и точки, выбранной при выполнении функции getcorner, определяется по отношению к текущей пользовательской системе координат (ПСК).
Если вы выбрали 3D-точку, имеющую координаты X, Y и Z, то координата Z игнорируется. В этом случае координата Z рассматривается как высота точки, расположенной над плоскостью чертежа.
Функция getdist
Функция getdist создает паузу, которая позволяет определить расстояние между ка- кими-либо точками, а затем возвращает введенное значение в виде вещественного (действительного) числа. Функция getdist имеет следующий формат:
(getdist [точка] [подсказка])
где
•точка — точка, используемая в качестве точки отсчета;
•подсказка — текст приглашения, которое необходимо вывести на экране.
Примеры
(getdist)
(setq dist (getdist)) (setq dist (getdist pt1))
(setq dist (getdist "Enter distance"))
(setq dist (getdist pt1 "Enter second point for distance: "))
Чтобы ввести расстояние, достаточно выбрать две точки на чертеже. Например, если процесс присваивания значений описывается выражением (setq dist (getdist)), можете ввести число или выделить две точки. В том случае, когда используется выражение (setq dist (getdist pt1)), в котором первая точка (pt1) уже определена, необходимо
