- •«Санкт-петербургский государственный университет аэрокосмического приборостроения»
- •Оглавление
- •1. Постановка задачи
- •2. Общая структура файла dxf
- •3. Коды группы
- •4. Раздел заголовок
- •5. Раздел таблицы
- •6. Раздел блоки
- •7. Раздел примитивы
- •8. Определения признаков примитивов
- •Признаки типа блока
- •9. Написание интерфейсных программ dxf
- •12. Аппаратные и программные требования.
- •Требования к программному обеспечению
- •15. Литература
7. Раздел примитивы
Элементы графических примитивов размещаются как в разделе 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). |
Codes 00C and 00D: Bulge-Specified Arcs
Специальные коды 00С и 00D (12и13) обеспечивают другой механизм для включения сегмента дуги в описании примитива. Они похожи на коды 8 и 9, в том, что вы можете использовать их, чтобы задать X-Y координаты. Однако, коды 00С и 00D позволяют вам рисовать дуги, применяя фактор выпуклости к вектору положения.
Код 00С создает один сегмент дуги, а код 00D создает несколько сегментов дуг (полидуг) до тех пор пока он не будет прерван выражением (0,0) код 00С должен формироваться 3 байтами описывающими дугу.
0C,X-координата,Y-координата, выпуклость
X и Y координаты и bulge, которые описывают кривизну дуги могут варьироваться от 127 до –127. Если координата сегмента линии описана длиной D, и перпендикуляр расстояния середины этого сегмента имеет высоту H , тогда величина Bulge будет ((2 * H / D) * 127). Знак отрицателен, если дуга направлена по часовой стрелке.
