Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Книги_AutoCad_2 / Настройка AutoCAD_Sham_Tickoo-Customizing_2006г

.pdf
Скачиваний:
182
Добавлен:
09.04.2015
Размер:
9.06 Mб
Скачать

Использование 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.

434

Глава 12

 

Примеры

 

 

(getvar)

 

 

(getvar

"dimcen")

возвращает значение 0.09

(getvar

"ltscale")

возвращает значение 1.0

(getvar

"limmax")

возвращает значение 12.09,9.00

(getvar

"limmin")

возвращает значение 0.00,0.00

Функции polar и sqrt

Функция polar

Функция polar позволяет определить точку, находящуюся под указанным углом и на заданном расстоянии от данной точки (рис. 12.11). Угол задается в радианах и измеряется против часовой стрелки (т.е. предполагается, что системные переменные ANGBASE и ANGDIR имеют значения по умолчанию). Функция polar имеет следующий формат:

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

где

точка — исходная точка;

угол — угол, образованный исходной и определяемой точками;

расстояние — расстояние между исходной и заданной точками.

Примеры

(polar pt1 ang dis)

(setq pt2 (polar pt1 ang dis))

(setq pt2 (polar '(2.0 3.25) ang dis))

Функция sqrt

Функция sqrt вычисляет квадратный корень из заданного числа, а затем возвращает полученное значение в виде вещественного числа (рис. 12.12). Функция sqrt имеет следующий формат:

(sqrt число)

где

число — число (целое или вещественное), из которого требуется извлечь квадратный корень.

Примеры

(sqrt 144)

возвращает значение 12.0

(sqrt 144.0)

возвращает значение 12.0

(setq x (sqrt 57.25))

возвращает значение 7.566373

(setq x (sqrt (* 25 36.5)))

возвращает значение 30.207615

(setq x (sqrt (/ 7.5 (cos 0.75)))

возвращает значение 3.2016035

(setq hyp (sqrt (+ (* base base) (* ht ht))))

 

Для последнего примера квадрат гипотенузы равен сумме квадратов катетов или как в данном случае, высоты и основания (см. рис. 12.12).

Использование AutoLISP

435

Рис. 12.11. Использование функции polar для определения точки

Рис. 12.12. Пример использования функции sqrt

Пример 4

Напишите программу на языке AutoLISP, с помощью которой вы сможете построить равносторонний треугольник, описанный вокруг окружности (рис. 12.13). Стороны треугольника являются касательными к окружности. Программа должна вывести приглашение, которое позволит определить радиус и координаты центра вписанной окружности.

Рис. 12.13. Равносторонний треугольник, описанный вокруг окружности

436 Глава 12

Шаг 1: запись программы AutoLISP

Для написания программы на языке AutoLISP обычно используется какой-нибудь текстовый редактор. Ниже приведен листинг программы AutoLISP для примера 4:

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

;

(defun dtr (a) (* a (/ pi 180.0)

)

(defun c:trgcir (/ r c d p1 p2 p3) (setvar "cmdecho" 0)

(graphscr)

(setq r (getdist "\n Enter circle radius: ")) (setq c (getpoint "\n Enter center of circle: ") (setq d (/ r (sin(dtr 30))))

(setq p1 (polar c (dtr 210) d) (setq p2 (polar c (dtr 330) d) (setq p3 (polar c (dtr 90) d)

(command "circle" c r) (command "line" p1 p2 p3 "c") (setvar "cmdecho" 1)

(princ)

)

Шаг 2: загрузка программы AutoLISP

Сохраните введенный текст в виде файла с расширением .lsp, а затем загрузите созданную программу с помощью команды APPLOAD, как описано в примере 1.

Упражнение 3

Напишите программу на языке AutoLISP, с помощью которой вы сможете построить равнобедренный треугольник Р1Р2Р3. Основание треугольника (Р1Р2) образует с положительной осью Х угол В (рис. 12.14). Программа должна вывести приглашение, которое позволит вам определить начальную точку Р1, длину основания L1 и углы А и В.

Рис. 12.14. Равнобедренный треугольник, повернутый на угол В

Использование 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”

438 Глава 12

Функция rtos позволяет также устанавливать тип и степень точности единиц измерения. Если эти параметры не указываются, используются текущие настройки программы AutoCAD. В этом случае функция rtos имеет следующий формат:

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

где

число — вещественное число;

режим — тип единиц измерения (десятичные, научные и т.п.);

точность — число десятичных разрядов или знаменатель дробных чисел.

Функция strcase

Функция strcase преобразует символы, содержащиеся в строковом выражении, в строчные или прописные. Функция strcase имеет следующий формат:

(strcase строка [true]),

где

строка — строка, символы которой требуется преобразовать в строчные или прописные;

true — параметр, определяющий регистр преобразованного строкового выражения.

Параметр true не является обязательным. Если он пропущен или имеет значение nil, строковое выражение преобразуется в прописные символы. Если значение этого параметра не равно nil, преобразованная строка будет содержать только строчные символы.

Примеры

(strcase

"Welcome

Home")

возвращает “WELCOME HOME”

(setq t 0) (strcase "Welcome Home" t)

возвращает “welcome home”

(strcase

"Welcome

Home" a)

возвращает “WELCOME HOME”

(setq answer (strcase (getstring "Enter Yes or No: ")))

Функция prompt

Функция prompt используется для отображения сообщений на экране в области командной строки. Содержание сообщения должно быть заключено в кавычки. Функция prompt имеет следующий формат:

(prompt сообщение),

где сообщение — сообщение, которое вы хотите вывести на экран.

Примеры

(prompt "Enter circle diameter: ")

(setq d (getdist (prompt "Enter circle diameter: ")))

Примечание

При использовании системы с двумя мониторами функция prompt выводит сообщение на оба экрана.

Использование 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

Соседние файлы в папке Книги_AutoCad_2