Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
M_Г8_155_181.doc
Скачиваний:
9
Добавлен:
24.04.2019
Размер:
1.42 Mб
Скачать

8.4. Пакетные файлы гбд

Пакетный файл служит для хранения информации о геометрических и других параметрах вычерчиваемых объектов. Данные файлы могут помещаться в различные каталоги. В разрабатываемой БД пакетный файл, в котором заданы стандартные геометрические параметры трапеций, называется trap.dat. Поместим его в подкаталог Support ка-талога AutoCAD. Содержание этого файла может иметь, к примеру, следующий вид:

(N a b h)

(0 40 20 20)

(1 50 20 10)

(2 50 30 10)

  1. 70 40 20)

  2. 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 для вычерчивания прямоугольников может быть создана аналогично. Текст её приведен в Приложении.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]