Формат файла DXF


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

1.1 Общая структура файла

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

1. Раздел ЗАГОЛОВКА /HEADER/ - В данном разделе файла DXF содержится общая информация о чертеже. Каждый параметр имеет имя переменной и соответствующее ей значение.

2. Раздел ТАБЛИЦ /TABLES/ - В данном разделе содержатся определения именованных элементов.

- Таблица типов линий (LTYPE)

- Таблица слоев

- Таблица типов шрифтов

- Таблица видов

3. Раздел БЛОКОВ /BLOCKS/ - В данном разделе содержатся

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

4. Раздел ПРИМИТИВОВ /ENTITIES/ - В данном разделе содержатся графические примитивы чертежа, включая любые ссылки на блоки.

5. КОНЕЦ ФАЙЛА

Если вы используете опцию "Entities" команды DXFOUT, выходной DXF файл будет содержать только секции ПРИМИТИВЫ и КОНЕЦ ФАЙЛА, а раздел ПРИМИТИВЫ будет отражать только выбранные вами для вывода примитивы. Файл DXF состоит из множества групп, каждая из которых занимает две строки в файле DXF. В первой строке размещается код группы, который представляет собой положительное ненулевое целое число, имеющее формат "I3" языка ФОРТРАН (то есть выровненное вправо число, заполненное пробелами в трехсимвольном поле). Вторая строка группы представляет собой значение группы, имеющее формат, который зависит от типа группы, задаваемого кодом группы. Присвоение кодов групп зависит от того, какой элемент описывается в файле. Тип значения, которое дает эта группа, определяется из кода группы следующим образом:

Диапазон кодов группы Соответствующее значение

0 - 9 Строковое

10 - 59 С плавающей запятой

60 - 79 Целое

Таким образом, программа может легко прочитать значение, соответствующее коду группы, не имея информации о конкретном использовании этой группы в элементе файла. Форма представления значений в файле DXF не зависит от установки параметров в команде UNITS: координаты всегда представляются в виде десятичных чисел (или если они очень большие, то в виде научных обозначений), а углы всегда представляются в виде десятичных градусов, причем отсчет ведется от направления на восток от начала координат. Переменные, точки входа в элементы таблицы и графические примитивы описываются с помощью группы, которая представляет элемент, задавая его тип и/или имя, после чего следуют многочисленные группы, которые представляют собой значения, связанные с этим элементом. Кроме того, для разделителей файлов, таких как метки конца и начала разделов, таблиц и самих файлов, используются специальные группы. Графические примитивы, точки входа в таблицы и разделители файлов всегда вводятся с помощью группы 0, за которой следует имя, описывающее элемент.

1.2 Коды группы

Коды группы используются для указания типа значения группы, как пояснялось выше, и для указания общего назначения группы. Специальная функция кода группы зависит от фактической переменной, элемента таблицы или описания графического примитива. В данном разделе указано общее назначение групп, причем те, которые всегда выполняют одну и ту же функцию, отмечены словом "(фиксированный)". 0 Устанавливает начало графического примитива, входа в таблицу, или же разделителя файлов. О чем именно идет речь, указывает следующее за ним текстовое значение.

1 Первичное текстовое значение для графического примитива.

2 Имя; описатель атрибута, имя блока, и т.д.

3-5 Другие текстовые или именованные значения.

6 Имя типа линии (фиксированное).

7 Имя типа текстового шрифта (фиксированное).

8 Имя слоя (фиксированное).

9 Идентификатор имени переменной (используется только в разделе ЗАГОЛОВОК файла).

10 Первичная координата Х (начальная точка линии или текстового графического примитива, центр окружности и т.д.).

11-18 Другие координаты Х.

20 Первичная координата Y. Значения второй координаты всегда соответствуют значениям первой координаты и следуют непосредственно за ними в файле.

21-28 Другие координаты Y.

30 Первичная координата Z. Значения третьей координаты всегда соответствуют значениям первой и второй координат и следуют непосредственно за ними в файле.

31-36 Другие координаты Z (в будущем).

38 Если ненулевое значение, то это подъем графического примитива (фиксированное).

39 Если ненулевое значение, то это таблица графического примитива (фиксированное).

40-48 Значения с плавающей запятой (высота текста, масштабные коэффициенты и т.д.).

49 Повторное значение - многократные группы 49 могут попадаться в одном графическом примитиве для таблиц переменной длины (таких как длины штрихов в таблице LTYPE). Для задания длины таблицы перед первой группой 49 всегда предусматривается группа 7х.

50-58 Углы.

62 Номер цвета (фиксированное).

66 Флажок "Далее идут графические примитивы" (фиксированное).

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

0 (Начало раздела HEADER)

SECTION

2

HEADER

<<<<Здесь идут элементы переменных раздела HEADER>>>>

0 (Конец раздела HEADER)

ENDSEC (Начало раздела TABLES)

0

SECTION

2

TABLES

0

TABLE

2

LTYPE

70

(Максимальное количество элементов таблицы типов линий)

<<<<Здесь идут элементы таблицы типов линий>>>>

0

ENDTAB

0

TABLE

2

LAYER

70

(Максимальное число элементов таблицы слоев)

<<<<Здесь идут элементы таблицы слоев>>>>

0

ENDTAB

0

TABLE

2

STYLE

70

(Максимальное число элементов таблицы текстовых шрифтов)

<<<<Здесь идут элементы таблицы текстовых шрифтов>>>>

0

ENDTAB

0

TABLE

2

VIEW

70

(Максимальное число элементов таблицы видов)

<<<<Здесь идут элементы таблицы видов>>>>

0

ENDTAB

0

ENDSEC (Конец раздела TABLES)

0 (Начало раздела BLOCKS)

SECTION

2

ENTITIES

<<<<Здесь идут примитивы чертежа>>>>

0

ENDSEC (Конец раздела ПРИМИТИВЫ)

0

EOF (Конец файла)

1.3 Раздел ЗАГОЛОВОК

Раздел ЗАГОЛОВОК (HEADER) файла DXF содержит установочные значения для переменных, которые непосредственно связаны с чертежем. Эти переменные устанавливаются с помощью различных команд и относятся к такому виду информации, который отображается на дисплее с помощью команды STATUS. Каждая переменная указывается в разделе заголовка с помощью группы 9, задающей ее имя, после чего следуют группы, определяющие ее значение. Переменные заголовка, последующие группы и их значения приведены далее.

$ACADVER 1(номер версии системы AutoCAD)

$ANGBASE 50(угол направления ноль)

$ANGDIR 70(1=углы по часовой, 0=против часовой)

$ATTMODE 70(видимость атрибута: 0=нет; 1=нормальная; 2=все)

$AUNITS 70(формат UNITS для углов)

$AUPREC 70(точность UNITS для углов)

$AXISMODE 70(если значение не равно нулю, то оси включены)

$AXISUNIT 10 и 20(разметка осей Х и Y)

$BLIPMODE 70(если значение не равно нулю, то "включение" режима

отметки на экране)

$CECOLOR 62(номер цвета примитива; 0=BYBLOCK, 256=BYLAYER)

$CELTYPE 6(имя типа линии примитива, или BYBLOCK или BYLAYER)

$CHAMFERA 40(первый параметр фаски)

$CHAMFERB 40(второй параметр фаски)

$CLAYER 8(имя текущего слоя)

$COORDS 70(0=статическое отображение координат, 1=непрерывное

обновление, 2="d.

(<юлианская дата>.<Остаток>)

Переменные истекшего времени ($TDINDWG и $TDUSRTIMER) имеют

подобный формат:

(<Число дней>.<Остаток>)

1.4 Раздел ТАБЛИЦЫ

Раздел ТАБЛИЦЫ (TABLES) файла DXF содержит четыре таблицы, каждая из которых в свою очередь содержит различное число табличных записей. Таблицы всегда расположены в таком порядке, который имеется в приведенном выше примере этого файла. Каждая таблица из раздела TABLES начинается с группы 0 с меткой "TABLE" /ТАБЛИЦА/. За ней следует группа 2 с названием таблицы ("LTYPE", "LAYER", "STYLE" или же "VIEW"), и далее - группа 70, задающая максимальное число табличных записей. Таблицы в чертеже могут содержать исключенные элементы, однако они не записываются в файл DXF. Таким образом, реальное число элементов, которые следуют после заголовка таблицы, может быть меньше числа, заданного в группе 70, поэтому не следует использовать число, заданное в группе 70, в качестве индекса при чтении таблицы. Предусмотрено, что ваша программа для чтения файлов DXF может разместить массив заранее, чтобы сохранить все последующие табличные элементы. После заголовка в каждой таблице следуют табличные записи. Каждый элемент таблицы состоит из группы 0, идентифицирующей тип элемента (такой же, как и имя таблицы, т.е. "LTYPE" или "LAYER"), группы 2, в которой указывается имя записи, группы 70, в которой указываются флажки, относящиеся к табличной записи (для каждой таблицы определены ниже), и из дополнительных групп, в которых приводятся значения табличных записей. Конец каждой таблицы отмечается с помощью группы 0, которая имеет значение "ENDTAB".

Ниже приведены группы, которые используются для каждого типа табличного элемента. В каждом элементе (пункте) таблицы представлены все возможные группы.

LTYPE

3(описательный текст для типа линии), 72(код выравнивания), 73(число элементов длин штрихов), 40(общая длина линий образца), 49(длина штриха 1), 49(длина штриха 2)

LAYER

62(номер цвета, отрицательный, если слой "выключен"), 6(имя типа линии). Если слой "заморожен", то бит 1 устанавливается во флажках группы 70.

STYLE

40(фиксированная высота текста; если высота текста не является фиксированной, то 0), 50(непрямой угол), 71(флажки генерации текста), 42(используется высота, заданная в последний раз), 3(имя файла текстового шрифта или формы). Пункт таблицы STYLE используется также для записи запросов LOAD (загрузка) файла формы. В этом случае бит 1 устанавливается в флажках группы 70, и значимой является только 3 группа (тем не менее, все остальные группы являются выходными).

VIEW

40 и 41 (высота и ширина вида), 10 и 20 (центральная точка вида), 11, 21 и 31(направление вида от начала отсчета).

1.5 Раздел БЛОКИ

Раздел БЛОКИ (BLOCKS) файла DXF содержит все описания блоков. Данный раздел содержит примитивы, которые составляют блоки, используемые в чертеже. Формат примитивов, содержащихся в данном разделе, идентичен формату, который приведен ниже при описании раздела ENTITIES, поэтому для более детального знакомства обратитесь к указанному разделу. Все графические примитивы в разделе BLOCKS размещаются между элементами BLOCKS и ENDBLK. Элементы BLOCK и ENDBLK встречаются только в разделе BLOCKS. Описания блоков не бывают вложенными (то есть, элементы BLOCK или ENDBLK не могут располагаться внутри другой пары BLOCK и ENDBLK).

1.6 Раздел ПРИМИТИВЫ

Элементы графических примитивов размещаются как в разделе BLOCKS, так и в разделе ПРИМИТИВЫ (ENTITIES) файла DXF. Формат их размещения и в том и в другом разделе идентичен. Ниже приведен формат каждого графического примитива в таком виде, в каком он размещается в файле. Некоторые группы, которые определяют графический примитив, размещаются в файле всегда, а некоторые являются дополнительными, и появляются в файле только в том случае, если имеют такое значение, которое отличается от их значения по умолчанию. В приведенном описании для групп, которые всегда имеются в файле, дается номер группы и функция, а дополнительные группы помечены словами "-дополнительная N", которые следуют после описания группы. Величина "N" представляет собой значение по умолчанию, которое принимается в том случае, если группа опущена.

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

Помните, что файл DXF - это полное представление базы данных чертежей, и что в ходе дальнейшего совершенствования системы AutoCAD к графическим примитивам для расширения возможностей будут добавляться новые группы. Запись вашей программы обработки DXF с помощью табличного управления, отказ от каких-либо предположений об очередности групп в графическом примитиве и пропуск неопределенных в данное время групп даст возможность намного проще адаптировать файлы DXF для новых версий системы AutoCAD.

Каждый графический примитив начинается с группы 0, указывающей его тип. Имена, которые используются для графических примитивов, даны в таблице, приведенной ниже. Каждый графический примитив содержит группу 8, в которой приведено имя слоя, на котором он постоянно находится. Если графический примитив имеет ненулевой подъем или толщину, тип линии, информацию о цвете. Следующие группы включены только в том случае, если примитив имеет отличные значения для этих свойств от значений по умолчанию.

6 Имя типа линии (если не "BYLAYER"). Специальное имя "BYLAYER" указывает на тип линии вещественный.

38 Подъем (если не нулевой)

39 Толщина (если не нулевая)

62 Номер цвета (если нет "BYLAYER"). Нулевое значение определяет "BYBLOCK" (вещественный) цвет. Остальные группы, которые составляют элемент описания графического примитива, следующие:

LINE /линия/

10 и 20 (начальная точка), 11 и 21(конечная точка)

POINT /точка/

10 и 20

CIRCLE /круг/

10 и 20 (центр), 40(радиус)

ARC /дуга/

10 и 20 (центр), 40 (радиус), 50 (начальный угол), 51 (конечный угол)

TRACE /трасса/

Четыре точки, задающие углы трассы: 10 и 20, 11 и 21, 12 и 22, 13 и 23

SOLID /тело/

Четыре точки, задающие углы сплошного тела: 10 и (сплошной) 20, 11 и 21, 12 и 22, 13 и 23. Если тело имеет только три стороны, то координаты, задаваемые с помощью групп 12 и 22,13 и 23 будут одни и те же (то есть, группы 12 и 13 одинаковые и группы 22 и 23 одинаковые)

TEXT /текст/

10 и 20(место вставки), 40 (высота), 1 (значение текста), 50 (угол поворота - дополнительная 0), 41 (относительный масштабный коэффициент по Х дополнительная 1), 51 (угол наклона-дополнительная 0), 7 (имя типа текста-дополнительная "STANDARD"), 71 (флажки генерации - дополнительная 0), 72 (тип выравнивания - дополнительная 0), 11 и 21 (точка выравнивания - дополнительная; имеется только в том случае, если есть не равная нулю группа 72)

SHAPE /форма/

10 и 20 (место вставки), 40 (размер), 2 (имя формы), 50 (угол поворота - дополнительная 0), 41 (относительный масштабный коэффициент по Х- дополнительная 1), 51( угол наклона - дополнительная 0)

BLOCK /блок/

2 (имя блока), 70 (флажки типа блока), 10 и 20 (базовая точка блока). Имеется только в разделе BLOCK

ENDBLK /конец блока/

Групп нет. Имеется только в разделе BLOCK

INSERT /вставка/

66 (флажок "Далее следуют атрибуты" -дополнительная 0), 2 (имя блока), 10 и 20 (место вставки), 41 (масштабный коэффициент по Х - дополнительная 1), 42 (масштабный коэффициент по Y-дополнительная 1), 50 (угол поворота - дополнительная 0), 70 и 71 (количество столбцов и строк -дополнительная 0), 44 и 45 (шаг столбцов и строк - дополнительная 0)

ATTDEF

10 и 20 (начало текста), 40 (высота текста), 1 (значение по умолчанию), 3 (строки приглашения), 2 (строка), 70 (признаки атрибута), 73 (длина поля - дополнительная 0), 50 (поворот текста -дополнительная 0), 41 (относительный масштабный коэффициент по Х - дополнительная 1), 51 (угол наклона-дополнительная 0), 7 (имя типа текста-дополнительная "STANDARD"), 71 (признаки генерации текста - дополнительная 0), 72 (тип выравнивания текста - дополнительная 0), 11 и 21 (точка выравнивания - дополнительная; имеется только в том случае, если есть не равная нулю группа 72)

ATTRIB

10 и 20 (начало текста), 40 (высота текста), 1 (значение), 2 (описатель атрибута), 70 (признаки атрибута), 73 (длина поля - дополнительная 0), 50 (поворот текста - дополнительная 0), 41 (относительный масштабный коэффициент по Х - дополнительная 1), 51 ( угол наклона-дополнительная 0), 7 (имя типа текста -дополнительная "STANDARD"), 71 (признаки генерации текста - дополнительная 0), 72 (тип выравнивания текста - дополнительная 0, имеется только в том случае, если есть не равная нулю группа 72)

POLYLINE

70 (признаки ломаной), 40 (начальная ширина по умолчанию), 41 (конечная ширина по умолчанию); признаки имеют в данное время значения битов 1 (замкнутая ломаная) и 2 (добавлена информация о встраивании кривой). Значения ширины по умолчанию относятся к любой вершине (точке перегиба), у которой нет значений ширины (смотри ниже).

VERTEX

10 и 20 (местоположение), 40 (начальная ширина дополнительная, смотри выше), 41 (конечная ширина дополнительная, смотри выше), 42 (кривизна (выпуклость)), 70 (признаки точки перегиба), 50 (направление касательной к сглаживающей кривой дополнительная). Выпуклость - это тангенс 1/4 внутреннего угла для сегмента дуги, который становится отрицательным, если направление дуги отсчитывается от начальной точки к конечной по часовой стрелке; выпуклость равна 0 на прямолинейном участке, а на полукруглом участке равна 1. В настоящее время признаки точки перегиба включают 1 (дополнительная точка перегиба, образованная путем подгонки кривой) и 2 (определен тангенс подгонки кривой). Нулевое значение тангенса может опускаться в выходных данных DXF, однако оно является значимым, если в признаках точки перегиба установлен бит "тангенс определен".

SEQEND

Нет полей. С помощью этой величины отмечается конец точек перегиба (имя типа -VERTEX) для ломаных или конец величин атрибутов (имя типа ATTRIB) для графического примитива INSERT, который имеет атрибуты (определяемые по наличию не равной нулю группы 66 в графическом примитиве INSERT).

1.7 Определения признаков примитивов

Элементы графических примитивов, перечисленные выше, используют различные значения флажков ("признаков"). Это целочисленные коды (групп 6х и 7х), которые кодируют разного рода информацию о синтаксической единице (графическом примитиве). В дальнейших параграфах описывается назначение различных групп с признаками (флажками), которые используются в графических примитивах. В данном описании термин "закодирован побитно" означает, что признак содержит различные значения "истина" или "ложь", которые закодированы как сумма заданных значений битов. Те биты, которые не определены в данном разделе, должны игнорироваться в этих полях и устанавливаться равными нулю при построении файла DXF.

Признак "Далее следуют атрибуты"

Данный признак содержится в дополнительной группе 66, которая в настоящее время используется только в синтаксической единице INSERT. Если значение, которое следует за группой, равно 1, то ожидается, что атрибуты (ATTRIB) следуют за элементом INSERT.

Признаки атрибутов

Данные признаки содержатся в группе 70, которая встречается в синтаксических конструкциях ATTDEF и ATTRIB. Это поле, закодированное побитно, в котором 1 означает, что атрибут "невидимый" (не отображается), 2 означает, что атрибут является постоянным, а 4 означает, что при вводе данного атрибута требуется проведение проверки.

Признаки генерации текста

Данные признаки содержатся в дополнительной группе 71,которая встречается в синтаксических конструкциях TEXT, ATTDEF и ATTRIB. Это поле, закодированное побитно, в котором 2 означает, что текст зеркально отображается в направлении Х (т.е. нормальное зеркальное отображение), а 4 означает, что текст отображается в перевернутом виде.

Тип выравнивания текста

Данный признак содержится в дополнительной группе 72, которая встречается в синтаксических конструкциях TEXT, ATTDEF и ATTRIB. Данное значение (НЕ является закодированным побитно) показывает тип выравнивания текста, который используется в данной конструкции. 0 - означает выравнивание по левому краю, 1 означает центрирование текста, 2 - означает выравнивание по правому краю, а 3 указывает, что текст "выравнен". Если данная группа имеет ненулевое значение, то в той же синтаксической конструкции должны встретиться группы 11 и 21, которые задают точку выравнивания текста (центральную, крайнюю правую или же вторую точку выравнивания).

Признаки типа блока

Данный признак содержится в группе 70, которая встречается в синтаксической конструкции BLKDEF. Этот признак является закодированным побитно, при этом 1 означает, что мы имеем дело с "анонимным" блоком,созданным с помощью штриховки или же с помощью других внутренних операций, а 2 означает, что данный блок имеет атрибуты.

Источник: http://silkerok.chat.ru/rus/doc/dxf_doc.htm