Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
САПР лаба 6.doc
Скачиваний:
9
Добавлен:
24.09.2019
Размер:
67 Кб
Скачать
☆

Тексты изученных программ

npo_naprav: dialog {label = "Настройка данных направляющих";

:edit_box {label = "Ширина направляющей"; key = "kWid"; value = "40"; edit_width = 6;}

:edit_box {label = "Длина секции направляющей"; key = "kLen"; value = "600"; edit_width = 6;}

:edit_box {label = "Расстояние между направляющими"; key = "kDist"; value = "180"; edit_width = 6;}

:spacer {height = l;}

:edit_box {label = "Количество секций в каждой направляющей"; key = "kNumsection";

value = "6"; edit_width = 6;}

:edit_box {label = "Шаг расположения дросселей в секции направляющей"; key = "kStep";

value = "50"; edit_width = 6;}

:spacer {height = l;}

:radio_row {label = "Дроссели располагаются в секции направляющей";

:radio_button {label = "в один ряд"; key = "kOnerow"; value = "l";}

:radio_button {label = "в два ряда"; key = "kTworow"; value = "0"; }

}

:spacer {height = l;}

ok_cancel;

}

(DEFUN show_naprav (/ dcl_id)

(IF (< (SETQ dcl_id (LOAD_DIALOG "//Server/учебная/БМЕ 11-01/для 6 лабыПГПИО/Example_D1.dcl")) 0) (EXIT))

(IF (NOT (NEW_DIALOG "npo_naprav" dcl_id)) (EXIT))

(START_DIALOG)

(UNLOAD_DIALOG dcl_id)

(PRINC)

)

ser:dialog {label = "Ввод фамилии пользователя";

:column{

:edit_box {label = "Фамилия"; edit_width = 40; alignment = centered;

value = ""; key = "usfam";

}// конец edit_box

:spacer {height = 1;}

:text {label = "Bы6op из списков подразделений";alignment = centered;}

:row {

:text {label = "Подразделение 001"; key = "s1";}

:popup_list {key = "p1"; is_enabled = true; label = ""; list = ""; width = 20;}

} // конец row

:row {

:text {label = "Подразделение 002"; key = "s2";}

:popup_list {key ="p2"; is_enabled = true; label = ""; list = ""; width = 20;}

} // конец row

:row {

:text {label = "Подразделение 003"; key = "s3";}

:popup_list {key = "p3"; is_enabled = true; label = ""; list = " "; width = 20;}

} // конец row

:row {

:text {label = "Подразделение 004"; key = "s4";}

:popup_list {key= "p4"; is_enabled = true; label = ""; list = ""; width = 20;}

}// конец row

:spacer {height = 1;}

ok_cancel;

}// конец column

defun usn (/ dcl_id fpolz i plist nlist spi str nsubd);Задание функции пользователя

;введенная фамилия заносится в глобальную переменную pv

(if (not pv) (setq pv ""));проверка пустого ввода

(if (< (setq dcl_id (load_dialog "//Server/учебная/Ручкин/Прикладные подсистемы САПР/Лабораторные работы ППС/Лаб_№6/Example_D2.dcl")) 0) (exit));загрузка диалога

(if (not (new_dialog "user" dcl_id)) (exit));начало диалога

(setq plist nil nlist nil i 0)

;Чтение файлов polz01.txt, polz02.txt, polz03.txt, polz04.txt

;количество подразделений - 4

(repeat 4

(setq spi nil)

(setq i (1+ i) fpolz (strcat "//Server/учебная/Ручкин/Прикладные подсистемы САПР/Лабораторные работы ППС/Лаб_№6/polz0" (itoa i) ".txt"));itoa переводит i из int в строку, strcat собирает строку

(if (findfile fpolz);поиск файла в доступных директориях

(progn

(setq fd (open (findfile fpolz) "r"));открываем файл для чтения

(setq str (read-line fd));чтение первой строки - названия подразделения

(setq nlist (append nlist (list str))); создание списка подразделений

(if str

(while (setq str (read-line fd));цикл чтения файла до конца

(setq spi (append spi

(list str)))

);while

);if str

(close fd);закрыли файл

(setq fd nil)

);prong

(setq nlist (append nlist (list nil)))

);if findfile

(setq plist (append plist (list spi)));формирование списка сотрудников

);repeat

;Заполнение списков диалогового окна

(setq i -1)

(repeat 4

(setq i (1+ i))

(if

(setq nsubd (nth i nlist))

(progn

;С помощью функции set_tile стандартные наименования подразделений

;меняются на элементы списка nlist

(set_tile (strcat "s" (itoa (1+ i))) nsubd)

(if (setq spi (nth i plist))

(progn

(start_list (strcat "p" (itoa (1+ i))))

(mapcar 'add_list spi)

(end_list)

) ;progn

);if

) ;progn

;гашение списка, если файл с фамилиями не найден,

;или число подразделенй меньше 4

(progn

(mode_tile (strcat "s" (itoa (1+ i))) 1)

(mode_tile (strcat "p" (itoa (1+ i))) 1)

);progn

);if

) ; repeat

;== Нужно добавить действия кнопок Инфо и Помощь

;;;косая черта для ввода кавычек ",т.е. (get_tile \"usfam\")

;;;вернет текущее имя пользователя,

;;;установленное в редактируемом поле (при выборе не из списка)

;;;или = пустой ввод => ДО: Фамилия не задана,

;;;иначе конец диалога => OK (код accept)

(action_tile "accept"

(strcat

"(if

(= (setq pv (get_tile \"usfam\"))

\"\")"

"(alert \"Фамилия не задана\")"

"(done_dialog))"

) ; strcat

); action-tile accept

(action_tile "cancel" "(done_dialog)")

;;;Переменная $value, используемая функцией action_tile

;;;для раскрывающегося списка popup_list принимает значения

;;;с номером выбранного пользователем элемента списка

(action_tile "p1" "(set_tile \"usfam\" (nth (atoi $value) (nth 0 plist)))")

(action_tile "p2" "(set_tile \"usfam\" (nth (atoi $value) (nth 1 plist)))")

(action_tile "p3" "(set_tile \"usfam\" (nth (atoi $value) (nth 2 plist)))")

(action_tile "p4" "(set_tile \"usfam\" (nth (atoi $value) (nth 3 plist)))")

(start_dialog)

(unload_dialog dcl_id)

(princ)

);defun usn

…………………………………………………………………………….

//Пример временного выхода из диалогового окна

texp:dialog {lаbеl = "Задание точки";

:text {label = "Введите координаты";}

:text {label = "или укажите точку на экране";}

:spacer {height=1;}

:row {

:column {

:edit_box {label = "X:"; value = "0"; key = "xp";}

:edit_box {label = "Y:"; value= "0"; key = "yp";}

:edit_box {label="Z:"; value="0"; key="zp";}

}//end of column

:button {label = "указать <"; key = "mousep"; height = 6;

fixed_width = true; action = "(done_dialog 3)";}

//Для достижения эффекта временного выхода из окна в атрибуте

//action кнопки с кодом mousep использована функция done_dialog

// с аргументом 3

}//end of row

:spacer {height = 1;}

ok_button;

}

;;;Пример программы управлением временным выходом

;;;из диалогового окна для задания координат точки

(defun text_point (/ dcl_id step pt)

(setq dcl_id (load_dialog "C:/LVR/MyDOCeducat/ПГП/Лекции ПГП/Диал_окна/Example_D3.dcl"))

(setq step 2)

(if (null pt) (setq pt (list 0.0 0.0 0.0)))

(while (>= step 2)

(if (null (new_dialog "texp" dcl_id)) (exit))

;rtos возвращает строку с числом,

;;где атрибуты: 2 - децимальные единицы, 2 - точность

(set_tile "xp" (rtos (car pt) 2 2))

(set_tile "yp" (rtos (cadr pt) 2 2))

(set_tile "zp" (rtos (caddr pt) 2 2))

(action_tile "accept"

(strcat

"(setq x (atof (get_tile \"xp\")))"

"(setq у (atof (get_tile \"yp\")))"

"(setq z (atof (get_tile \"zp\")))"

"(setq pt (list x у z))"

"(done_dialog 1)"

);strcat, atof возвращает число из строки "15"=>15

);action_tile

(setq step (start_dialog))

(cond

((= step 3) (setq pt (getpoint "\nУкажите точку: ")))

((= step 1)

(princ "\nТочка: (")

(princ (rtos x 2 2)) (princ " ")

(princ (rtos у 2 2)) (princ " ")

(princ (rtos z 2 2)) (princ ")")

);= step 1

);cond

);while

(unload_dialog dcl_id)

(princ)

)

dia1: dialog {label = "Диалоговое окно первого уровня";

:edit_box {label = "Ввод названия:"; key = "t1";}

:button {label = "Вызвать следующее окно"; key = "b1";}

ok_button;

}

dia2: dialog {label = "Диалоговое окно второго уровня";

:text {label = "Это вложенное окно"; key = "t2";}

:ok_button {label = "Вернуться";}

}

pass: dialog {label = "Диалоговое окно с паролем";

:edit_box {label = "Введите пароль:"; key= "e1"; password_char = "*";}

ok_button;

}

(defun show4 (/ dcl_id)

(if (< (setq dcl_id (load_dialog "C:/LVR/MyDOCeducat/ПГП/Лекции ПГП/Диал_окна/Example_D4.dcl")) 0) (exit))

(if (not (new_dialog "dia1" dcl_id)) (exit))

(action_tile "t1" "(setq mytxt $value)")

(action_tile "b1" "(opendia2 dcl_id)")

(start_dialog)

(unload_dialog dcl_id)

(princ)

); defun dia1

(defun opendia2 (dc /)

(if (not (new_dialog "dia2" dc)) (exit))

(start_dialog)

);defun dia2

Вывод:

Мы просмотрели файлы и отредактировали пути доступа к этим файлам: Example_D1, Example_D2, Example_D3, Example_D4, Example_D5, Show_D1, Show_D2, Show_D4, text_point.

Создали файлы: polz01, polz02, polz03, polz04.Благодаря этому изучили элементы языка DCL (Dialog Control Language).