Книги_AutoCad_2 / Настройка AutoCAD_Sham_Tickoo-Customizing_2006г
.pdf
Использование AutoLISP |
431 |
Рис. 12.8, a |
Рис. 12.8, б |
Рис. 12.9, a |
Рис. 12.9, б |
Пример
Функция (setq ang (getangle "Enter angle")) возвращает значение 3,92699 радиан (для угла 135 градусов).
Функция getorient
Функция getorient создает паузу, во время которой вы сможете ввести величину угла, а затем возвращает введенное значение в радианах. Функция getorient имеет следующий формат:
(getorient [точка] [подсказка])
где
•точка — первая точка определяемого угла;
•подсказка — текст приглашения, которое необходимо вывести на экран.
Примеры
(getorient)
(setq ang (getorient)) (setq ang (getorient pt1))
(setq ang (getorient "Enter taper angle"))
(setq ang (getorient pt1 "Enter second point of angle"))
Функция getorient во многом похожа на функцию getangle. В частности, обе функции возвращают значение угла в радианах. Тем не менее, функция getorient всегда измеряет угол против часовой стрелки, начиная от положительной оси X (от горизонтальной оси координат). Эта функция игнорирует значения системных переменных
432 |
Глава 12 |
ANGBASE и ANGDIR. Если настройки, как показано на рис. 12.10, а, не изменились (значения системных переменных ANGDIR и ANGBASE заданы по умолчанию), то при измерении 135-градусного угла функция getorient возвратит значение 2,35619 радиан. В том случае, если настройки изменились (рис. 12.10, б), функция getorient возвратит значение 5,49778 радиан. Несмотря на то, что этот угол измеряется по часовой стрелке, начиная от положительной оси Y, функция getorient игнорирует внесенные изменения и вычисляет значение угла, измеряя его против часовой стрелки от положительной оси X.
Рис. 12.10, a |
Рис. 12.10, б |
Примечание
Функции getangle и getorient позволяют определить угол, введя его числовое значение или указав две точки на чертеже.
При использовании выражения (setq ang (getorient pt1)), где pt1 — ранее определенная первая точка, на экране появится приглашение, позволяющее ввести вторую точку угла. Для этого вам необходимо указать точку на чертеже или ввести ее координаты с клавиатуры.
Угол 180 градусов равен числу π (3,14159 радиан). При вычислении величины угла в радианах используется следующее отношение:
угол в радианах = (pi × угол в градусах)/180
Функции getint, getreal, getstring и getvar
Функция getint
Функция getint создает паузу, во время которой вы сможете ввести целое число. Эта функция всегда возвращает целое число. Если вы введете вещественное число, на экране появится сообщение о необходимости ввести целое число. Функция getint имеет следующий формат:
(getint [подсказка])
где
• подсказка — текст приглашения, которое вы хотите вывести на экран.
Примеры
(getint)
(setq numx (getint))
(setq numx (getint "Enter number of rows: ")) (setq numx (getint "\n Enter number of rows: "))
Использование AutoLISP |
433 |
Функция getreal
Функция getreal создает паузу, во время которой вы сможете ввести вещественное (действительное) число. Эта функция всегда возвращает вещественное число, что происходит даже в том случае, когда вы вводите целое число. Функция getreal имеет следующий формат:
(getreal [подсказка])
где
• подсказка — текст приглашения, которое вы хотите вывести на экран.
Примеры
(getreal)
(setq realnumx (getreal))
(setq realnumx (getreal "Enter num1: ")) (setq realnumx (getreal "\n Enter num2: "))
Функция getstring
Функция getstring создает паузу, которая дает возможность ввести строковое выражение. Эта функция всегда возвращает строковое выражение, что происходит даже в том случае, когда введенная вами строка содержит только числовые значения. Функция getstring имеет следующий формат:
(getstring [cr] [подсказка])
где
•cr — параметр, имеющий значение T или Nil. По умолчанию ему присваивается значение Nil. Значение T, присвоенное этому параметру, позволяет вводить текстовую строку с пробелами. Также следует заметить, что строка должна заканчиваться символом ENTER.
•подсказка — текст приглашения, отображаемого на экране.
Примеры
(getstring)
(setq answer (getstring))
(setq answer (getstring "Enter Y for yes, N for no: ")) (setq answer (getstring "\n Enter Y for yes, N for no: "))
Примечание
Максимальная длина строки составляет 256 символов. Если количество символов, содержащихся в этой строке, превышает указанное число, то это приводит к тому, что “лишние” символы игнорируются.
Функция getvar
Функция getvar дает вам возможность вывести значение системной переменной AutoCAD. Эта функция имеет следующий формат:
(getvar "переменная")
где
• переменная — имя системной переменной AutoCAD.
Использование AutoLISP |
437 |
Упражнение 4
Напишите программу, с помощью которой вы сможете нарисовать шпоночный паз с проведенными осевыми линиями. Программа должна вывести приглашение, которое позволит вам определить длину и ширину паза, а также указать имя слоя, содержащего осевые линии (рис. 12.15).
Рис. 12.15. Шпоночный паз длиной L и шириной W
Функции itoa, rtos, strcase и prompt
Функция itoa
Функция itoa преобразует целое число в строковое выражение и возвращает это число в виде текстовой строки. Функция itoa имеет следующий формат:
(itoa число)
где
• число — целое число, которое нужно преобразовать в строковое выражение.
Примеры
(itoa |
89) |
возвращает “89” |
(itoa |
-356) |
возвращает “–356” |
(setq intnum 7) (itoa intnum) |
возвращает “7” |
|
(setq |
intnum 345) (setq intstrg (itoa intnum)) |
возвращает “345” |
Функция rtos
Функция rtos преобразует вещественное число в строковое выражение и возвращает его в виде текстовой строки. Функция rtos имеет следующий формат:
(rtos число)
где
• число — вещественное число, которое требуется преобразовать в строковое выражение.
Примеры
(rtos |
50.6) |
возвращает “50.6” |
(rtos |
-30.0) |
возвращает “–30.0” |
(setq |
realstrg (rtos 5.25)) |
возвращает “5.25” |
(setq realnum 75.25) (setq realstrg (rtos realnum)) |
возвращает “72.25” |
|
Использование AutoLISP 439
Пример 5
Напишите программу, с помощью которой вы сможете начертить две окружности радиусом r1 и r2, изображающие два колеса ременной передачи, расположенные на расстоянии d друг от друга. Линия, соединяющая центры этих окружностей, пересекается с положительной осью X под углом a, как показано на рис. 12.16.
Рис. 12.16. Две окружности, соединенные касательными
Шаг 1: разработка алгоритма программы
Исходные данные
•Радиус меньшей окружности — r1;
•радиус большей окружности — r2;
•расстояние между окружностями — d;
•угол наклона центральной линии — a;
•центр меньшей окружности — c1.
Выходные данные
•Меньшая окружность радиусом r1;
•большая окружность радиусом r2;
•линии, касательные к окружностям.
Обработка данных
1.Определение расстояний x1 и x2.
2.Определение угла ang.
3.Определение координат точки с2 относительно точки с1.
4.Определение координат точек р1, р2, р3 и р4.
5.Построение меньшей окружности с радиусом r1 и центром с1.
6.Построение большей окружности с радиусом r2 и центром с2.
7.Построение линий, соединяющих точки р1 и р2, а также р3 и р4.
440 Глава 12
Вычисления
•x1 = r2 – r1
•x2 = SQRT [d^2 – (r2 – r1)^2]
•tan ang = x1 / x2
•ang = atan (x1 / x2)
•ala = 90 + a + ang
•alb = 270 + a – ang
•a2a = 90 + a + ang
•a2b = 270 + a – ang
Шаг 2: написание программы AutoLISP
Для записи программы на языке AutoLISP может использоваться любой текстовый редактор. Ниже приведен листинг программы для примера 4. Номера строк в правой
части листинга не являются частью программного кода, а используются только для ссылок.
;Эта программа строит касательные к окружностям шкивов ременной |
1 |
;передачи, расположенным на заданном расстоянии друг от друга |
2 |
; |
3 |
;Эта функция преобразует градусы в радианы |
4 |
(defun dtr (a) |
5 |
(* a (/ pi 180.00)) |
6 |
) |
7 |
;Конец функции dtr |
8 |
;Функция belt строит линии, касательные к окружностям |
9 |
(defun c:belt(/ r1 r2 d a c1 x1 x2 c2 p1 p2 p3 p4) |
10 |
(setvar "cmdecho" 0) |
11 |
(graphscr) |
12 |
(setq r1(getdist "\n Enter radius of small pulley: ")) |
13 |
(setq r2(getdist "\n Enter radius of larger pulley: ")) |
14 |
(setq d(getdist "\n Enter distance between pulleys: ")) |
15 |
(setq a(getangle "\n Enter angle of pulleys: ")) |
16 |
(setq c1(getpoint "\n Enter center of small pulley: ")) |
17 |
(setq x1 (- r2 r1)) |
18 |
(setq x2 (sqrt (- (* d d) (* (- r2 r1) (- r2 r1))))) |
19 |
(setq ang (atan (/ x1 x2))) |
20 |
(setq c2 (polar c1 a d)) |
21 |
(setq p1 (polar c1 (+ ang a (dtr 90)) r1)) |
22 |
(setq p3 (polar c1 (- (+ a (dtr 270)) ang) r1)) |
23 |
(setq p2 (polar c2 (+ ang a (dtr 90)) r2)) |
24 |
(setq p4 (polar c2 (- (+ a (dtr 270)) ang) r2)) |
25 |
; |
26 |
;Следующие функции строят окружности и отрезки |
27 |
(command "circle" c1 p3) |
28 |
(command "circle" c2 p2) |
29 |
(command "line" p1 p2 "") |
30 |
(command "line" p3 p4 "") |
31 |
(setvar "cmdecho" 1) |
32 |
(princ)) |
33 |
