Формат файлов gEDA/gaf

Автор: Ales V. Hvezda, ahvezda@geda.seul.org

Настоящий документ распространяется под лицензией GFDL

31 декабря 2003 г.

Перевод: Владимир Жбанов, 2009–2011 гг.

Обзор

Здесь представлена официальная документация формата файлов gEDA/gaf (gschem and friends). Основным форматом в gEDA/gaf является формат файлов электрических принципиальных схем и символов для них. Файлы с именами, заканчивающимися на .sch и .sym, являются соответственно файлами схем и символов. Пока в gEDA/gaf нет других типов файлов, настоящий документ будет относиться только к формату файлов схем/символов.

Настоящий документ находится в обращении с версии gEDA/gaf 20040111. Он охватывает версии формата 1 и 2.

Обратите внимание, что данный формат и любые другие форматы файлов, относящиеся к gEDA, находятся под лицензией General Public License (GPL) версии 2.0. Авторские права на формат файлов схем/символов gEDA/gaf принадлежат Ales Hvezda (Copyright (C) 1998-2004 Ales Hvezda).

Система координат

Все координаты задаются в милах (1/1000 дюйма). Это произвольное решение. Запомните, что в схемах и символах нет понятия физических длин/размеров (только при разработке принципиальных схем).

Следующий рисунок показывает настройку координатной системы:

:geda:coordinatespace.ru.png

Значение по оси X возрастает слева направо, по оси Y — снизу вверх. Координатная система располагается в “пейзажной” ориентации и соответствует листу, повёрнутому длинной стороной вниз.

Имена файлов

Имена файлов символов заканчиваются на .sym. Для имён файлов символов в gEDA/gaf используется только одно соглашение: если есть несколько экземпляров символов с одинаковыми именами (как, например, 7400), то к концу основы имени файла добавляется суффикс -1, -2, -3, … -N . Пример: 7400-1.sym, 7400-2.sym, 7400-3.sym

Имена файлов схем заканчиваются на .sch. Раньше существовало соглашение об именах файлов схем (о добавлении -1 .. -N к основе имени файла), но сейчас оно устарело. Для схем их создатель может выбирать любые осмысленные имена.

Типы объектов

Файл схемы/символа для gEDA/gaf состоит из следующих частей:

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

Файлы схем и символов имеют общий формат. Символ — это не что иное, как совокупность примитивных объектов (линий, прямоугольников, окружностей, дуг, текста и выводов). Схема представляет собой набор символов (компонентов), соединений и шин.

Следующие разделы описывают особенности каждого из распознаваемых типов объектов. Каждый раздел содержит название объекта, описание того, в каком типе файла (sch/sym) объект может присутствовать, формат данных, описание каждого отдельного поля, подробности и предостережения для данных полей и, наконец, пример с пояснением.

Информация об индексе цвета (который используется практически для всех объектов) находится в разделе Цвета.

Версия

Допускается: в файлах схем и символов

type version fileformat_version

Поз.ПолеТип/единицаОписание
# typecharv
1 versionintВерсия gEDA/gaf, в которой был сохранён данный файл
2 fileformat_versionintНомер версии формата файла gEDA/gaf

Пример:

v 20040111 1

Линия

Допускается: в файлах схем и символов

type x1 y1 x2 y2 color width capstyle dashstyle dashlength dashspace

Поз.ПолеТип/единицаОписание
# typecharL
1 x1int/милыКоордината X первой точки
2 y1int/милыКоордината Y первой точки
3 x2int/милыКоордината X второй точки
4 y2int/милыКоордината Y второй точки
5 colorintЦветовой индекс
6 widthint/милыТолщина линии
7 capstyleintСтиль концов линии
8 dashstyleintТип линии
9 dashlengthint/милыДлина штриха
10 dashspaceint/милыИнтервал между штрихами

Пример:

L 23000 69000 28000 69000 3 40 0 1 -1 75

Сегмент линии от (23000, 69000) до (28000, 69000) с цветовым индексом 3, толщиной 40 милов, без стиля концов, пунктир, интервал между точками 75 милов.

Изображение

Допускается: в файлах схем и символов

type x1 y1 width height angle mirrored embedded
filename
[encoded picture data
encoded picture end]

Поз.ПолеТип/единицаОписание
# typecharG
1 xint/милыКоордината X левого нижнего угла
2 yint/милыКоордината Y левого нижнего угла
3 widthint/милыШирина изображения
4 heightint/милыВысота изображения
5 angleint/градусыУгол поворота изображения
6 mirroredcharЗеркально отражённое или нормальное изображение
7 embeddedcharВнедрённое или ссылка на файл изображения
8 filenamestringПуть доступа и имя файла для невнедрённого изображения
9 encoded picture datastringИзображение, преобразованное в последовательную форму, перекодированное в base64
10 encoded picture endstringСтрока, содержащая только символ точки

Пример 1:

G 16900 35800 1400 2175 0 0 0
../bitmaps/logo.jpg

Объект изображения с левым нижним углом в (16900, 35800). Ширина изображения 1400 милов, высота 2175 милов. Поворот изображения 0 градусов и оно ни отражённое, ни внедрённое.

Путь доступа и имя файла изображения отображается во второй строке.

Пример 2:

G 16900 35800 1400 2175 0 0 1
../bitmaps/logo.jpg
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
.

Объект изображения с левым нижним углом в (16900, 35800). Ширина изображения 1400 милов, высота 2175 милов.

Поворот изображения 0 градусов, оно не отражённое, но внедрённое.

Путь доступа и имя файла изображения отображается во второй строке. Так как это изображение внедрённое, путь доступа и имя файла не используются.

Закодированные данные изображения являются только примером (это не настоящие данные). Последняя строка, содержащая один символ точки '.' указывает конец закодированных данных.

Прямоугольник

Допускается: в файлах схем и символов

type x y width height color width capstyle dashstyle dashlength dashspace filltype fillwidth angle1 pitch1 angle2 pitch2

Поз.ПолеТип/единицаОписание
# typecharB
1 xint/милыКоордината X левого нижнего угла
2 yint/милыКоордината Y левого нижнего угла
3 widthint/милыШирина прямоугольника (в направлении x)
4 heightint/милыВысота прямоугольника (в направлении y)
5 colorintЦветовой индекс
6 widthint/милыТолщина линий
7 capstyleint/милыСтиль концов линий
8 dashstyleintТип линий
9 dashlengthint/милыДлина штриха
10 dashspaceint/милыИнтервал между штрихами
11 filltypeintТип заполнения
12 fillwidthint/милыТолщина линий заполнения
13 angle1int/градусыПервый угол заполнения
14 pitch1int/милыПервый шаг/интервал заполнения
15 angle2int/градусыВторой угол заполнения
16 pitch2int/милыВторой шаг/интервал заполнения

Пример:

B 33000 67300 2000 2000 3 60 0 2 75 50 0 -1 -1 -1 -1 -1

Прямоугольник с нижним левым углом в (33000, 67300) шириной и высотой (2000, 2000), цветовой индекс 3, толщина линий 60 милов, без стиля концов, штриховые линии, длина штриха 75 милов, интервал между штрихами 50 милов, без заполнения, остальные параметры не установлены.

Окружность

Допускается: в файлах схем и символов

type x y radius color width capstyle dashstyle dashlength dashspace filltype fillwidth angle1 pitch1 angle2 pitch2

Поз.ПолеТип/единицаОписание
# typecharV
1 xint/милыКоордината X центра
2 yint/милыКоордината Y центра
3 radiusint/милыРадиус окружности
4 colorintЦветовой индекс
5 widthint/милыТолщина линии окружности
6 capstyleint/милы0 (не используется)
7 dashstyleintТип линии
8 dashlengthint/милыДлина штриха
9 dashspaceint/милыИнтервал между штрихами
10 filltypeintТип заполнения
11 fillwidthint/милыТолщина линий заполнения
12 angle1int/градусыПервый угол заполнения
13 pitch1int/милыПервый шаг/интервал заполнения
14 angle2int/градусыВторой угол заполнения
15 pitch2int/милыВторой шаг/интервал заполнения

Пример:

V 38000 67000 900 3 0 0 2 75 50 2 10 20 30 90 50

Окружность с центром в (38000, 67000) и радиусом 900 милов, цветовой индекс 3, толщина линии 0 милов (наименьший размер), без стиля концов, штриховая линия, длина штриха 75 милов, интервал между штрихами 50 милов, заполнение сеткой, линии сетки толщиной 10 милов, первая линия сетки под углом 20 градусов с интервалом в 30 милов, вторая линия сетки под углом 90 градусов с интервалом в 50 милов.

Дуга

Допускается: в файлах схем и символов

type x y radius startangle sweepangle color width capstyle dashstyle dashlength dashspace

Поз.ПолеТип/единицаОписание
# typecharA
1 xint/милыКоордината X центра
2 yint/милыКоордината Y центра
3 radiusint/милыРадиус дуги
4 startangleint/градусыНачальный угол дуги
5 sweepangleint/градусыУгол разворота дуги
6 colorintЦветовой индекс
7 widthint/милыТолщина линии окружности
8 capstyleintСтиль концов линии
9 dashstyleintТип линии
10 dashlengthint/милыДлина штриха
11 dashspaceint/милыИнтервал между штрихами

Пример:

A 30600 75000 2000 0 45 3 0 0 3 75 50

Дуга с центром в (30600, 75000) и радиусом 2000 милов, начальный угол 0 градусов, угол разворота дуги 45 градусов, цветовой индекс 3, толщина линии 0 милов (наименьший размер), без стиля концов, штрих-пунктир, длина штриха 75 милов, интервал между штрихами 50 милов.

Текст и атрибуты

В зависимости от контекста текстовые объекты могут играть разные роли. Вне какого-либо окружения они представляют собой строки текста, содержащие какую-либо информацию. Заключённые в фигурные скобки, они интерпретируются как атрибуты. См. раздел Атрибуты.

Допускается: в файлах схем и символов

type x y color size visibility show_name_value angle alignment num_lines
string line 1
string line 2
string line 3

string line N

Поз.ПолеТип/единицаОписание
# typecharT
1 xint/милыКоордината X первой точки
2 yint/милыКоордината Y первой точки
3 colorintЦветовой индекс
4 sizeint/пунктыРазмер текста
5 visibilityintВидимость текста
6 show_name_valueintУправление видимостью атрибута
7 angleint/градусыУгол поворота текста
8 alignmentintВыравнивание/точка привязки текста
9 num_linesintКоличество строк текста (начальное значение 1)
10 string line 1 … NstringСобственно отдельные строки текста

Пример 1:

T 16900 35800 3 10 1 0 0 0 1
Text string!

Текстовый объект с точкой привязки в (16900, 35800), цветовой индекс 3, размером 10 пунктов, видимый, флаги атрибута не действуют (объект не является атрибутом), точка привязки в левом нижнем углу, без поворота, строка: Text string!

Пример 2:

T 16900 35800 3 10 1 0 0 0 5
Text string line 1
Text string line 2
Text string line 3
Text string line 4
Text string line 5

Данный текстовый объект подобен указанному в примере выше, но здесь пять строк текста.

Пример 3:

T 10000 20000 3 10 1 1 8 90 1
pinlabel=R/\_W\_

Текстовый объект с точкой привязки (10000, 20000), цветовой индекс 3, размером 10 пунктов, видимый, видимо только значение атрибута, точка привязки находится в верхнем правом углу, текст повёрнут на 90 градусов, строка: “R/W”, над буквой “W” горизонтальная черта.

Соединение

Допускается: ТОЛЬКО в файлах схем

type x1 y1 x2 y2 color

Поз.ПолеТип/единицаОписание
# typecharN
1 x1int/милыКоордината X первой точки
2 y1int/милыКоордината Y первой точки
3 x2int/милыКоордината X второй точки
4 y2int/милыКоордината Y второй точки
5 colorintЦветовой индекс

Пример:

N 12700 29400 32900 29400 4

Сегмент соединения от (12700, 29400) до (32900, 29400) с цветовым индексом 4.

Шина

Допускается: ТОЛЬКО в файлах схем

type x1 y1 x2 y2 color ripperdir

Поз.ПолеТип/единицаОписание
# typecharU
1 x1int/милыКоордината X первой точки
2 y1int/милыКоордината Y первой точки
3 x2int/милыКоордината X второй точки
4 y2int/милыКоордината Y второй точки
5 colorintЦветовой индекс
6 ripperdirintНаправление ответвлений от шины

Пример:

U 27300 37400 27300 35300 3 0

Сегмент шины от (27300, 37400) до (27300, 35300) с цветовым индексом 3 и без подключения соединений к данному сегменту.

Вывод

Допускается: ТОЛЬКО в файлах символов

type x1 y1 x2 y2 color pintype whichend

Поз.ПолеТип/единицаОписание
# typecharP
1 x1int/милыКоордината X первой точки
2 y1int/милыКоордината Y первой точки
3 x2int/милыКоордината X второй точки
4 y2int/милыКоордината Y второй точки
5 colorintЦветовой индекс
6 pintypeintТип вывода
7 whichendintУказывает активный конец

Пример:

P 0 200 200 200 1 0 0

Вывод от (0, 200) до (200, 200) с цветовым индексом 1, обычный вывод, для соединения используется первая точка.

Компонент

Допускается: ТОЛЬКО в файлах схем

type x y selectable angle mirror basename

Поз.ПолеТип/единицаОписание
# typecharC
1 xint/милыКоордината X точки привязки
2 yint/милыКоордината Y точки привязки
3 selectableintФлаг выделения
4 angleint/градусыУгол поворота компонента
5 mirrorintОтражение относительно оси Y
6 basenamestringИмя файла компонента

Пример:

C 18600 19900 1 0 0 7400-1.sym

Компонент с точкой привязки в (18600,19900), выделяемый, без поворота, без отражения, имя файла компонента 7400-1.sym.

Контур

Допускается: в файлах схем и символов

Действителен: с версии 2 формата файла (выпуск 1.5.1)

type color width capstyle dashstyle dashlength dashspace filltype fillwidth angle1 pitch1 angle2 pitch2 numlines
path data line 1
path data line 2
path data line 3

path data line N

Поз.ПолеТип/единицаОписание
# typecharH
1 colorintЦветовой индекс
2 widthint/милыТолщина линий
3 capstyleintСтиль концов линий
4 dashstyleintТип линий
5 dashlengthint/милыДлина штриха
6 dashspaceint/милыИнтервал между штрихами
7 filltypeintТип заполнения
8 fillwidthint/милыТолщина линий заполнения
9 angle1int/градусыПервый угол заполнения
10 pitch1int/милыПервый шаг/интервал заполнения
11 angle2int/градусыВторой угол заполнения
12 pitch2int/милыВторой шаг/интервал заполнения
13 num_linesintКоличество строк данных контура (начальное значение 1)
14 path data line 1 … Npath dataОтдельные строки данных контура

Пример:

H 3 10 0 0 -1 -1 0 -1 -1 -1 -1 -1 5
M 410,240
L 501,200
L 455,295
L 435,265
z

Контур, начинающийся в (410,240), с линиями, начинающимися оттуда и соединяющими точки (501,200), (455,295), (435,265), замыкающийся обратно в исходную точку. Цветовой индекс 3, толщина линий 10 милов, без стиля концов, сплошная. Данные контура содержат 5 строк.

Шрифт

Допускается: ТОЛЬКО в специальных файлах шрифтов

type character width flag

Поз.ПолеТип/единицаОписание
# typecharF
1 charactercharОпределяемый символ
2 widthint/милыШирина символа (в милах)
3 flagintСпециальный флаг пробела

Пример:

F 11 1

Выше приведено определение символа пробела в шрифте.

Цвета

В формате файлов символов и схем gEDA/gaf цвета определяются посредством целочисленного индекса. Соответствие между числом и цветом основывается на типе объекта. Для каждого типа объекта обычно используется один или более цветов. Здесь приведена таблица соответствия цветовых индексов типам объектов:

ИндексТип объектаПримечание
0BACKGROUND_COLORФон
1PIN_COLORВывод
2NET_ENDPOINT_COLORКонечная точка соединения
3GRAPHIC_COLORГрафический объект
4NET_COLORСоединение
5ATTRIBUTE_COLORАтрибут
6LOGIC_BUBBLE_COLORЛогическая инверсия
7GRID_COLORСетка
8DETACHED_ATTRIBUTE_COLORНеприкреплённый атрибут
9TEXT_COLORТекст
10BUS_COLORШина
11SELECT_COLORВыделение
12BOUNDINGBOX_COLORКонтур объекта
13ZOOM_BOX_COLORКонтур области масштабирования
14STROKE_COLORЖесты
15LOCK_COLORЗаблокированный объект
16OUTPUT_BACKGROUND_COLORВыходной фон
17FREESTYLE1_COLORСвободный стиль 1
18FREESTYLE2_COLORСвободный стиль 2
19FREESTYLE3_COLORСвободный стиль 3
20FREESTYLE4_COLORСвободный стиль 4
21JUNCTION_COLORТочка соединения
22MESH_GRID_MAJOR_COLORГлавная штриховка сетки
23MESH_GRID_MINOR_COLORВторостепенная штриховка сетки

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

Атрибуты

Атрибуты заключаются в фигурные скобки {} и могут быть только текстовыми объектами. Атрибуты представляют собой текстовые элементы вида имя_атрибута=значение. Если текст не содержит пары имя_атрибута=значение, он не является атрибутом. Атрибуты прикрепляются к предшествующему объекту. Вот пример:

P 988 500 1300 500 1
{
T 1000 570 5 8 1 1 0
pinseq=3
T 1000 550 5 8 1 1 0
pinnumber=3
}

Данный объект является выводом, имеющим атрибуты pinnumber=3 и pinseq=3 (имя_атрибута=значение). Внутри фигурных скобок {} может находиться несколько текстовых объектов (T … и текстовая строка обязательны). С версии 20021103 в качестве атрибутов можно использовать только текстовые элементы. Прикрепление других типов объектов в качестве атрибутов не поддерживается.

Можно использовать также атрибуты “верхнего уровня”. Эти атрибуты не прикрепляются ни к какому объекту, а просто представляют собой текстовые объекты вида имя_атрибута=значение.

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

Внедрённые компоненты

Внедрённые компоненты — это компоненты, определение которых полностью содержится внутри файла схемы. Когда пользователи помещают компоненты на страницы схемы, есть возможность делать компоненты внедрёнными. Это отличается от простого сохранения всей информации символа непосредственно в схеме, внедрённый компонент — это просто несколько иной компонент. Внедрённые компоненты указываются следующим образом:

C 18600 21500 1 0 0 EMBEDDED555-1.sym
[
...
... Embedded primitive objects
...
]

В примере выше, 555-1.sym — это компонент. Тег EMBEDDED и [ ] — отличительные характеристики внедрённого компонента. Если требуется отменить внедрение компонента, символ имя_компонента.sym должен присутствовать в одной из используемых библиотек.

Данные контура

Формат данных контуров gEDA/gaf умышленно определён таким образом, чтобы он соответствовал подмножеству таковых в стандарте W3C SVG.

КомандаНазваниеПараметрыОписание
M (абсолютная)moveto(x,y)+Начало нового подконтура в заданной координате (x,y). M (в верхнем регистре) указывает, что далее следуют абсолютные координаты; m (в нижнем регистре) указывает, что далее следуют относительные координаты. Если команда moveto в относительных координатах (m) является первым элементом контура, её координаты рассматриваются как абсолютные. Если после moveto указано несколько пар координат, последующие пары рассматриваются как неявные команды lineto.
L (абсолютная)lineto(x,y)+Вычерчивается линия из текущей точки в точку, заданную координатами (x,y), которая становится новой текущей. L (в верхнем регистре) указывает, что далее следуют абсолютные координаты; l (в нижнем регистре) указывает, что далее следуют относительные координаты. Для вычерчивания ломаной линии может указываться несколько пар координат. В конце команды новой текущей точкой станет последняя заданная пара координат.
C (абсолютная)curveto(x1,y1 x2,y2 x,y)+Вычерчивается кривая Безье с кубической интерполяцией из текущей точки в точку (x,y), используя (x1,y1) как контрольную точку в начале кривой и (x2,y2) как контрольную точку в конце кривой. C (в верхнем регистре) указывает, что далее следуют абсолютные координаты; c (в нижнем регистре) указывает, что далее следуют относительные координаты. Для вычерчивания сложной кривой Безье может указываться несколько наборов координат. В конце команды новой текущей точкой станет последняя пара координат (x,y) сложной кривой.
Z или zclosepath(нет)Закрывает текущий подконтур вычерчиванием прямой линии из текущей точки в исходную точку данного подконтура.

Для примера начертим внешний контур символа AND по американскому стандарту. Данные контура:

M 100,100 L 500,100 C 700,100 800,275 800,400
C 800,525 700,700 500,700 L 100,700 z

И полная схема:

v 20080706 1
H 3 0 0 0 -1 -1 0 2 20 100 -1 -1 6
M 100,100
L 500,100
C 700,100 800,275 800,400
C 800,525 700,700 500,700
L 100,700
z

Здесь показан итоговый контур (с начерченными для иллюстрации их положения контрольными точками):

История изменений документа

30 ноября 2002 г.Создан fileformats.tex из fileformats.html.
1 декабря 2002 г.Продолжена работа над данным документом.
4 октября 2003 г.Добавлена информация о новом флаге версии формата файла.
19 октября 2003 г.Добавлено поле num_lines для текстового объекта.
2 ноября 2008 г.Добавлен объект контура, версия формата файла изменена на 2
26 мая, 2011 г.В таблицы параметров добавлены столбцы позиции