«GKSM 93» ДИВ

И (ц): имя сегмента

В (ц): выделение

(О = НОРМАЛЬНЫЙ, 1 ^ВЫДЕЛЕННЫЙ) ЗАДАТЬ ПРИОРИТЕТ СЕГМЕНТА

«GKSM 93» ДИП

И (ц): имя сегмента

П (р): приоритет сегмента

ЗАДАТЬ ЧУВСТВИТЕЛЬНОСТЬ К УКАЗАНИЮ

«GKSM 95» Д И Ч

И (ц): имя сегмента

Ч (ц): чувствительность к указанию

(О=УКАЗАННЫЙ, 1=НЕ УКАЗЫВАЕМЫЙ)

  1. Записи пользователя ЯГС

ЗАПИСЬ ПОЛЬЗОВАТЕЛЯ

«GKSM XXX» Д ДН

XXX >100

ДН: данные пользователя (Д байтов)ПРИЛОЖЕНИЕ 8

Справочное

ПРИМЕРЫ ПРОГРАММ

Использование функций ЯГС в программах, написанных на базе языка программирования Паскаль, показано в примерах 1—6.

В примере 1 в пакетном задании создаются примитивы вывода и запомина­ются для долговременного хранения в метафайле ЯГС.

Текст, заключенный в фигурные скобки, является комментарием.

Пример 1,

{Определения и объявления опущены}

ОТКРЫТЬ ЯГС;

{станция вывода метафайла}

ОТКРЫТЬ СТАНЦИЮ (МВЫВ, ФАЙЛ-1, МВЫВ);

{Выходные данные направляются в метафайл}

АКТИВИРОВАТЬ СТАНЦИЮ (МВЫВ);

Прикладная программа формирует значения параметров для функций ЯГС (включая функции сегментации) и вызывает их, например, следующие: ЛОМАНАЯ (число точек, массив координат-точек);

ПОЛИГОНАЛЬНАЯ ОБЛАСТЬ (число точек, массив координат-точек);

ДЕАКТИВИРОВАТЬ СТАНЦИЮ (МВЫВ);

{Метафайл освобождается}

ЗАКРЫТЬ СТАНЦИЮ (МВЫВ);

ЗАКРЫТЬ ЯГС.

В примере 2 в пакетном задании считывается метафайл ЯГС и создаются выходные данные для графопостроителя.

Пример 2.

{Определения п объявления опущены}

ОТКРЫТЬ ЯГС;

{Открывается станция ввода метафайла}

ОТКРЫТЬ СТАНЦИЮ (МВВО, ФАЙЛ-1, МЯГС-ВВОДА);

{Скрывается станция для графопостроителя}

ОТКРЫТЬ СТАНЦИЮ (ГП, ГПДДО, ПЛАНШЕТНЫЙ ГП);

{Выходные данные направляются на графопостроитель} АКТИВИРОВАТЬ РАБОЧУЮ СТАНЦИЮ (ГП);

REPEAT

ПОЛУЧИТЬ ТИП ЗАПИСИ ИЗ МЯГС (МВВО. ТИП ЗАПИСИ, ДЛИНА ЗАПИСИ);

ПРОЧИТАТЬ ЗАПИСЬ ИЗ МЯГС (МВВО, ДЛИНА МАССИВА, МАССИВ);

ИНТЕРПРЕТИРОВАТЬ ЗАПИСЬ (МВВО, ТИП ЗАПИСИ, ДЛИНА МАССИВА,

МАССИВ);

UNTIL ТИП ЗАПИСИ = КОНЕЦ ФАЙЛА;

{Ввод данных на графопостроитель прекращается}

ДЕАКТИВИРОВАТЬ СТАНЦИЮ (ГП);

ЗАКРЫТЬ СТАНЦИЮ (ГП);

{Метафайл освобождается}

ЗАКРЫТЬ СТАНЦИЮ (МВВО);

ЗАКРЫТЬ ЯГС.

В примере 3 в интерактивном задании из памяти долговременного хранения (МЯГС) сегменты считываются и отображаются на поверхности отображения. Оператор выбирает один из сегментов, перемещает его на экране, преобразует и вставляет в создаваемую картину. Создание картины заканчивается нажатием кнопки «конец картины» и картина выводится на графопостроитель.

Сегменты могут быть, например, символами блок-схемы. Они появляются наверху, внизу или у края экрана и используются для построения блок-схемы.

Пример 3.

{Определения и объявления опущены}

ОТКРЫТЬ ЯГС;

(Открывается станция ввода-вывода для устройства отображения на ЭЛТ} ОТКРЫТЬ СТАНЦИЮ (УОЭЛТ, УОДД, ВЕКТОРУОЭЛТ);

{Открывается станция ввода для графопостроителя}

ОТКРЫТЬ СТАНЦИЮ (ГП, ГПДД, БАРАБАННЫЙ ГП);

{Открывается станция ввода метафайла}

ОТКРЫТЬ СТАНЦИЮ (МВВО, ФАЙЛ 1, МЯГС ВВОДА);

{Открывается независимая от станции память сегментов}

ОТКРЫТЬ СТАНЦИЮ (ОПС 1, НРСПСДД, ОПС);

{Содержимое метафайла отображается на устройстве отображения на ЭЛТ} {Если имеются сегменты, они запоминаются в общей памяти сегментов} {Выходные данные направляются на устройство отображения на ЭЛТ} АКТИВИРОВАТЬ СТАНЦИЮ (УОЭЛТ);

{Выходные данные направляются в общую память сегментов}

АКТИВИРОВАТЬ СТАНЦИЮ (ОПС 1);

{Считывается и интерпретируется МЯГС}

REPEAT

ПОЛУЧИТЬ ТИП ЗАПИСИ ИЗ МЯГС (МЯГС ВВ, ТИП ЗАПИСИ, ДЛИНА ЗАПИСИ);

ПРОЧИТАТЬ ЗАПИСЬ ИЗ МЯГС (МЯГС ВВ ДЛИНА МАССИВА, МАССИВ); ИНТЕРПРЕТИРОВАТЬ ЗАПИСЬ (ТИП ЗАПИСИ, ДЛИНА ЗАПИСИ, МАС­СИВ);

UNTIL ТИП ЗАПИСИ=КОНЕЦ ФАЙЛА;

{Освобождается метафайл}

ЗАКРЫТЬ СТАНЦИЮ (МВВОД);

{Вывод данных в общую память сегментов прекращается}

ДЕАКТИВИРОВАТЬ СТАНЦИЮ (ОПС 1);

{С этого момента картина, содержащаяся в метафайле, видна на носителе изо­бражения. Сегменты, содержащиеся в графических данных, могут быть ис­пользованы для создания новой картины, которая будет выведена на графо­построитель}

REPEAT

{Указывается сегмент и обеспечивается точка позиционирования сегмента} {Разрешается ввод входных данных выбора элементов в режиме обработки со­бытий}

ЗАДАТЬ РЕЖИМ УКАЗАНИЯ (УОЛТ, 1, СОБЫТИЕ, ЭХО);

{Разрешается ввод позиций в режиме обработки событий}

ЗАДАТЬ РЕЖИМ УСТРОЙСТВА ВВОДА ПОЗИЦИИ (УОЛТ. 1, СОБЫТИЕ, ЭХО);

FOR 1=1 ТО 2 DO BEGIN

{Считывается одно событие выбора элементов О и одно событие ввода позиций в произвольном порядке}

{Устанавливается время ожидания, равное продолжительности рабочего дня} ВРЕМЯ ОЖИДАНИЯ =8 часов;

{Ожидаются входные данные выбора элементов и ввода позиций}

ОЖИДАТЬ СОБЫТИЕ (ВРЕМЯ ОЖИДАНИЯ, PC, КЛАСС, НОМЕРЛУВ);

КЛАСС = ВЫБОР

{Получено имя сегмента}

ПОЛУЧИТЬ УКАЗАТЕЛЬ (СОСТОЯНИЕ. ИМЯ СЕГМЕНТА, ИДЕНТИФИКА­ТОР ВЫБОРА);

ЗАДАТЬ РЕЖИМ УКАЗАНИЯ (УОЭЛТ, 1, ЗАПРОС, ЭХО) ;

{Получена точка позиционирования сегмента}

ПОЛУЧИТЬ ПОЗИЦИЮ (НОМЕР ПРЕОБРАЗОВАНИЯ 1, ТОЧКА, ЭХО);

ЗАДАТЬ ПРЕОБРАЗОВАНИЕ НОРМИРОВАНИЯ (НОМЕР ПРЕОБРАЗОВА­НИЯ 1);

{Ожидается, что последующие точки должны быть в пределах поля вывода пре­образования нормирования, заданного параметром

НОМЕР ПРЕОБРАЗОВАНИЯ 1- Это преобразование должно иметь номер О, так как никакие преобразования явно не задавались}.

{Подготавливается логическое устройство ввода чисел номер 1, которое будет иметь начальное значение 1, диапазон значений от 0 до 19 и.область эха справа вверху}

ИНИЦИАЛИЗИРОВАТЬ УСТРОЙСТВО ВВОДА ЧИСЛА (УОЭЛТ, 1, 1, 1, (0.95, 1.0), (0.95, 1.0), (0, 10));

{Подготавливается логическое устройство ввода чисел номер 2. которое будет иметь начальное значение 0, диапазон значений от Оі до 3.14 и область эха слева от области логического устройства ввода числа номер 1} ИНИЦИАЛИЗИРОВАТЬ УСТРОЙСТВО ВВОДА ЧИСЛА (УОЛТ, 2.0, 1, (0.90,0.95), (0.95, 1.0), (0, 3.14));

{Подготавливается логическое устройство ввода позиций номер 1, которое бу­дет иметь в качестве начального значения точку позиционирования сегмента и подсказку и эхо в виде вертикальной и горизонтальной пересекающихся линий, проходящих через весь экран}

ИНИЦИАЛИЗИРОВАТЬ УСТРОЙСТВО ВВОДА ПОЗИЦИИ (УОЭЛТ, 1, ТОЧКА 1, НОМЕР ПРЕОБРАЗОВАНИЯ 1, 2, (0.0, 1.0), (0.0, 1.0), ПУСТО); {Разрешается ввод данных с логического устройства ввода числа номер 1 в режиме опроса}

ЗАДАТЬ РЕЖИМ УСТРОЙСТВА ВВОДА ЧИСЛА (УОЭЛТ, 1, ОПРОС. ЭХО); {Разрешается ввод данных с логического устройства ввода числа номер 2 в ре­жиме опроса}

ЗАДАТЬ РЕЖИМ УСТРОЙСТВА ВВОДА ЧИСЛА (УОЭЛТ. 2, ОПРОС, ЭХО); {Разрешается ввод позиций в .режиме опроса}

ЗАДАТЬ РЕЖИМ УСТРОЙСТВА ВВОДА ПОЗИЦИИ (УОЭЛТ. 1, ОПРОС, ЭХО);

{Для того, чтобы можно было указать конец преобразований или завершение создания картины, разрешается ввод данных выбора альтернативы в режиме обработки событий}

ЗАДАТЬ РЕЖИМ ВЫБОРА (УОЭЛТ, 1, СОБЫТИЕ, ЭХО);

{Преобразование сегмента с именем, заданным переменной}

ИМЯ СЕГМЕНТА

{Подготавливается матрица преобразований}

СФОРМУЛИРОВАТЬ МАТРИЦУ ПРЕОБРАЗОВАНИИ ((0.0), (0.0), 0, (1.1), МК, МАТРИЦА);

REPEAT

{Коэффициент маштабирования}

ОПРОСИТЬ УСТРОЙСТВО ВВОДА ЧИСЛА (УОЭЛТ, 1, МАСШТАБ);

{Угол поворота}

ОПРОСИТЬ УСТРОЙСТВО ВВОДА ЧИСЛА (УОЭЛТ, 2, УГОЛ);

{Точка, в которую будет передвигаться сегмент}

ОПРОСИТЬ УСТРОЙСТВО ВВОДА ПОЗИЦИИ (УОЭЛТ, 1, НОМЕР ПРЕОБ­РАЗОВАНИЯ 2, ТОЧКА 2);

IF НОМЕР ПРЕОБРАЗОВАНИЯ 1 = НОМЕР ПРЕОБРАЗОВАНИЯ 2

THEN GO ТО КОНЕЦ ПИКЛА;

{Перемножаются матрицы преобразований}

ВЫЧИСЛИТЬ РЕЗУЛЬТИРУЮЩУЮ МАТРИЦУ ПРЕОБРАЗОВАНИЙ (МАТ­РИЦА, ТОЧКА 1, ТОЧКА 2 ТОЧКА 1 УГОЛ, (МАСШТАБ, МАСШТАБ) МК, МАТРИЦА ИТОГ);

{Сегмент, имя которго задано переменной ИМЯ СЕГМЕНТА, масштабируется с использованием коэффициентов масштабирования по X и Y направлениям, за­данным переменной МАСШТАБ, относительно точки, заданной параметром ТОЧКА 1, поворачивается на угол, заданный параметром УГОЛ, относительно точки, заданной параметром ТОЧКА 1, и, наконец, сдвигается из точки, задан­ной параметром ТОЧКА 1, в точку, заданную параметром ТОЧКА 2}

ЗАДАТЬ ПРЕОБРАЗОВАНИЕ СЕГМЕНТА (ИМЯ СЕГМЕНТА, МАТРИЦА ИТОГ);

ВРЕМЯ ОЖИДАНИЯ: 0;

{Осуществляется проверка: имеются входные данные выбора альтернативы или нет}

ОЖИДАТЬ СОБЫТИЕ (ВРЕМЯ ОЖИДАНИЯ PC, КЛАСС, НОМЕР ЛУВ);

{Преобразование сегмента закончено, если имеются входные данные устройства выбора}

UNTIL КЛАСС-ВЫБОР;

КОНЕЦ ЦИКЛА;

{Прекращается ввод данных с логического устройства ввода числа номер 1 в режиме опроса}

ЗАДАТЬ РЕЖИМ ВВОДА ЧИСЛА (УОЭЛТ, 1, ЗАПРОС, ЭХО);

{Прекращается ввод данных с логического устройства ввода числа номер 2 в режиме опроса}

ЗАДАТЬ РЕЖИМ УСТРОЙСТВА ВВОДА ЧИСЛА (УОЭЛТ, 2, ЗАПРОС, ЭХО); {Прекращается ввод позиций в режиме опроса}

ЗАДАТЬ РЕЖИМ УСТРОЙСТВА ВВОДА ПОЗИЦИЙ (УОЭЛТ, 1, ЗАПРОС, ЭХО);

{Преобразованный сегмент выводится на графопостроитель}

ВЫВЕСТИ СЕГМЕНТ НА СТАНЦИЮ (ГП, ИМЯ СЕГМЕНТА);

ПОЛУЧИТЬ АЛЬТЕРНАТИВУ (СОСТОЯНИЕ ВЫБОРА, АЛЬТЕРНАТИВА);

{Прекращается ввод альтернатив в режиме обработки событий}

УСТАНОВИТЬ РЕЖИМ ВЫБОРА (УОЭЛТ, 1, ЗАПРОС, ЭХО);

{Значение параметра АЛЬТЕРНАТИВА, равное 2, указывает на завершение со­здания картины}

UNTIL АЛЬТЕРНАТИВА = 2 AND СОСТОЯНИЕ ВЫБОРА = ДА ДЕАКТИВИРОВАТЬ РАБОЧУЮ СТАНЦИЮ (УОЭЛТ);

ЗАКРЫТЬ СТАНЦИЮ (УОЭЛТ);

ЗАКРЫТЬ СТАНЦИЮ (ОПС Г);

ЗАКРЫТЬ ЯГС;

В гримере 4 с помощью интерактивной станции генерируется многоуголь­ник, который затем модифицируется в интерактивном режиме и вычерчивается на графопостроителе.

Пример 4.

{Определения и объявления опущены}

ОТКРЫТЬ ЯГС;

ОТКРЫТЬ СТАНЦИЮ (УОЭЛТ, УОЭЛТДД, 3);

АКТИВИРОВАТЬ СТАНЦИЮ (УОЭЛТ);

ОТКРЫТЬ СТАНЦИЮ (ПСЕГ, СЕГДД, ОПС);

АКТИВИРОВАТЬ СТАНЦИЮ (ПСЕГ);

{Устанавливается преобразование нормирования}

ЗАДАТЬ ОКНО (1, ГРАНИЦЫ ОКНА);

ЗАДАТЬ ПОЛЕ ВЫВОДА (1, ГРАНИЦЫ ПОЛЯ);

ЗАДАТЬ ВХОДНОЙ ПРИОРИТЕТ ПОЛЯ ВЫВОДА (1,0, ВЫШЕ);.

{Конструирование сегмента с именем МНОГОУГОЛЬНИК}

СОЗДАТЬ СЕГМЕНТ (МНОГОУГОЛЬНИК);

ЗАДАТЬ ИНДЕКС ЛОМАНОЙ (3);

НОМЕР ТОЧКИ: =1;

ЗАПРОСИТЬ УСТРОЙСТВО ВВОДА ПОЗИЦИИ (УОЭЛТ, 1, СОСТОЯНИЕ, ПРЕОБРАЗОВАНИЕ 1, Т [1]);

ВЫБРАТЬ ПРЕОБРАЗОВАНИЕ НОРМИРОВАНИЯ (ПРЕОБРАЗОВАНИЕ 1);

REPEAT

НОМЕР ТОЧКИ: = НОМЕР ТОЧКИ -Н;

ЗАПРОСИТЬ УСТРОЙСТВО ВВОДА ПОЗИЦИИ (УОЭЛТ, 1, СОСТОЯНИЕ, ПРЕОБРАЗОВАНИЕ, Т [НОМЕР ТОЧКИ]);

UNTIL СОСТОЯНИЕ = ОТБОЙ OR ПРЕОБРАЗОВАНИЕ-ПРЕОБРАЗОВА­

НИЕ 1;

Т [НОМЕР ТОЧКИ]: = Т [1];

ЛОМАНАЯ (НОМЕР ТОЧКИ, Т);

ЗАКРЫТЬ СЕГМЕНТ;

{Подготавливается матрица преобразований}

СФОРМИРОВАТЬ МАТРИЦУ ПРЕОБРАЗОВАНИИ (0.0), (0.0), 0, (1.1), МК,

МАТРИЦА);

REPEAT

ЗАПРОСИТЬ УСТРОЙСТВО ВЫБОРА (УОЭЛТ, 1, СОСТОЯНИЕ, ВЫБОР);

IF СОСТОЯНИЕ = ОТБОИ OR СОСТОЯНИЕ = НЕТ ВЫБОРА GO ТО КО­

НЕЦ ЦИКЛА;

CASE ВЫБОР OF

{Сдвиг многоугольника в заданную позицию}

СДВИГ: BEGIN

ЗАПРОСИТЬ УСТРОЙСТВО ВВОДА ПОЗИЦИИ (УОЭЛТ, 1, СОСТОЯНИЕ,.

ПРЕОБРАЗОВАНИЕ 2, Т1);

IF СОСТОЯНИЕ = ОТБОЙ GO ТО КОНЕЦ ЦИКЛА;

ЗАПРОСИТЬ УСТРОЙСТВО ВВОДА ПОЗИЦИИ (УОЭЛТ, '1, СОСТОЯНИЕ, ПРЕОБРАЗОВАНИЕ 2, Т2);

IF СОСТОЯНИЕ = ОТБОИ OR ПРЕОБРАЗОВАНИЕ = ПРЕОБРАЗОВА­

НИЕ 2, GO ТО КОНЕЦ ЦИКЛА;

ВЫБРАТЬ ПРЕОБРАЗОВАНИЕ НОРМИРОВАНИЯ (ПРЕОБРАЗОВАНИЕ 2);

ВЫЧИСЛИТЬ РЕЗУЛЬТИРУЮЩУЮ МАТРИЦУ ПРЕОБРАЗОВАНИИ

(МАТРИЦА, (0.0), Т2>—Т1, 0, (1. 1), МК, МАТРИЦА ИТОГ);

ЗАДАТЬ ПРЕОБРАЗОВАНИЕ СЕГМЕНТА (МНОГОУГОЛЬНИК, МАТРИ­ЦА ИТОГ);

END;

• (Масштабирование многоугольника)

УВЕЛИЧЕНИЕ: BEGIN

END:

(Поворот многоугольника) поворот: BEGIN

END;

ELSE;

ENDCASE;

ОБНОВИТЬ ИЗОБРАЖЕНИЕ НА СТАНЦИИ (УОЛТ, ВЫПОЛНИТЬ);

UNTIL ВЫБОР = СДВИГ, УВЕЛИЧЕНИЕ, ПОВОРОТ;

(Многоугольник выводится на графопостроитель) ДЕАКТИВИРОВАТЬ СТАНЦИЮ (УОЭЛТ);

ДЕАКТИВИРОВАТЬ СТАНЦИЮ (ПСЕГ);

ОТКРЫТЬ СТАНЦИЮ (ГП, ГПДД, ГПЧПЕРА);

АКТИВИРОВАТЬ СТАНЦИЮ (ГП);

(Задаются представления примитивов для станции)

ЗАДАТЬ ПРЕДСТАВЛЕНИЕ ЦВЕТА (ГП, ЦВЕТ 1, (1, 0, 0));

ЗАДАТЬ ПРЕДСТАВЛЕНИЕ ЛОМАНОЙ (ГП, З, 1, 1.5, ЦВЕТ 1);

ЗАДАТЬ ПРЕДСТАВЛЕНИЕ ТЕКСТА (ГП, 2, 1, 0, ЦВЕТ 1);

ЗАДАТЬ ПОЛЕ ВЫВОДА СТАНЦИИ (ГП, 0, РХ, 0, PY);

ВЫВЕСТИ СЕГМЕНТ НА СТАНЦИЮ (ГП, МНОГОУГОЛЬНИК);

ЗАДАТЬ ИНДЕКС ТЕКСТА (2);

ЗАДАТЬ ВЫСОТУ ЛИТЕРЫ (0.1);

ТЕКСТД(0.5, 0.5), «ЭТО МНОГОУГОЛЬНИК»);

ДЕАКТИВИРОВАТЬ СТАНЦИЮ (ГП);

ЗАКРЫТЬ СТАНЦИЮ (ГП);

•ЗАКРЫТЬ СТАНЦИЮ (УОЭЛТ);

ЗАКРЫТЬ СТАНЦИЮ (ПСЕГ);

ЗАКРЫТЬ ЯГС;

S примере 5 в пакетном режиме считываются команды из произвольного •файла входных данных и генерируется картина на графопостроителе. Считыва­емые команды задают типы графических символов, например, транзисторы, ре­зисторы. емкости и позиции, в которых должны размещаться эти символы. Сна­чала графическое представление символов считывается из метафайла и поме­щаете": в память сегментов, затем интерпретируются команды и графические символы посылаются в рабочую станцию для графопостроителя с помощью функции ВСТАВИТЬ СЕГМЕНТ. Символы представлены в метафайле прими­тивами. сгруппированными в сегменты.

Пример 5.

(О.:;?г ".сипя и объявления опущены)

ОТКРЫТЬ ЯГС;

ОТКРЫТЬ СТАНЦИЮ (МЯГС ВВ, ФАЙЛ 1, МЯГС ВВОДА);

ОТКРЫТЬ СТАНЦИЮ (ПСЕГ, ПСДД, ОПС);

АКТИВИРОВАТЬ СТАНЦИЮ (ПСЕГ);

' REPEAT

ПОЛУЧИТЬ ТИП ЗАПИСИ ИЗ МЯГС (МЯГС ВВ, ТИП ЗАПИСИ, ДЛИНА ЗАПИСИ);

ПРОЧИТАТЬ ЗАПИСЬ ИЗ МЯГС (МЯГС ВВ, ДЛИНА МАССИВА, МАССИВ);

UNTIL ТИП ЗАПИСИ = КОНЕЦ ФАЙЛА;

ИНТЕРПРЕТИРОВАТЬ ЗАПИСЬ (МЯГС ВВ, ТИП ЗАПИСИ, ДЛИНА МАС­СИВА, МАССИВ);

ДЕАКТИВИРОВАТЬ СТАНЦИЮ (ПСЕГ);

{Открывается и активируется станция для графопостроителя}

ОТКРЫТЬ СТАНЦИЮ (ГП, ГПДД, ПЛАНШЕТНЫЙ ГП);