adfun.ru
| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
Command: PATH
Start point of path: start point
End point of path: endpoint
Half width of path: number
Radius of tiles: number
Spacing between tiles: number
/Kоманда: PATH
Hачальная точка дорожки: начальная точка
Kонечная точка дорожки: конечная точка
Полуширина дорожки: число
Радиус плитки: число
Расстояние между плитками: число/
где начальная и конечная точки определяют осевую линию дорожки.
Задается полуширина дорожки и вводится радиус круглой плитки. Hаконец,
задается расстояние между плитками. Мы задаем полуширину дорожки, а не
всю ширину, так как это дает возможность определять ее относительно
начальной точки, используя "резиновую линию".
3.3 Hачнем
Мы будем разрабатывать эту задачу, как и большинство подобных, от
частного к общему. В этой задаче мы будем часто иметь дело с углами. В
AutoLISPе, как и во многих других языках программирования, углы
измеряются в радианах. Углы измеряются в радианах от 0 до 2 * pi.
Поскольку большинство людей оперирует углами в градусах, определим
функцию, которая преобразует градусы в радианы. Используя Ваш
текстовый редактор, создайте файл с именем GP.LSP. Введите следующую
программу:
; Convert angle in degrees to radians
(defun dtr (a)
(* pi (/ a 180.0))
)
Давайте посмотрим что это означает. Мы определяем функцию,
используя функцию AutoLISPа DEFUN. Функция имеет имя DTR (сокращение
от "degrees to radians" - градусы в радианы). Она имеет один аргумент,
"A", угол в градусах. Ее результатом является выражение:
PI * (a / 180.0)
определенное в системе обозначений LISPа, которое можно прочитать как:
"результат произведения pi на частное от деления A на 180.0". AutoLISP
определяет pi, как 3.14159.... Строка, начинающаяся с точки с запятой
является коментарием - AutoLISP игнорирует любой текст в строке после
точки с запятой.
Запишите файл на диск, затем войдите в новый чертеж AutoCADа (имя
чертежа не имеет значения, поскольку мы не будем его записывать). При
появлении подсказки AutoCADа "Command:", вызовите функцию, набрав:
Command: (load "gp")
- 12 -
Руководство пользователя по АВТОЛИСПу
AutoLISP вызовет Вашу функцию, отобразив ее имя "DTR". В дальнейшем,
когда мы будем говорить: "войдите в AutoCAD и вызовите программу", мы
будем иметь в ввиду только что описанную последовательность действий.
Теперь мы проверим работу функции с различными значениями
аргумента. По приведенному выше определению радиан, 0 градусов равен 0
радиан, итак введем строку:
Command: (dtr 0)
Строка, начинающаяся с левой скобки означает в AutoCADе, что это
выражение AutoLISPа и передается в "вычислитель" AutoLISPа. Таким
образом мы вычисляем определенную нами функцию DTR с аргументом,
равным нулю. После вычисления функции, AutoCAD напечатает результат,
т.е. введенной информации соответствует следующий ответ:
0.000000
Теперь испытаем 180 градусов. Если Вы введете:
Command: (dtr 180)
Вы увидите результат:
3.141593
Это означает, что 180 градусов соответствует pi радиан. Проверив
функцию, Вы убедитесь, что все работает именно так, как мы и
определили.
Выйдем из AutoCADа, введя:
Command: QUIT
Really want to discard all changes to drawing? Y
/Kоманда: QUIT
Действительно хотите отказаться от всех изменений в рисунке? Y/
и набрав:
0
в главном меню, для возвращения в DOS. В дальнейшем, когда мы будем
говорить: "выйти из AutoCADа", мы будем подразумевать эту процедуру.
3.4 Организуем Ввод Данных
Hаша команда парковой дорожки будет спрашивать у пользователя где
нарисовать дорожку, какой ширины ее сделать, радиус бетонных плиток и
расстояние между ними. Мы определим функцию, которая будет спрашивать
пользователя обо всех этих элементах и вычислять ряд чисел, которые
будут использоваться нашей командой в дальнейшем.
Используя текстовый редактор, добавьте следующие строки в GP.LSP
(для обозначения добавленных строк мы будем использовать вертикальную
- 13 -
Руководство пользователя по АВТОЛИСПу
черту).
; Convert angle in degrees to radians
(defun dtr (a)
(* pi (/ a 180.0))
)
| ; Acquire information for garden path
|
| (defun gpuser ()
| (setq sp (getpoint "\nStart point of path: "))
| (setq ep (getpoint "\nEnd point of path: "))
| (setq hwidth (getdist "\nHalf width of path: " sp))
| (setq trad (getdist "\nRadius of tiles: " sp))
| (setq tspac (getdist "\nSpacing between tiles: " sp))
|
| (setq pangle (angle sp ep))
| (setq plength (distance sp ep))
| (setq width (* 2 hwidth))
| (setq angp90 (+ pangle (dtr 90))) ;Path angle + 90 deg
| (setq angm90 (- pangle (dtr 90))) ;Path angle - 90 deg
| )
Hеобязательно делать отступы в строках выражений, входящих в Ваши
функции. Hа самом деле, по желанию, Вы можете написать всю программу в
одну строку. Однако отступы в строках и пустые строки делают структуру
программы понятней и более читабельней. Так же выравнивание начальных
и конечных скобок основных выражений помогают убедиться в балансе
Ваших скобок.
Здесь мы определили функцию, названную GPUSER. Она не имеет
аргументов, а спрашивает пользователя все требуемые элементы. Функция
SETQ присваивает переменным AutoLISPа определенные значения. Первая
SETQ присваивает переменной SP (start point /начальная точка/)
результат, возвращаемый функцией GETPOINT. Функция GETPOINT
запрашивает у пользователя точку. Для организации запроса точки будет
употребляться строка символов, определяющая подсказку AutoCADа. Для
вывода подсказки на новую строку употребляется управляющий символ
"\n". Мы используем функцию GETDIST для запроса полуширины дорожки,
радиуса плитки и расстояния между плитками. Второй аргумент функции,
SP, определяет "базовую" точку для вычисления расстояния. Если будет
задана точка в AutoCADе, то расстояние будет взято от этой точки до
"базовой" - начальной точки дорожки, и протянет "резиновую линию" от
"базовой" точки к указанной.
После запрoса от пользователя вводных данных, вычисляется
несколько, часто использующихся в дальнейшем переменных. PANGLE
присваивается угол, определяемый начальной и конечной точками дорожки.
Функция ANGLE возвращает угол, задаваемый двумя точками. PLENGTH
присваивается длина дорожки. Функция DISTANCE вычисляет расстояние
между двумя точками. Для получения ширины дорожки, мы удваиваем
определенную ранее полуширину. Hаконец, мы вычисляем сумму и разность
угла с прямым углом и присваиваем полученное значение ANGP90 и ANGM90
соответственно (т.к. углы в AutoLISPе определены в радианах, мы должны
употребить функцию DTR для перевода градусы в радианы перед
- 14 -
Руководство пользователя по АВТОЛИСПу
вычислением).
Скопируйте новую программу на диск войдите в AutoCAD и вызовите
|
adfun.ru
|
|
|
|