
- •8. Графические базы данных (гбд)
- •8.1. Структура и схема функционирования типовых гбд
- •8.2. Постановка задачи проектирования гбд в графической системе AutoCad
- •Точки привязки
- •8.3. Разработка структуры гбд
- •8.4. Пакетные файлы гбд
- •8.5. Параметрические функции гбд
- •8.6. Создание библиотек слайдов гбд
- •8.7. Модификация основного меню AutoCad 2000
- •8.7.1. Файл меню. Его разделы. Управляющие символы
- •8.7.2. Модификация всплывающего и падающего меню AutoCad2000
- •8.7.3. Модификация экранного меню AutoCad2000
- •8.7.4. Модификация графического меню AutoCad2000
8.4. Пакетные файлы гбд
Пакетный файл служит для хранения информации о геометрических и других параметрах вычерчиваемых объектов. Данные файлы могут помещаться в различные каталоги. В разрабатываемой БД пакетный файл, в котором заданы стандартные геометрические параметры трапеций, называется trap.dat. Поместим его в подкаталог Support ка-талога AutoCAD. Содержание этого файла может иметь, к примеру, следующий вид:
(N a b h)
(0 40 20 20)
(1 50 20 10)
(2 50 30 10)
70 40 20)
30 60 15)
Первая строка в данном примере является поясне-нием; её может и не быть. Далее идут непосредственно па-раметры. Каждая строка должна быть в скобках, поскольку при считывании строк файла они интерпретируются как списки.
Замечания.
1.В конце файла не должно быть лишних пробелов иначе программа будет работать некорректно.
2. При указании пути к пакетному файлу в программе символ «\» следует писать дважды, например:
«C:\\AutoCAD\\Support\\trp.dat».
Пакетный файл для стандартных параметров прямо-угольного элемента формируется аналогично. Текст его приведен в Приложении.
8.5. Параметрические функции гбд
Ниже приведен текст функции trap, выполняющей вычерчивание трапеции по параметрам, указанным пользо-
162
ватевателем. Стандартные наборы параметров вводятся по номеру типоразмера автоматически из пакетного файла trap.dat, нестандартные – непосредственно по запросам с клавиатуры. Параметры привязки вводятся пользователем в диалоговом режиме. Данная функция использует вспомо-гательную функцию mas , которая по заданному номеру типоразмера считывает из списка набор геометрических параметров объекта.
(defun c:trap()
(setq a nil b nil h nil)
; Запрос о типе вводимых параметров
(setq v (getint "Введите тип параметров(0-
стандартные, иначе – нестандартные):"))
; Ввод нестандартных параметров c клавиатуры
(if (/= v 0)
(setq a (getreal "Введите a:")
b (getreal "Введите b:") h (getreal "Введите h:"))
)
; Ввод стандартных параметров из файла trap.dat
(if (= v 0) (prong
; 1. Переписывание файла trap.dat в список sp
(setq fl (open "c:\\ACAD\\mas\\trap.dat" "r") sp nil dl nil)
(while (setq dl (read-line fl))
(setq sp (cons (read dl) sp)) ) (close fl)
(setq sp (reverse sp) fl nil)
; 2. Поиск в списке sp строки параметров по
; заданному типоразмеру и запись их в список mas1
(mas "Введите типоразмер трапеции" 0 sp)
; 3.Присваивание переменным а,b,h значений из mas1
(setq a (nth 1 mas1) b (nth 2 mas1) h (nth 3 mas1))
) )
; Ввод параметров вставки с клавиатуры (экрана)
(setq pp (getpoint "Введите точку вставки"))
(setq u (getreal "Введите угол вставки"))
163
; Перевод значения угла вставки в радианы
(setq u (* u (/ pi 180)) d (* 0.5 (- b a)) fi (atan (/ h d)) )
(setq
ps (polar pp (+ u (* 1.5 pi)) (* 0.5 h))
; Расчёт координат вершин (р1,р2,р3,р4)
p1 (polar ps (+ u pi) (* 0.5 b))
p2 (polar p1 (+ u fi) (/ h (sin fi)))
p3 (polar p2 u a)
p4 (polar p3 (+ u (- (* 2 pi) fi)) (/ h (sin fi)))
; Расчёт точек для осей (ра1,ра2,рb1,рb2)
pa1 (polar pp (+ u pi) (* 0.6 (+ a b)))
pa2 (polar pp u (* 0.6 (+ a b)))
pb1 (polar pp (+ u (* 1.5 pi)) (* 0.8 h))
pb2 (polar pp (+ u (* 0.5 pi)) (* 0.8 h))
)
; Запоминание текущего слоя
(setq currsl (getvar "clayer"))
; Открытие нового слоя для изображения трапеции
(command "layer" "m" "trp" "c" "white" "" "l" "continuous" "" "s" "trp" ""
; Вычерчивание трапеции
"line" p1 p2 p3 p4 "c"
; Открытие нового слоя для изображения осей трапеции
"layer" "m" "osi" "c" "magenta" "" "l" "center" "" "s" "osi" ""
; Вычерчивание осей
"line" pa1 pa2 ""162
"line" pb1 pb2 ""
; Возврат в исходный слой, перерисовка экрана
"layer" "s" currsl "" "redraw"
)
)
; Вспомогательная функция для поиска параметров в
; списке х по запрашиваемому типоразмеру
164
(defun mas (text a x)
(setq c 0 mas1 nil)
(while (= mas1 nil)
; Выдача запроса о типоразмере в командную строку
(princ "\n") (princ text)(princ "<") (princ a) (princ ">:")
(setq param (getint))
; Присваивание типоразмера по умолчанию
(if (= param nil) (setq param a))
; Поиск в х строки, у которой позиция с содержит
; значение param и запись её в mas1
(foreach n x (if (= (nth c n) param) (setq mas1 n)))
; Проверка найденных параметров
(if (= mas1 nil) (princ "Неверное значение"))
) )
Очевидно, универсальная функция mas может быть использована не только с рассмотренной выше функцией trap, но и с другими аналогичными параметрическими функциями.
Параметрическая функция orth для вычерчивания прямоугольников может быть создана аналогично. Текст её приведен в Приложении.