Размер маркера вычисляется как номинальный размер, умноженный на масштаб маркера. Этот размер преобразуется станцией в ближайший реально доступный размер. Маркер типа 1 всегда изображается в виде наименьшей отображаемой точки. Маркер видим только тогда, когда позиция маркера находится внутри прямоугольника, по которому проводится отсечение (прямоугольник отсечения). Характер отсечения частично видимых маркеров зависит от реализации.
Атрибуты примитива ТЕКСТ
Текст имеет геометрические атрибуты ВЫСОТА ЛИТЕРЫ, ВЕРТИКАЛЬ ЛИТЕРЫ, НАПРАВЛЕНИЕ ТЕКСТА, ВЫРАВНИВАНИЕ ТЕКСТА.
Примитив ТЕКСТ имеет также два неявно задаваемых атрибута; ШИРИНА ЛИТЕРЫ и ГОРИЗОНТАЛЬ ЛИТЕРЫ. Они неявно определяются функциями ЗАДАТЬ ВЫСОТУ ЛИТЕРЫ и ЗАДАТЬ ВЕРТИКАЛЬ ЛИТЕРЫ соответственно. Эти атрибуты отличны от обычных геометрических атрибутов — их значения связываются с примитивами ТЕКСТ в момент создания этих примитивов, они не могут быть изменены впоследствии и их значения подвергаются тем же преобразованиям, что и другие геометрические данные, содержащиеся в описании примитива.
Представлением текста на станции управляет ИНДЕКС ТЕКСТА или набор индивидуально задаваемых атрибутов текста (ШРИФТ и ТОЧНОСТЬ ТЕКСТА, МАСШТАБ РАСШИРЕНИЯ ЛИТЕРЫ, МЕЖЛИТЕРНЫЙ ПРОСВЕТ, и ИНДЕКС ЦВЕТА ТЕКСТА) или некоторая комбинация этих двух способов в зависимости от значений ФВА для шрифта и точности текста, масштаба расширения литер, межлитерного просвета и индекса цвета текста. ИНДЕКС ТЕКСТА является указателем в таблице связок текста, каждое поле которой содержит значения для шрифта и точности представления текста, масштаба расширения литеры, межлитерного просвета и индекса цвета текста.
Точное управление визуальным представлением ТЕКСТА на станции обеспечивается следующими характеристиками: ВЫСОТА ЛИТЕРЫ, ШИРИНА ЛИТЕРЫ, МАСШТАБ РАСШИРЕНИЯ ЛИТЕРЫ, НАПРАВЛЕНИЕ ТЕКСТА, ВЕРТИКАЛЬ ЛИТЕРЫ, ГОРИЗОНТАЛЬ ЛИТЕРЫ, МЕЖЛИТЕРНЫЙ ПРОСВЕТ и ВЫРАВНИВАНИЕ ТЕКСТА.
Использование этих значений в отображаемом тексте определяется установленным значением атрибута шрифта и точности представления текста (шрифт и точность представления текста являются компонентами одного и того же атрибута). ВЫСОТА ЛИТЕРЫ определяет номинальную ширину литеры, реальная ширина определяется отношением ширины литеры к ее высоте, которое установлено разработчиком шрифта и может меняться от литеры к литере. Масштаб расширения литеры определяет отклонение отношения ширины к высоте литеры от отношения, указанного разработчиком шрифта. ВЕРТИКАЛЬ ЛИТЕРЫ задает вертикальное направление литеры. ГОРИЗОНТАЛЬ ЛИТЕРЫ определяет направление основания литеры. Имеют значение только направления, но не длины этих векторов.
Для атрибута НАПРАВЛЕНИЕ ТЕКСТА возможными значениями являются ВПРАВО, ВЛЕВО, ВВЕРХ и ВНИЗ. Этот атрибут определяет направление вычерчивания строки текста. Для значения ВПРАВО строка текста пишется вдоль линии основания литеры в направлении, указываемом атрибутом ГОРИЗОНТАЛЬ ЛИТЕРЫ. Для значения ВЛЕВО направление текста противоположно направлению, указываемому атрибутом ГОРИЗОНТАЛЬ ЛИТЕРЫ. Для значения ВВЕРХ направление текста совпадает с направлением, определяемым атрибутом ВЕРТИКАЛЬ ЛИТЕРЫ. При значении ВНИЗ направление текста противоположно направлению, указываемому атрибутом ВЕРТИКАЛЬ ЛИТЕРЫ. При значениях ВВЕРХ и ВНИЗ литеры располагаются так, что их центры лежат на прямой линии в направлении, определяемом атрибутом ВЕРТИКАЛЬ ЛИТЕРЫ.
Значение межлитерного просвета определяет размер дополнительного промежутка между двумя соседними литерами. Если значение этого атрибута равняется нулю, литеры располагаются одна за другой вдоль направления, указываемого атрибутом НАПРАВЛЕНИЕ ТЕКСТА, без какого-либо дополнительного промежутка между ними. Отрицательное значение межлитерного просвета приведет к перекрытию соседних литер. Межлитерный просвет определяется как дробный множитель к номинальной высоте литер для данного типа шрифта.
Действие атрибутов ВЫСОТА ЛИТЕРЫ, ШИРИНА ЛИТЕРЫ, МАСШТАБ РАСШИРЕНИЯ ЛИТЕРЫ, НАПРАВЛЕНИЕ ТЕКСТА, МЕЖЛИТЕРНЫЙ ПРОСВЕТ и ШРИФТ ТЕКСТА заключается в определении (воображаемого) прямоугольника со сторонами, параллельными осям координат, внутри которого расположен текст. Граничные стороны прямоугольника строятся следующим образом. Если значение атрибута НАПРАВЛЕНИЕ ТЕКСТА равно ВЛЕВО или ВПРАВО, то высота прямоугольника совпадает с высотой литеры выбранного шрифта, левая сторона прямоугольника совпадает с левой стороной самой левой литеры текста, а правая сторона прямоугольника — с правой стороной самой правой литеры текста и, аналогично, нижняя сторона прямоугольника совпадает с нижней стороной самой нижней литеры текста; ширина прямоугольника равна ширине самой широкой литеры выбранного шрифта.
Действие атрибутов ВЕРТИКАЛЬ ЛИТЕРЫ и ГОРИЗОНТАЛЬ ЛИТЕРЫ заключается в преобразовании прямоугольника, в результате чего получается параллелограмм (результат поворота и сдвига прямоугольника) — граничный параллелограмм текста.
ЛИНИЙ
правая линия
Атрибут ВЫРАВНИВАНИЕ ТЕКСТА управляет расположением граничного параллелограмма относительно заданной позиции текста. Для простоты атрибут ВЫРАВНИВАНИЕ ТЕКСТА определяется, исходя из стандартных значений по умолчанию для ВЕРТИКАЛИ ЛИТЕРЫ и ГОРИЗОНТАЛИ ЛИТЕРЫ, когда граничный параллелограмм представляет собой прямоугольник. Горизонтальный компонент атрибута ВЫРАВНИВАНИЕ ТЕКСТА имеет четыре значения: ЛЕВОЕ, ЦЕНТРАЛЬНОЕ, ПРАВОЕ и ОБЫЧНОЕ. Если значение горизонтального компонента ЛЕВОЕ, то левая сторона граничного параллелограмма текста проходит через заданную позицию текста. Если значение горизонтального компонента ЦЕНТРАЛЬНОЕ, по-
зиция текста лежит посредине между левой и правой сторонами граничного паоаллелограмма текста. Таким образом, если значение атрибута НАПРАВЛЕНИЕ ТЕКСТА ВВЕРХ или ВНИЗ, то прямая линия, проходящая через центральные линии литер, также проходит через позицию текста. Вертикальный компонент атрибута ВЫРАВНИВАНИЕ ТЕКСТА имеет шесть значений: ПО ВЕРХУ, ПО ЗАГЛАВНОЙ, ПО ЦЕНТРУ, ПО ОСНОВАНИЮ, ПО НИЗУ и ОБЫЧНОЕ. Каждое из этих значений относится к одной из специфических шрифтовых горизонтальных линий в определении литеры, как показано на черт. 3. При значении ПО ВЕРХУ верхняя сторона граничного параллелограмма текста проходит через позицию текста. При значении ПО ЗАГЛАВНОЙ позиция текста лежит на линии заглавной всей строки (НАПРАВЛЕНИЕ ТЕКСТА равно ВЛЕВО или ВПРАВО) или на линии заглавной самой высокой литеры в строке (НАПРАВЛЕНИЕ ТЕКСТА равно ВЛЕВО или ВПРАВО), или на линии, равноотстоящей от центральных линий верхней и нижней литер (НАПРАВЛЕНИЕ ТЕКСТА равно ВВЕРХ или ВНИЗ). При значении ПО ОСНОВАНИЮ позиция текста лежит на линии основания всей строки (НАПРАВЛЕНИЕ ТЕКСТА равно ВЛЕВО или ВПРАВО) или на базовой линии нижней литеры строки (НАПРАВЛЕНИЕ ТЕКСТА равно ВВЕРХ или ВНИЗ).
При значении ПО НИЗУ нижняя сторона граничного параллелограмма проходит через позицию текста.
В общем случае ориентация, называемая горизонтальной, определяется направлением вектора ГОРИЗОНТАЛЬ ЛИТЕРЫ при значении ВПРАВО и противоположно ему при значении ВЛЕВО. Аналогично ориентация, которую называем вертикальной, определяется направлением вектора ВЕРТИКАЛЬ ЛИТЕРЫ при значении ВВЕРХ и противоположному ему при значении ВНИЗ.
Каждый компонент ВЫРАВНИВАНИЕ ТЕКСТА может иметь значение ОБЫЧНОЕ. Для каждого значения атрибута НАПРАВЛЕНИЕ ТЕКСТА действие определенного компонента, имеющего значение ОБЫЧНОЕ, эквивалентно одному из других значений этого компонента. В каждом случае значение эквивалентного выравнивания выбирается так, чтобы добиться естественного выравнивания для этого значения атрибута НАПРАВЛЕНИЕ ТЕКСТА. Полный список эквивалентных значений приведен в табл. 1.
Таблица 1
НАПРАВЛЕНИЕ ТЕКСТА |
Значение ОБЫЧЛОЕ для горизонтального и вертикального выравниваний |
ВПРАВО ВЛЕВО ВВЕРХ ВНИЗ |
(ЛЕВОЕ, ПО ОСНОВАНИЮ) (ПРАВОЕ, ПО ОСНОВАНИЮ) (ЦЕНТРАЛЬНОЕ, ПО ОСНОВАНИЮ) (ЦЕНТРАЛЬНОЕ, ПО ВЕРХУ) |
Начальные значения геометрических атрибутов текста следующие: ВЫСОТА ЛИТЕРЫ МК — 0,01 (т. е. 1 % высоты окна, принятого по умолчанию);
ВЕРТИКАЛЬ ЛИТЕРЫ МК — (0,1);
НАПРАВЛЕНИЕ ТЕКСТА — ВПРАВО;
ВЫРАВНИВАНИЕ ТЕКСТА — (ОБЫЧНОЕ, ОБЫЧНОЕ).
Начальные значения неявно задаваемых геометрических атрибутов текста следующие:
ШИРИНА ЛИТЕРЫ МК — 0,01 (т. е. то же значение, что и ВЫСОТА ЛИТЕРЫ);
ГОРИЗОНТАЛЬ ЛИТЕРЫ МК — (1,0).
Шрифт и точность представления текста вместе составляют единый атрибут текста. Значение номера шрифта текста используется для выбора определенного шрифта на станции. Каждая станция должна обеспечивать не менее одного шрифта, который позволял бы генерировать графическое представление литер, определенных в СТ СЭВ 359—76. Такой шрифт должен иметь номер 1. Номера шрифтов, большие 1, резервируются для будущей стандартизации. Номера шрифтов меньше нуля зависят от реализации.
Значение точности представления текста используется для выбора «степени близости» представления текста на гра- фической станции к представлению текста, задаваемому атрибутами текста, не зависящими от станции, а также применяемыми в данный момент преобразованием и отсечением. Точность представления текста имеет следующие возможные значения:
ДО СТРОКИ — строка литер генерируется с заданным шрифтом и располагается в заданной позиции текста. ВЫСОТА ЛИТЕРЫ, ШИРИНА ЛИТЕРЫ и масштаб расширения литеры учитываются в зависимости от возможностей станции. Атрибуты ВЕРТИКАЛЬ ЛИТЕРЫ, ГОРИЗОНТАЛЬ ЛИТЕРЫ, НАПРАВЛЕНИЕ ТЕКСТА, ВЫРАВНИВАНИЕ ТЕКСТА и межлитерный просвет нет необходимости использовать. Отсечение выполняется методом зависящим от реализации и от графической станции;
ДО ЛИТЕРЫ — строка литер генерируется с заданным шрифтом. Для представления каждой отдельной литеры характеристики ВЫСОТА ЛИТЕРЫ, ШИРИНА ЛИТЕРЫ, направление вертикали ВЕРТИКАЛЬ ЛИТЕРЫ и масштаб расширения литеры определяются способом, зависящим от станции. Расстояние между литерами вычисляется точно, причем для этой цели используются идеальные литеры, точно вычисленные с учетом характеристик текста и размеров шрифта. Положение результирующего граничного параллелограмма определяется атрибутом ВЫРАВНИВАНИЕ ТЕКСТА и позицией текста. Отсечение выполняется, как минимум, с точностью до одной литеры;
ДО ШТРИХА — строка литер заданного шрифта изображается в позиции текста с использованием всех атрибутов текста. Строка литер усекается точно по границе прямоугольника отсечения. Точность представления текста ДО ШТРИХА не обязательно означает, что изображение строится из коротких вектор-штри- хов; при условии, что шрифт удовлетворяет правилам, определяющим точность ДО ШТРИХА, он может быть реализован в любом виде, например в виде растрового представления.
Реализация ЯГС уровня вывода нуль должна поддерживать точность представления текста ДО СТРОКИ и ДО ЛИТЕРЫ. Если уровень вывода реализации выше чем нуль, то точности представления текста поддерживаются следующим образом. Станция может использовать точность представления текста более высокую, чем от нее требуется, т. е. если в конкретном шрифте поддерживается точность ДО ШТРИХА, то подразумевается, что точности ДО СТРОКИ и ДО ЛИТЕРЫ также доступны для этого шрифта, хотя графическая станция не обязательно должна поддерживать все точности данного шрифта (т. е. для заданного шрифта может отсутствовать точность ДО ШТРИХА или обе точности ДО ШТРИХА и ДО ЛИТЕРЫ). Шрифт текста и точность должны быть обязательно реализованы на станции. То есть для любого уровня ЯГС, поддерживающего шрифт точности ДО ШТРИХА, каждая станция, реализованная на конкретном оборудовании, должна поддерживать не менее одного текстового шрифта точности ДО ШТРИХА. Это должен быть шрифт с номером 1, содержащий набор литер в соответствии со СТ СЭВ 359—76. Это означает, что для тех реализаций, которые имеют недостаточно развитую аппаратную часть, для текста точности ДО ШТРИХА потребуется программный генератор литер. Не обязательно, чтобы все станции дюддерживали все шрифты, но для тех из них, которые имеют такую возможность, для выбора одинаковых шрифтов следует использовать один и тот же номер шрифта.
Шрифты определяются только в реализации ЯГС. Разработчик шрифта задает форму каждой литеры, описывая ее в локальной двумерной декартовой системе координат шрифта. Шрифт может быть равномерным или пропорциональным. Для каждой литеры в системе координат шрифта определяются прямоугольник литеры, линия основания шрифта, средняя линия шрифта, линия заглавной и центральная линия (черт. 3).
Для равномерных шрифтов прямоугольники всех литер име-, ют одинаковый размер. Для пропорциональных шрифтов ширина прямоугольников литер может быть различной для разных литер. Границы прямоугольника литеры должны быть параллельны осям системы координат шрифта. Линия основания шрифта, средняя линия и линия заглавной должны быть параллельны оси X и находиться в пределах, ограниченных вертикальными линиями прямоугольника литеры. Положение средней линии шрифта задается разработчиком шрифта с целью выравнивания строк текста. Центральная линия параллельна оси Y и делит литеру пополам. Точное положение центральных линий для всех литер определяется разработчиком шрифта.
Высота литеры в системе координат шрифта задается расстоянием от линии основания шрифта до линии заглавной. Ширина литеры может включать в себя промежуток с любой стороны реальной литеры и этот промежуток в общем случае поровну делится между левой и правой сторонами литеры. Предполагается, что литеры имеют одинаковые размеры, за исключением литер с выносными элементами (кернами), которые могут выходить за границы области представления литер.