ГлавнаяПрограммыДокументацияВерсия до 09-2004
Поиск: на сайте на Куличках  
  1. СТРУКТУРА ФАЙЛА ШРИФТА
  2. ОБЩИЕ ПРАВИЛА СОСТАВЛЕНИЯ
  3. ПОДГОТОВКА К СОЗДАНИЮ ФОРМЫ
  4. ПРИМЕР
  5. СПИСОК ШРИФТОВ

Тема форм и шрифтов периодически поднимается на форумах, причем в основном, вопросы касаются шрифтов и заключаются в нечитаемости текста, когда при переносе файла чертежа на другой компьютер, забывают передать и оригинальный файл шрифта. Отсюда крякозяблики, вопросительные знаки, словом, китайская грамота.
Про формы вспоминают реже, но причина таже - нет какой-то формы, а АКАД требует ее при загрузке файла. Формы могут быть как отдельные вставки в чертеж, так и входящие в состав пользовательских типов линий.
Из отдельных форм состоит шрифт, причем каждая форма - отдельный элемент шрифта - литера, значок или управляющая последовательность. Вобщем здесь чистая геометрия плюс некоторые команды типа опустить и поднять перо. Движение осуществляется по направлениям, последовательно от точки к точке. Величину перемещения можно масштабировать, тем самым изменять размер формы.
А теперь подробнее...

ШРИФТ

Первая точно датированная печатная книга на русском языке увидела свет в марте 1564 года. Она называлась "Деяния и Послания Апостолов", хотя чаще говорят просто "Апостол". Федоров и его помощник Петр Мстиславец работали над этой книгой почти год!
А вот знали бы они как создать свой шрифтовой файл, дело бы пошло быстрее.

Шрифт - это набор форм AutoCAD, описанных в одном файле, причем каждая форма соответствует одному символу (буква, значок, управляющий код).
Для создания формы необходимо разработать ее определение и включить это определение в файл с расширением *.SHP . Набор отдельных форм-символов составит шрифтовой файл, который должен быть компилирован (_COMPILE) средствами AutoCAD'а, в результате чего формируется файл с расширением *.SHX, готовый к использованию.

Файл отдельных (или группы) форм загружается командой "_LOAD", в отличие от него шрифтовой файл форм подключается к чертежу при определении гарнитуры шрифта командой "_STYLE", имя SHX-файла связывается и именем стиля.
Принципы описания форм и символов одинаковы в обоих файлов шрифтов и форм. Отличие лишь в способе загрузки и вызова. Если форму, после загрузки, можно вызвать на прорисовку указав ее имя, то символы шрифтового файла вызываются по scan-коду (нажатием соответствующих клавиш).
Неруссифицированные стандартные шрифты AutoCAD можно дополнить начертаниями русских букв, другими символами.

Часто вместе с русскими и латинскими символами в тексте необходимо использовать греческие буквы, разнообразные значки, показатели степеней и индексы. Дабы не плодить множество файлов с формами. надо их просто объединить в один файл.

В свое время я написал такой файл для DOS, а затем, из-за различия кодировок, и для Windows. Латинские и русские символы пишутся обычно переключая клавиатуру с одного языка на другой, а управляющие последовательности и значки - через указание кода (номер на малой клавиатуре при зажатой клавиши "Alt"). Можно, конечно, создать блок для такого значка или написать lisp-программу для его начертания - это проще, но дольше при его встаке. Единственное - надо знать скан-коды значков, для этого можно пользоваться , на первых порах, шпаргалкой в виде слайда в среде AutoCAD со скан-кодами:


Раскладка шрифта GEWIND

Использую такой шрифт, можно написать следующие строки без всяких вставок в одном текстовом стиле. В нем есть много всего, в частности можно написать химическую формулу, текст в степени, греческие буквы "альфа", "бета" и др. На рисунке представлены возможности шрифта.

Рис.1

Кроме греческих букв в шрифт GEWIND включены значки допусков отклонений форм и поверхностей (в последних версиях АКАДа они практически не нужны) и управляющие последовательности [<ALT>+188], [<ALT>+189], [<ALT>+190], [<ALT>+191], позволяющие написать показатель степени и индекс.
Русские и английские литеры пишутся обычным образом (переключая раскладку клавиатуры с русского на английский). При нажатии на ту или иную клавишу "скан-код" её передается в программу. Другие символы можно вводить (да и буквы тоже так можно) используя скан-код. Так для ввода греческой буквы "альфа" надо нажать и удерживать <ALT> и ввести с правой клавиатуры код "0145", для перхода строчки в область индекса [<ALT>+0190], возврат обратно на основную строку [<ALT>+0191].

Можно взять этот файл у меня, а можно сделать и свой.

Если это Вас заинтересовало - читайте дальше.

 

СТРУКТУРА ФАЙЛА ШРИФТА

Файл шрифта - текстовый файл, содержащий определения символов. Каждое определение состоит из двух разделов.
Первый раздел - наименование,
второй - описание формы.

ПЕРВЫЙ РАЗДЕЛ

 

НОМЕР ФОРМЫ, при этом

  • строка начинается с символа " * "
  • номер формы должен находится в диапозоне от 1 до 255 и не повторяться в одном файле.

ЧИСЛО БАЙТОВ определяется только после составления описания.

ИМЯ ФОРМЫ (СИМВОЛА) не должно повторяться, т.е. быть уникальным в данном файле. Для форм имя набирается в верхнем регистре, а в файле шрифта оно теряет свое значение, т.к. символы вызываются не командой "SHAPE", а нажатием клавиш в ходе выполнения команды "TEXT" (для сокращения требуемой памяти имена символов лучше набирать в нижнем регистре клавиатуры, при компиляции они игнорируются и служат только комментариями).

 

ВТОРОЙ РАЗДЕЛ

Содержит описание движения пера при прорисовки символа, состоящее из последовательности определенных кодов.

КОДЫ

Каждый код соответствует одному байту и может быть представлен числом в десятичной (от 0 до 255) или шестнадцатеричной системе, содержащей три цифры, причем первой должен быть ноль (признак шестнадцатеричного числа).

Коды разделяются запятыми, для удобства, разрешается использовать пробелы и круглые скобки. Условно коды можно разделить на четыре группы: основные, управляющие, числовые и код 0.

ОСНОВНЫЕ
Задают движения по основным направлениям, для удобства записываются в шестнадцатеричной форме, где первая цифра - 0, вторая значение длины, третья - направление. Так для горизонтального вектора длиной 4 единицы код выглядит так:
слева на право - 040;
справа на лево - 048

Рис.2

УПРАВЛЯЮЩИЕ
Сведены в таблицу

КОД Действие Числовые коды
Десятичный Шестнадцатеричный
1 001 Опустить перо нет
2 002 Поднять перо нет
3 003 Делить длину на значение последующего кода Коэффициент деления
4 004 Умножить длину на значение последующего кода Коэффициент умножения
5 005 Занести текущую точку в стек нет
6 006 Извлечь точку из стека и принять в качестве текущей нет
7 007 Начертить субформу Код субформы из данного файла
8 008 Начертить вектор Смещение по Х, по Y
9 009 Начертить последовательность векторов ( (Смещение по Х, по Y),
(Смещение по Х, по Y),
... , 0,0
10 00А Начертить октаную дугу Радиус, код дуги
11 00B Начертить произвольную дугу Смещение начала, конца,
старшие цифры радиуса, младшие,
код дуги
12 00C Начертить дугу, определяемую стрелкой прогиба Смещение по Х, по Y, стрелка прогиба
13 00D Начертить последовательность дуг, определяемых стрелкой (Смещение по Х, по Y,
стрелка прогиба),
... , 0,0

Пояснения к таблице.

Масштабирование (коды 003 и 004) необходимо для изменения длины (если в реальном масштабе необходимо ввести не целое число) или для изменения размеров субформы (см. 007). Надо отметить, что масштабные коэффициенты действуют до конца описания формы и, более того, накапливаются, поэтому код 003 должен быть сразу отменен кодом 004.,

Cмещение по Х и по Y - любые целые числа в диапозоне от -128 до 127

 

Коды ДугиРис.3

              • перваявая цифра - ноль, вторая - начальный октант (см. рис.), третья - число охватываемых октантов (ноль - полная окружность);
              • знак минус перед кодом - направление дуги по часовой стрелке;
              • смещение начала определяется как разность между началом предыдущего октанта и началом дуги (в градусах), деленная на 45 и умноженная на 256;
              • смещение конца вычисляется также, но относительно последнего, пересекаемого дугой октанта;
              • старшие цифры радиуса - это сотни его значение (при R=325 старшие цифры - 3, младшие - 25, а при R=75 старшие цифры - 0, младшие - 75).
              • Код 00С и 00D позволяют как дуги, так и векторы (выражденная дуга). Дуга задается по трем точкам: начальная - известна, конечная - смещения по х и у и стрелка прогиба. Она рассчитывается по формуле:

            S=2 * H / L * 127

            где L - хорда дуги; H - перпендикуляр, восстановленный из середины хорды.
            При H, а следовательно и S равным нолю дуга вырождается в отрезок.
            Если стрелка прогиба имеет знак минус - дуга направлена по часовой стрелке.

 

ЗАВЕРШАЮЩИЙ

Код 0 - завершение описания формы. Присутствует всегда, как код окончания записи формы.

 

 

ОБЩИЕ ПРАВИЛА СОСТАВЛЕНИЯ
  • Описание начинается в начальной точке, введенной в ответ на запрос команды "TEXT", в этой точке перо опущено.
  • Каждое следующее движение пера начинается из текущей точки. Для перехода в другую точку необходимо сначала поднять перо и осуществить переход в новое положение, затем опустить перо.
  • Линейные перемещения быстрее осуществляются по 16 основным направлениям
  • Для основных направлений единица длины имеет различные значения и все векторы основных направлений имеют единичную длину.
  • Дуговые перемещения быстрее осуществляются по целому числу октантов.
  • Максимальное число, которое может быть задано в описании, - 255, однако однако этто число можно увеличить с помощью внутренних масштабных коэффициенов.
  • Значения перемещений должны быть только целыми, это следует учитывать при выборе единицы длины, выход - деление на чисел на целочисленный коэффициент.
  • При описании формы задаются некоторые условные первоначальные размеры, одинаковые во всех формах шрифтового файла. Окончательный размер определяется при вводе размера шрифта.
  • В стеке возможно запомнить, а затем извлечь, до четырех точек.
  • Допускается повторно использовать формы (Схожие по начертанию литеры кирилицы и латинские).

 

 

ПОДГОТОВКА К СОЗДАНИЮ ФОРМЫ

Если создается шрифтовой файл с кирилицей и другими символами, то сначала необходимо распределить символы по соответствующим номерам-кодам, для схожих по начертанию с латинскими просто вставить их кодом вставки 007. Для оставшихся придется написать программу движения пера.

Надо помнить, что перо, начав движение при вычерчивании формы из точки Ао, должна, после её вычерчивания, оказаться в поднятом состоянии в конечной точке формы, например Аn. Эти точки, для горизонтального шрифта, лежат на горизонтали на расстоянии шага шрифта. Вертикальный шрифт (буква под буквой) рассматривать пока не будем.

Шаг шрифта лучше делать постоянным во всех формах букв шрифта, кроме специальных символов и управляющих последовательностей.
Ниже Я приведу некоторые описания символов, а сейчас несколько слов об определении форм, необходимых в шрифтовом файле.

В шрифт необходимо включить форму номер 0, которая имеет значение внутреннего размера шрифта. Она выглядит так:

*0,4,<имя шрифта>
H, U, Признак, 0

У меня в шрифте эта строка такая:

*0,4,ruswind
6,2,0,0

Рис.4Назначение некоторых параметров видно из рисунка "Размер шрифта". Сумма 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 с описанием тут.

 

СПИСОК ШРИФТОВ

ГЛАВНАЯ
ПРОГРАММЫ ----> | СОЗДАТЬ | РЕДАКТИРОВАТЬТЕКСТ | ФОРМАТКА | РАЗМЕРЫ | БЛОКИ | ОСТАЛЬНОЕ | СБОРНИКИ
ОПИСАНИЯ--- -> | МЕНЮ | ШРИФТ | ШТРИХОВКА |
СТАРАЯ ВЕРСИЯ САЙТА
НОВОСТИ АСКОН

© PG, 1997-2006.

Stolica.ru
Реклама в Интернет