Если создается
шрифтовой файл с кирилицей и другими символами, то сначала
необходимо распределить символы по соответствующим номерам-кодам,
для схожих по начертанию с латинскими просто вставить их
кодом вставки 007. Для оставшихся придется написать программу
движения пера.
Надо помнить, что перо, начав движение при вычерчивании
формы из точки Ао, должна, после её вычерчивания,
оказаться в поднятом состоянии в конечной точке формы,
например Аn. Эти точки, для горизонтального
шрифта, лежат на горизонтали на расстоянии шага шрифта.
Вертикальный шрифт (буква под буквой) рассматривать пока
не будем.
Шаг шрифта лучше делать постоянным во всех формах букв
шрифта, кроме специальных символов и управляющих последовательностей.
Ниже Я приведу некоторые описания символов, а сейчас несколько слов об
определении форм, необходимых в шрифтовом файле.
В шрифт необходимо включить форму номер 0, которая имеет
значение внутреннего размера шрифта. Она выглядит так:
*0,4,<имя шрифта>
H, U, Признак, 0
У меня в шрифте эта строка такая:
*0,4,ruswind
6,2,0,0
Назначение некоторых параметров
видно из рисунка "Размер шрифта". Сумма H и U определяет
высоту или размер шрифта. Признак принимает значение 0
- шрифт только горизонтальный или 2 - шрифт может быть
использован и для вертикально ориентированного текста (столбцом).
В этом случае в каждой форме должен присутствовать код
00Е (или 14). Он указывает, что следующее за ним перемещение
должно отрабатываться только при вертикально ориентированном
тексте, причем если для горизонтально ориентированнов тексте
перо должно закончить перемещение в форме в левом нижнем
углу следующего символа, то для вертикально - верхняя центральная
точка. Также должна быть определена форма с номером 10
и именем lf. Она используется при переводе
строки (клавиша "Enter") и указывает на перемещение
по вертикали между начальными точками предыдущей и последующей
строк.
*10,3,lf
2,0AC,0
Приведу примеры греческих литер альфа, бета и омега в
файле gewind.shx
*145,45,greeka
2,3,3,8,9,14,1,41,42,43,8,-1,-3,60,45,47,32,33,50,8,2,3,67,8,1,3,
2,152,1,32,30,45,8,2,-8,45,30,16,2,8,3,0,4,3,0
*146,58,greekb
2,3,3,8,12,21,1,41,42,75,9,-1,-3,-1,-4,-1,-6,-1,-8,0,0,2,8,10,28,1,32,46,60,
43,26, 41,56,2,8,0,0,1,47,46,45,60,43,26,41,40,39,22, 8,-1,3,2,8,15,-5,4,3,0
*151,56,greekw
2,3,3,8,8,14,1,41,8,-2,-3,8,-1,-3,60,8,1,-3,30,32,33,8,2,3,2,8,1,4,1,8,-1,-4,8,1,-3,
30,32, 33,8,2,3,8,1,3,52,8,-1,3,22, 2,8,5,-14,4,3,0
Управление перемещением пера и возвратом в зону степени
step-to, step-of и в зону индекса- index-to, index-off.
Уменьшается и высота шрифта. Ввод номера осуществляется
с клавиатуры удерживая клавишу <ALT>. В среде Windows
необходимо вводить 4-х значный номер, добавляя 0 перед
номером.
*188,8,step-to
2,044,010,003,3,004,2,0
*189,8,step-of
2,004,3,003,2,04C,010,0
*190,7,index-to
2,02C,003,3,004,2,0
*191,7,index-off
2,004,3,003,2,024,0
На основе шрифта GOST_B я сделал шрифт GOSTB_PG,
в который добавил возможность написания степени и индекса.
Свободные были позии 187-190, т.е. со смещением на единицу
и вот что получилось (коды шестнадцатеричные):
*0BB,7,pg_step
2,008,(1,70),003,2,0
*0BC,7,pg_stepback
2,004,2,008,(15,-70),0
*0BD,7,pg_ind
2,008,(1,-10),003,2,0
*0BE,7,pg_indback
2,004,2,008,(10,10),0
Здесь перемещение пера выполняется кодом 008 (вектор),
а само численное смещение зависит от размера шрифта.
Также ввел символ в русской раскладке "№" и
изменил цифру "3" : верхняя палочка стала горизонтальной,
чтобы отличалась от буквы "З". Добавил значки
развертки [ALT+136], поворота сечения [ALT+135] и зависимого
допуска [ALT+131].
Вот их описания (высота шрифта 100+33=133)
№
*0B9,27,kns
9,(0,100),(40,-100),(0,100),(0,0),2,8,(20,-15),1,070,07E,09C,07A,078,076,094,072,2,8,(30,-85),0
3
*033,25,n3
2,054,1,9,(40,0),(10,10),(0,38),(-10,10),(-20,0),(30,32),(-50,0),(0,0),2,8,(60,-95),0
На примере значка "№" разберем принцип описания.
Параметр Н шрифта равен 100 единицам,
поэтому первый вектор (после 9, за которой должен следовать
список векторов перемещения пера до последнего вектора
(0,0) ) выглядит (0,100), т.е. по Х ноль,
по Y 100.
Затем (40, -100) вправо 40, вниз 100
(0,100) - Опять 100 единиц вверх, Получился
значок "N"
(0,0) - конец
набора векторов
2 - поднять перо
8,(20,-15) - перемещение пера вправо на 20, вниз на 15
1 - Опустить перо. Далее рисуем кружок, но для простоты делаем
его восьмигранником:
070 - рисуем вектор на 7 единиц вправо (знак 0), направление
восток,
07E - вектор 7 единиц, направление юго-восток (Е),
09C - вектор 9 единиц, направление юг (С),
07A - вектор 7 единиц, направление юго-запад (А),
078 - вектор 7 единиц, направление запад (8),
076 - вектор 7 единиц, направление северо-запад (6),
094 - вектор 9 единиц, направление север (4),
072 - вектор 7 единиц, направление северо-восток (2),
2 - Подняли перо. Теперь надо встать в точку
конца символа, откуда начнется вычерчивание следующего знака (ширина
символа)
Когда мы начали рисовать восьмигранник (вернулись в эту же точку), высота
точки была 85 единиц - значит для возврата по Х мы должны опуститься
на 85 единиц. Перемещение вправо зададим 30 единиц (14 единиц займет
часть восьмигранника и 16 на отступ), потом, при необходимости, можно
скорректировать это значение.
8,(30,-85) - вектор перемещения
0 - знак конца описания
Подчеркивать наш восьмигранник как в значке № мы не будем - это лишнее.
Шрифт GOSTB_PG.SHX можно
взять тут.
Вот и вся премудрость
Файл GEWIND с описанием тут.
|