adfun.ru
| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
| (drawtiles)
| )
Добавив функцию с именем C:PATH, мы тем самым добавили команду PATH в
AutoCAD. Можете попробовать команду, введя:
Command: PATH
Start point of path: 2,2
End point of path: 9,8
Half width of path: 2
Radius of tiles: .2
Spacing between tiles: .1
/Kоманда: PATH
Hачальная точка дорожки: 2,2
Kонечная точка дорожки: 9,8
Полуширина дорожки: 2
Радиус плитки: .2
Расстояние между плитками: .1/
В результате будет нарисована парковая дорожка, как показано на
рисунке.
3.8 Поставим Точки Hад "i"
В процессе выполнения команды PATH, все команды, передаваемые на
выполнение в AutoCAD, будут отражаться "эхом" в строке командных
подсказок экрана, а также все указываемые точки будут отражаться на
экране в виде маленьких крестиков (маркеров). После того, как
командная фунуция отлажена, такое отражение на экране может быть
отключено с тем, чтобы выполнение определенной AutoLISPом команды
выглядело так же, как выполнение команды AutoCADа. Добавте отмеченные
строки в файл GP.LSP для подавления эха и маркировки:
; Convert angle in degrees to radians
(defun dtr (a)
(* pi (/ a 180.0))
)
; Acquire information for garden path
(defun gpuser ()
- 21 -
Руководство пользователя по АВТОЛИСПу
(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
)
; Draw outline of path
(defun drawout ()
(command "pline"
(setq p (polar sp angm90 hwidth))
(setq p (polar p pangle plength))
(setq p (polar p angp90 width))
(polar p (+ pangle (dtr 180)) plength)
"close"
)
)
; Place one row of tiles given distance along path
; and possibly offset it
(defun drow (pd offset)
(setq pfirst (polar sp pangle pd))
(setq pctile (polar pfirst angp90 offset))
(setq p1tile pctile)
(while (< (distance pfirst p1tile) (- hwidth trad))
(command "circle" p1tile trad)
(setq p1tile (polar p1tile angp90 (+ tspac trad trad)))
)
(setq p1tile (polar pctile angm90 (+ tspac trad trad)))
(while (< (distance pfirst p1tile) (- hwidth trad))
(command "circle" p1tile trad)
(setq p1tile (polar p1tile angm90 (+ tspac trad trad)))
)
)
; Draw the rows of tiles
(defun drawtiles ()
(setq pdist (+ trad tspac))
(setq off 0.0)
(while (<= pdist (- plength trad))
(drow pdist off)
(setq pdist (+ pdist (* (+ tspac trad trad) (sin (dtr
60)))))
(if (= off 0.0)
(setq off (* (+ tspac trad trad) (cos (dtr 60))))
(setq off 0.0)
)
- 22 -
Руководство пользователя по АВТОЛИСПу
)
)
; Execute command, calling constituent functions
(defun C:PATH ()
(gpuser)
| (setq sblip (getvar "blipmode")
| (setq scmde (getvar "cmdecho")
| (setvar "blipmode" 0)
| (setvar "cmdecho" 0)
(drawout)
(drawtiles)
| (setvar "blipmode" sblip)
| (setvar "cmdecho" scmde)
)
Мы использовали функцию GETVAR для получения текущих значений
режимов AutoCADа BLIPMODE и CMDECHO. Они присваиваются переменным
SBLIP и SCMDE с помощью функции SETQ. Далее мы использовали функцию
SETVAR для присвоения этим системным переменным AutoCADа значения
ноль, что приведет к подавлению маркировки и командного эха. Заметим,
что мы проделали это только после того, как закончен ввод входной
информации через функцию GPUSER. Это сделано для того, чтобы в момент
ввода точек пользователем на экране оставались маркеры.
После завершения отрисовки дорожки мы снова обратились к функции
SETVAR, чтобы восстановить первоначальные значения системным
переменным. Запишите файл, вызовите AutoCAD и попробуйте теперь
выполнить команду PATH. Испытайте ее в различных режимах.
3.9 Выводы
За достаточно короткий отрезок времени Вы добавили новую команду
в AutoCAD. Во многих системах САПР Вам необходимо:
- иметь исходные тексты программ;
- быть профессиональным прграммистом;
- быть специалистом в широкой области знаний,
для того чтобы сделать только что проделанное нами. AutoCAD - система
с открытой архитектурой и AutoLISP дает Вам в руки мощные средства,
которые производителя большинства систем САПР оставляют закрытыми от
пользователей.
Вы можете опираться на этот пример как на отправную точку в
освоении AutoLISPа. Возможно у Вас появится желание начать с
модификации и расширения только что созданной команды PATH. Попробуйте
сделать так, чтобы она заполняла дорожку квадратными или
шестиугольными плитками. Для более широкого применения создайте новую
команду, которая запрашивает центральную точку и площадь, а затем
отрисовывает квадрат указанной площади, заполненный плиткой.
Если у Вас появится желание более глубоко изучить работу
использованных Вами функций - обратитесь к последующим главам этого
руководства. Здесь же рассматривалось лишь поверхностное описание
работы функций и их применения. В AutoLISPе заложено много скрытых
возможностей. Для более глубокого их понимания - самое лучшее испытать
- 23 -
Руководство пользователя по АВТОЛИСПу
функции AutoLISPа в работе.
Если Вы применяете AutoLISP - Вы переходите на более высокий
уровень мастерства в работе с AutoCADом. Поскольку Вы используете
AutoLISP для автоматизации рутинных чертежных операций, у Вас появится
возможность уделять больше внимания непосредственно проектированию.
Если Вы овладеете AutoLISPом, он будет долго служить Вам.
lsp-4-0
Глава 4
Функции AutoLISPа
AutoLISP содержит некоторое число заранее определенных функций. Kаждая
функция вызывается как список, первым элементом которого является имя
функции (набранное на верхнем или нижнем регистре), а остальными -
аргументы этой функции (если они есть).
|
adfun.ru
|
|
|
|