Схема потока данных для устройства ввода позиции приведе­на иа черт. 10.

  1. Преобразование с номером ноль имеет вначале наивыс­ший входной приоритет ввода, поэтому входные данные устройст­ва ввода позиции в МК будут совпадать с НК до тех пор, пока не будет задано преобразование нормирования с более высоким прио­ритетом ввода. Если какое-либо преобразование нормирования больше не будет использоваться для преобразования входных дан­ных устройства ввода позиции в МК, оно может быть сделано фак­тически недоступным путем назначения ему более низкого входно­го приоритета поля вывода, чем у преобразования с номером ноль.

Допускается изменять входной приоритет поля вывода при вво­де и у преобразования с номером ноль.

  1. В отчете о событии, помещенным в очередь событий ус­тройством ввода позиций в режиме СОБЫТИЕ, позиция из КУ

Схема потока входных данных для устройства ввода позиции

Черт. 10



«преобразована в соответствующую позицию в МК. Если во время выполнения преобразований станции и нормирования их парамет- рЬЕ изменяются, то может возникнуть конфликтная ситуация. Поэ­тому при реализации следует рассматривать преобразования как ресурсы, которые могут захватываться и освобождаться конкури­рующими процессами.

    1. В течение промежутка времени между занесением от­чета о событии в очередь событий и выполнением функции ОЖИ­ДАТЬ СОБЫТИЕ, при котором из очереди удаляются входные данные устройства ввода позиции, прикладная программа может изменить параметры преобразования нормирования и преобразо­вания станции. Чтобы введенная позиция в КУ соответствовала позиции в МК, полученной из очереди событий, прикладная прог­рамма не должна изменять параметры преобразований пока уст­ройство ввода позиций находится в режиме СОБЫТИЕ.

  1. Преобразование входных данных устройства ввода по­следовательности позиций

    1. Замечания, которые касались преобразования данных, вводимых с устройства ввода позиций, применимы и к преобра­зованию входных данных устройства ввода последовательности позиций, но они усложняются тем, что преобразование осуществ­ляется над множеством точек.

При генерации каждой точки последовательности позиций коор­динаты этой точки преобразуются из КУ в НК с помощью преоб­разования, обратного преобразованию станции. Входные данные устройства ввода последовательности позиций можно получить лишь для позиций, лежащих внутри той части текущего поля вы­вода станции, на которую отображается текущее окно станции (по аналогии с получением входных данных устройства ввода позиции). Таким образом, входные данные устройства ВВОДА ПОСЛЕДО­ВАТЕЛЬНОСТИ ПОЗИЦИИ’всегда состоят из точек в НК в диа­пазоне [0., 1.] X [0., 1.].

  1. Чтобы передать прикладной программе значения коор­динат точек в мировых координатах, координаты точки должны быть преобразованы из НК в КУ преобразованием, обратным од­ному из преобразований нормирования. Позиции в НК, получен­ные от устройства ВВОДА ПОСЛЕДОВАТЕЛЬНОСТИ ПОЗИ­ЦИЙ, сравниваются с полями вывода преобразований нормирова­ния с целью найти такое преобразование нормирования, поле вы­вода которого содержит все эти точки и имеет наивысший приори­тет.

  2. Точки, полученные от устройства ввода последователь­ности позиций, затем преобразуются с помощью преобразования, об­ратного этому преобразованию нормирования, и передаются при­кладной программе в МК вместе с номером использованного пре­образования нормирования.

Если устройство ВВОДА ПОСЛЕДОВАТЕЛЬНОСТИ ПОЗИ­ЦИЙ находится в режиме ОПРОС, то используемое преобразова­ние нормирования может изменяться между последовательными опросами.

При работе в режиме СОБЫТИЕ может возникнуть конфлик­тная ситуация, аналогичная той, которая возникает при работе с устройством ввода позиции. В течение промежутка времени между занесением отчета о событии в очередь событий и выполнением фун­кции ОЖИДАТЬ СОБЫТИЕ, при котором из очереди удаляются входные данные устройства ВВОДА ПОСЛЕДОВАТЕЛЬНОСТИ ПОЗИЦИИ, прикладная программа может изменить параметры преобразования нормирования и преобразования станции. Чтобы введенные оператором позиции в КУ соответствовали позициям в МК, полученным из очереди событий, прикладная программа не должна менять параметры преобразований нормализации, пока устройство ВВОДА ПОСЛЕДОВАТЕЛЬНОСТИ ПОЗИЦИИ на­ходится в режиме СОБЫТИЕ.

  1. Сегменты

    1. Понятие о сегментах

      1. В' ЯГС графические примитивы вывода могут быть объ­единены в сегменты, а также могут создаваться вне сегментов. Каж­дый сегмент имеет свое уникальное имя, задаваемое из приклад­ной программы. Допускаются следующие действия над сегмента­ми:

преобразование;

изменение видимости (видимый/невидимый);

выделение (например мерцанием);

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

изменение чувствительности к указанию;

удаление;

изменение имени;

вставление сегмента в отрытый сегмент или в поток примити­вов вне сегментов.

Этим операциям подвергаются только примитивы, входящие в состав сегментов. Прикладная программа не имеет доступа к при­митивам, созданным вне сегментов, после того, как они были сге­нерированы.

  1. Каждый примитив в сегменте имеет связанный с ним ИДЕНТИФИКАТОР УКАЗАНИЯ, который образует второй уро­вень именования. Единственной задачей ИДЕНТИФИКАТОРА УКАЗАНИЯ является идентификация примитивов, его нельзя ис­пользовать для других целей. Этот уровень именования введен в ЯГС для уменьшения накладных расходов при работе с сегмента­ми в приложениях, где при вводе необходимо различать большое число отдельных частей изображения, а необходимость в преоб­разованиях сегментов менее важна.

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

ЗАДАТЬ ИДЕНТИФИКАТОР УКАЗАНИЯ (4);

СОЗДАТЬ СЕГМЕНТ (1);

Функции вывода; {сегмент-1, ИДЕНТИФИКАТОР УКАЗА­НИЯ-4}

ЗАДАТЬ ИДЕНТИФИКАТОР УКАЗАНИЯ (2);

Функции вывода; {сегмент-1, ИДЕНТИФИКАТОР УКАЗА­НИЯ-2}

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

Функции вывода; {примитивы не указываемы, ИДЕНТИФИКА­ТОР УКАЗАНИЯ-2)

ЗАДАТЬ ИДЕНТИФИКАТОР УКАЗАНИЯ (5);

Функции вывода; {примитивы не указываемы, ИДЕНТИФИКА­ТОР УКАЗАНИЯ-5}

СОЗДАТЬ СЕГМЕНТ (2);

Функции вывода; {сегмент-2, ИДЕНТИФИКАТОР УКАЗА­НИЯ-5}

ЗАДАТЬ ИДЕНТИФИКАТОР УКАЗАНИЯ (3);

Функции вывода; {сегмент-2, ИДЕНТИФИКАТОР УКАЗА­НИЯ-3}

ЗАКРЫТЬ СЕГМЕНТ (2).

  1. После закрытия сегмента примитивы, входящие в его состав, уже не могут быть изменены; нельзя также добавить в сег­мент новые примитивы или удалить существующие. Не предусмот­рено никаких функций по расширению сегмента после его закры­тия. Вместе с примитивами в памяти сегментов сохраняются пря­моугольники отсечения и атрибуты примитивов (геометрические атрибуты, атрибуты, управляющие негеометрическими характери­стиками и ИДЕНТИФИКАТОР УКАЗАНИЯ). Однако допускается выполнять геометрические преобразования, изменять атрибуты сегмента, вносить изменения в таблицы связок станции и таблицы цвета, на которые есть ссылки внутри сегмента. Все значения, опи­сывающие состояние сегмента (например имя, атрибуты сегмен­та и список станций, активных во время создания сегмента), запо­минаются в таблице состояния сегмента, которая хранится в ЯГС в течение всего времени существования сегмента.

  2. Каждый сегмент запоминается на всех станциях, ак­тивных в момент создания сегмента (СОЗДАТЬ СЕГМЕНТ). Его можно удалить со всех графических станций функцией УНИЧТО­ЖИТЬ СЕГМЕНТ. Он может быть удален также с конкретной станции функцией УДАЛИТЬ СЕГМЕНТ ИЗ СТАНЦИИ. Можно удалить все сегменты, записанные в память определенной стан­ции, путем обращения к функции ОЧИСТИТЬ СТАНЦИЮ.

Память сегментов на станциях ВЫВОД и ВВОД/ВЫ- ВОД называется памятью сегментов станции (ПСС). ЯГС под­держивает также и другую систему памяти для независимого от станции хранения изображений во время выполнения прикладной задачи, которая называется общей памятью сегментов (ОПС). Сегменты из ППС нельзя пересылать на другие станции, в то вре­мя как из ОПС можно.

Сегменты имееют свои уникальные имена в пределах всей па­мяти сегментов. Реализация ЯГС должна обеспечивать достаточ­но большое число доступных имен сегментов (например 32000).

  1. Атрибуты сегментов

    1. Атрибуты сегментов воздействуют на все примитивы, входящие в состав сегмента. Имеются следующие атрибуты сег­мента:

ПРЕОБРАЗОВАНИЕ СЕГМЕНТА;

ВИДИМОСТЬ — сегмент изображается или не изображается;

ВЫДЕЛЕНИЕ — видимый сегмент выделяется (например мер­цанием) или не выделяется;

ПРИОРИТЕТ СЕГМЕНТА — если части сегментов (например ПОЛИГОНАЛЬНАЯ ОБЛАСТЬ, МАТРИЦА ЯЧЕЕК) перекрыва­ются, то предпочтение отдается сегменту с большим приоритетом как в случае изображения этих сегментов, так и при указании на них;

ЧУВСТВИТЕЛЬНОСТЬ К УКАЗАНИЮ — возможность вы­бора сегмента с помощью устройства указания.

    1. Атрибуты сегмента уникальны для каждого сегмента и не могут изменяться на станциях. Атрибуты сегмента по умолчанию (тождественное преобразование, видимый, нормальный, прио­ритет ноль, неуказываемый) приписываются сегменту в момент создания. Атрибуты можно изменить у любого существующего сег­мента, включая открытый сегмент.

    2. Приоритет сегментов воздействует только на изобража­емые сегменты (т. е. на преобразование сегмента и преобразование станции, включая отсечение для каждого примитива сегмента). Ес­ли части примитивов перекрываются другими видимыми сегмен­тами с более высоким приоритетом, то эти части могут быть не­видимыми. Поддерживает ли станция эту возможность или нет, ука­зывается в таблице описания станции. Предполагается, что реали­зация этой возможности должна быть аппаратной. При этом не обязательно реализовывать операцию экранирования на нераст­ровых дисплеях. Когда примитивы в сегменте перекрываются, ре­шение вопроса о визуальном представлении перекрывающихся частей оставляется на усмотрение реализации. Получающийся ре­зультат должен быть отражен в документации на реализацию.

    3. При указании на примитивы сегментов, перекрываю­щие друг друга, выбирается сегмент с более высоким приорите­том. Если же перекрываются примитивы одного сегмента или сег­ментов с равными приоритетами, то результат указания зависит от реализации.

  1. Преобразования сегмента

    1. Преобразование сегмента производит отображение НК в НК. Оно выполняет перенос, масштабирование и поворот. Пре­образование сегмента определяется матрицей преобразования.

    2. Матрица преобразования имеет размерность 2X3, в том числе часть 2X2 для масштабирования и поворота и часть 2Х X 1 для переноса. С помощью вспомогательных функций (СФОР­МИРОВАТЬ МАТРИЦУ ПРЕОБРАЗОВАНИИ, ВЫЧИСЛИТЬ РЕЗУЛЬТИРУЮЩУЮ МАТРИЦУ ПРЕОБРАЗОВАНИЙ) при­кладная программа может формировать матрицы преобразования. Фиксированный центр, относительно которого выполняется масш­табирование и поворот, и вектор переноса могут быть заданы в МК или НК. В первом случае значения фиксированного центра и переноса в МК сначала преобразуются с использованием теку­щего преобразования нормирования.

    3. Преобразование сегмента выполняется после преобра­зования нормирования, но перед отсечением.

    4. Преобразование, заданное функцией ЗАДАТЬ ПРЕОБ­РАЗОВАНИЕ СЕГМЕНТА, в памяти сегментов не выполняется, а только заносится в таблицу состояния сегмента. При каждом пере­черкивании сегмента это преобразование сегмента выполняется перед отсечением. Последовательные обращения к функции ЗА­ДАТЬ ПРЕОБРАЗОВАНИЕ СЕГМЕНТА для одного и того же сег­мента не накапливаются; каждая последующая матрица преобра­зования записывается на место предыдущей. Обратившись к функ­ции ЗАДАТЬ ПРЕОБРАЗОВАНИЕ СЕГМЕНТА с единичной мат­рицей преобразования, можно получить первоначальный сегмент без потери информации. Преобразование сегмента не действует на входные данные устройства ввода позиции.

  2. Отсечение и память сегментов станции

    1. Отсечение производится после выполнения преобразо­вания нормирования и преобразования сегмента. Каждый прими­тив отсекается по прямоугольнику отсечения, который связывается с примитивом в момент включения его в сегмент. Если запись «ин­дикатор отсечения» в таблице состояния ЯГС в этот момент имеет значение ОТСЕКАТЬ, то в качестве прямоугольника отсечения, свя­занного с примитивом, указывается прямоугольник отсечения из таблицы состояния ЯГС; в противном случае он устанавливается равным области НК [0., 1.] X [0., 1.].

Прямоугольники отсечения не преобразуются преобразованием сегмента и поэтому отсечение всегда выполняется по прямоуголь­нику, стороны которого параллельны осям координат пространства

    1. Для выполнения операций над сегментами требуется такая организация их хранения, при которой сегменты могут пов­торно использоваться на графических станциях, которые были ак­тивны в момент их создания. Примитивы вне сегментов не могут повторно использоваться. ЯГС не определяет способ организации и формат памяти сегментов (если только могут выполняться любые операции над сегментами, и обеспечивается корректное примене­ние операции отсечения к каждому примитиву).

  1. Общая память сегментов

    1. В общей памяти сегментов (ОПС) сегменты могут за­поминаться для последующего использования функциями ВЫВЕС­ТИ СЕГМЕНТ НА СТАНЦИЮ, СВЯЗАТЬ СЕГМЕНТ СО СТАН­ЦИЕЙ и ВСТАВИТЬ СЕГМЕНТ. Ни одна из перечисленных функ­ций не изменяет содержимого сегментов. В реализации ЯГС допус­кается использовать только одну ОПС.

    2. Как показано на черт. 9, на видовом конвейере точка входа в блок записи примитивов в ОПС непосредственно следует за точкой, в которой данные распределяются по станциям. То есть ОПС рассматривается как станция (категории ОПС). Примитивы перед их распределением по графическим станциям преобразуются из мировых координат в НК.