elima.ru
Мертвечина
СтатьиСистемы автоматизированного проектирования (САПР)

Документация по DXF

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

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

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

C.1 Файлы (DXF) обмена чертежами в коде ASCII

Этот раздел описывает формат файла DXF (обмен чертежа) и команды, обеспечивающие чтение и запись этих файлов. DXf файлы являются стандартными текстовыми файлами ASCII. Они могут просто быть перетранслированы в форматы другой системы проектирования или добавлены к другим программам для специализированного анализа.

С.1.1 Команда DXFOUT – запись файла DXF

Можно осуществить генерацию файла обмена чертежами на основании существующего файла чертежа с помощью команды редактора чертежей DXFOUT. Данная команда имеет следующий
формат:
Command: DXFOUT File name:(name or RETURN) (Команда: DXFOUT Имя файла:(имя или RETURN))

По умолчанию именем для входного файла является то же самое имя, что и для текущего чертежа, но только с типом файла ".DXF". Если вы задаете имя файла в явном виде, то не включайте в него тип файла; предполагается, что тип файла ".DXF". Если файл с таким именем уже существует, то он удаляется.

ЗАМЕЧАНИЕ: Выходной файл, полученный с помощью команды DXFOUT, существует в новом формате DXF, который введен в версии 2.0 системы AutoCAD и описан ниже в данном приложении. Если вы переходите на работу с новой версией в результате модернизации после работы с более ранней версией системы AutoCAD и вам необходимо получить файл DXF старого типа, то ответьте на приглашение "File name" /"Имя файла"/ вводом "имя,OLD". Данная возможность представляет средство временного преобразования и в будущей версии системы будет исключена.

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

Enter decimal places of accuracy (0 to 16) (or entities) <6>: (Введите количество десятичных разрядов для задания точности (от 0 до 16) (или примитивы) <6>:)

Если в ответ вы задаете "Entities" (или просто "E"), DXFOUT попросит вас выбрать объекты, которые вы хотите записать в файл DXF. В выходной файл будут включены только выбранные вами объекты – таблицы символов (включая определения блоков) не будут включены. После того, как вы выберите нужные объекты, AutoCAD снова запросит требуемую точность представления чисел.

Enter decimal places of accuracy (0 to 16) <6>:

С.1.2 Команда DXFIN – загрузка файла DXF

Файл обмена чертежами может быть преобразован в чертеж системы AutoCAD с помощью команды DXFIN. Прежде всего войдите в редактор чертежей, используя задачу "Create new drawing" /"Создание нового чертежа"/ из Главного меню. Затем выдайте команду DXFIN.

Command: DXFIN File name:(name) (Команда:DXFIN Имя файла:(имя))

Введите имя загружаемого файла обмена чертежами.

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

Если текущий чертеж не новый, DXFIN будет загружать только раздел ПРИМИТИВОВ из DXF файла, добавляя примитивы, обнаруженные в текущем чертеже. В этом случае, DXFIN будет выводить сообщение:
Not a new drawing – only ENTITIES section will be input (Чертеж не новый – только раздел ПРИМИТИВОВ будет введен)

Если ошибки были обнаружены при вводе такого частичного DXF, чертеж возвращается в состояние, в котором он был до выполнения команды DXFIN. В противном случае вновь добавленные примитивы будут нарисованы.

С.1.3 Формат файла DXF

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

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

C.1.3.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, за которой следует имя, описывающее элемент.

C.1.3.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 (Конец файла) 

C.1.3.3 Раздел ЗАГОЛОВОК

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

$ACADVER1 (номер версии системы AutoCAD)
$ANGBASE50 (угол направления ноль)
$ANGDIR70 (1=углы по часовой, 0=против часовой)
$ATTMODE70 (видимость атрибута: 0=нет; 1=нормальная; 2=все)
$AUNITS70 (формат UNITS для углов)
$AUPREC70 (точность UNITS для углов)
$AXISMODE70 (если значение не равно нулю, то оси включены)
$AXISUNIT10 и 20 (разметка осей Х и Y)
$BLIPMODE70 (если значение не равно нулю, то "включение" режима отметки на экране)
$CECOLOR62 (номер цвета примитива; 0=BYBLOCK, 256=BYLAYER)
$CELTYPE6 (имя типа линии примитива, или BYBLOCK или BYLAYER)
$CHAMFERA40 (первый параметр фаски)
$CHAMFERB40 (второй параметр фаски)
$CLAYER8 (имя текущего слоя)
$COORDS70 (0=статическое отображение координат, 1=непрерывное обновление, 2="d<a" формат)
$DIMALT70 (если не ноль, размерность в альтернативных единицах)
$DIMALTD70 (число десятичных знаков для альтернативных единиц)
$DIMALTF40 (масштабный коэффициент альтернативных единиц)
$DIMASZ40 (величина размерной стрелки)
$DIMBLK2 (имя блока стрелки)
$DIMCEN40 (размер центровых меток/линий)
$DIMDLE40 (продолжение линии размерности)
$DIMDLI40 (увеличение размерной выносной линии)
$DIMEXE40 (продолжение выносной линии)
$DIMEXO40 (смещение выносной линии)
$DIMLFAC40 (масштабный коэффициент линейных размеров)
$DIMLIM70 (если не равно нулю, то вырабатываются пределы размеров)
$DIMRND40 (значение округления для расстояний размера)
$DIMSCALE70 (масштабный коэффициент габаритных размеров)
$DIMSE170 (если не равно нулю, то первая выносная линия подавляется)
$DIMSE270 (если не равно нулю, то вторая выносная линия подавляется)
$DIMTAD70 (если не равно нулю, то текст располагается над размерной линией)
$DIMTIH70 (если не равно нулю, то текст располагается под горизонталью)
$DIMTM40 (отрицательный допуск)
$DIMTOH70 (если не равно нулю, то текст располагается над горизонталью)
$DIMTOL70 (если не равно нулю, то вырабатываются допуски размеров)
$DIMTP40 (положительный допуск)
$DIMTSZ40 (задание размеров штриховой разметки: 0=разметки нет)
$DIMTXT40 (задание высоты размерностей текста)
$DIMZIN70 (если не нуль, включать нулевые дюймы в текст)
$DRAGMODE70 (0=выключено, 1=включено, 2=автоматическое)
$DRAGP170 (скорость съема ввода для трансформации с регенерацией)
$DRAGP270 (скорость съема ввода для быстрой трансформации)
$ELEVATION40 (установка текущего подъема с помощью команды ELEV)
$EXTMAX10 и 20 (правый верхний угол пределов чертежа)
$EXTMIN10 и 20 (левый нижний угол пределов чертежа)
$FASTZOOM70 (0=выключено, 1=включено)
$FILLETRAD40 (радиус сопряжения)
$FILLMODE70 (если не равно нулю, то "включение" режима FILL)
$GRIDMODE70 (если не равно нулю, то "включение" режима GRID)
$GRIDUNIT10 и 20 (размещение координатной сетки по осям Х и Y)
$HIGHLIGHT70 (1=подсвечивать выбранные объекты, 2=не подсвечивать)
$INSBASE10 и 20 (установка базы вставки с помощью команды BASE)
$LIMCHECK70 (не равно нулю, если "включена" проверка пределов)
$LIMMAX10 и 20 (правый верхний угол границ чертежа)
$LIMMIN10 и 20(левый нижний угол границ чертежа)
$LTSCALE40 (глобальный масштаб типа линии)
$LUNITS70 (формат команды UNITS для координат и расстояний)
$LUPREC70 (точность команды UNITS для координат и расстояний)
$MENU1 (имя файла меню)
$MIRRTEXT70 (если не нуль, текст MIRROR)
$ORTHOMODE70 (если не равно нулю, то "включение" режима ORTHO)
$OSMODE70 (действующий режим привязки объекта)
$PDMODE70 (режим отображения точек)
$PDSIZE40 (размер отображения точек)
$PLINEWID40 (ширина ломаной по умолчанию)
$QTEXTMODE70 (если не равно нулю, то "включение" режима "быстрого текста")
$REGENMODE70 (если не равно нулю, то "включение" режима REGENAUTO)
$SKETCHINC40 (инкремент эскизной записи)
$SKPOLY70 (0=эскиз линиями, 1=эскиз ломаными)
$SNAPANG50 (угол вращения сетки привязки)
$SNAPBASE10 и 20 (начало отсчета сетки привязки)
$SNAPISOPAIR70 (изометрическая плоскость: 0= слева, 1= сверху, 2=справа)
$SNAPMODE70 (если не равно нулю, то "включение" режима привязки)
$SNAPSTYLE70 (тип привязки:0=стандартный, 1=изометрический)
$SNAPUNIT10 и 20 (размеры сетки по Х и Y)
$TDCREATE40 (дата/время создания чертежа)
$TDINDWG40 (накопленное время редактирования для данного чертежа)
$TDUPDATE40 (дата/время последнего обновления чертежа)
$TDUSRTIMER40 (таймер прошедшего времени пользователя)
$TEXTSIZE40 (высота текста по умолчанию)
$TEXTSTYLE7 (имя текущего типа шрифта)
$THICKNESS40 (установка текущей толщины с помощью команды ELEV)
$TRACEWID40 (ширина трассы по умолчанию)
$VIEWCTR10 и 20 (центр текущего вида на экране)
$VIEWDIR10, 20 и 30 (установка текущей точки вида с помощью команды VPOINT)
$VIEWSIZE40 (высота текущего вида на экране)

ЗАМЕЧАНИЕ: Хотя выше приведенный список переменных заголовка DXF очень юлизок к списку системных переменных в приложениии А, эти два списка не идентичны. Будьте внимательны ссылаясь к правильному списку.

Переменные даты и времени ($TDCREATE и $TDUPDATE) имеют вывод, как действительные числа в формате:
<Julian date>.<Fraction> (<юлианская дата>.<Остаток>)

Переменные истекшего времени ($TDINDWG и $TDUSRTIMER) имеют подобный формат:
<Number of days>.<Fraction> (<Число дней>.<Остаток>)

С.1.3.4 Раздел ТАБЛИЦЫ

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

После заголовка в каждой таблице следуют табличные записи. Каждый элемент таблицы состоит из группы 0, идентифицирующей тип элемента (такой же, как и имя таблицы, т.е. "LTYPE" или "LAYER"), группы 2, в которой указывается имя записи, группы 70, в которой указываются флажки, относящиеся к табличной записи (для каждой таблицы определены ниже), и из дополнительных групп, в которых приводятся значения табличных записей. Конец каждой таблицы отмечается с помощью группы 0, которая имеет значение "ENDTAB".

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

LTYPE3 (описательный текст для типа линии), 72 (код выравнивания), 73 (число элементов длин штрихов), 40 (общая длина линий образца), 49 (длина штриха 1), 49 (длина штриха 2), ...
LAYER62 (номер цвета, отрицательный, если слой "выключен"), 6 (имя типа линии). Если слой "заморожен", то бит 1 устанавливается во флажках группы 70.
STYLE40 (фиксированная высота текста; если высота текста не является фиксированной, то 0), 50 (непрямой угол), 71 (флажки генерации текста), 42 (используется высота, заданная в последний раз), 3 (имя файла текстового шрифта или формы). Пункт таблицы STYLE используется также для записи запросов LOAD (загрузка) файла формы. В этом случае бит 1 устанавливается в флажках группы 70, и значимой является только 3 группа (тем не менее, все остальные группы являются выходными).
VIEW40 и 41 (высота и ширина вида), 10 и 20 (центральная точка вида), 11, 21 и 31 (направление вида от начала отсчета).

C.1.3.5 Раздел БЛОКИ

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

C.1.3.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)
ATTDEF10 и 20 (начало текста), 40 (высота текста), 1 (значение по умолчанию), 3 (строки приглашения), 2 (строка), 70 (признаки атрибута), 73 (длина поля – дополнительная 0), 50 (поворот текста -дополнительная 0), 41 (относительный масштабный коэффициент по Х – дополнительная 1), 51 (угол наклона-дополнительная 0), 7 (имя типа текста-дополнительная "STANDARD"), 71 (признаки генерации текста – дополнительная 0), 72 (тип выравнивания текста – дополнительная 0), 11 и 21 (точка выравнивания – дополнительная; имеется только в том случае, если есть не равная нулю группа 72)
ATTRIB10 и 20 (начало текста), 40 (высота текста), 1 (значение), 2 (описатель атрибута), 70 (признаки атрибута), 73 (длина поля – дополнительная 0), 50 (поворот текста – дополнительная 0), 41 (относительный масштабный коэффициент по Х – дополнительная 1), 51 ( угол наклона-дополнительная 0), 7 (имя типа текста -дополнительная "STANDARD"), 71 (признаки генерации текста – дополнительная 0), 72 (тип выравнивания текста – дополнительная 0, имеется только в том случае, если есть не равная нулю группа 72)
POLYLINE70 (признаки ломаной), 40 (начальная ширина по умолчанию), 41 (конечная ширина по умолчанию); признаки имеют в данное время значения битов 1 (замкнутая ломаная) и 2 (добавлена информация о встраивании кривой). Значения ширины по умолчанию относятся к любой вершине (точке перегиба), у которой нет значений ширины (смотри ниже).
VERTEX10 и 20 (местоположение), 40 (начальная ширина дополнительная, смотри выше), 41 (конечная ширина дополнительная, смотри выше), 42 (кривизна (выпуклость)), 70 (признаки точки перегиба), 50 (направление касательной к сглаживающей кривой дополнительная). Выпуклость – это тангенс 1/4 внутреннего угла для сегмента дуги, который становится отрицательным, если направление дуги отсчитывается от начальной точки к конечной по часовой стрелке; выпуклость равна 0 на прямолинейном участке, а на полукруглом участке равна 1. В настоящее время признаки точки перегиба включают 1 (дополнительная точка перегиба, образованная путем подгонки кривой) и 2 (определен тангенс подгонки кривой). Нулевое значение тангенса может опускаться в выходных данных DXF, однако оно является значимым, если в признаках точки перегиба установлен бит "тангенс определен".
SEQENDНет полей. С помощью этой величины отмечается конец точек перегиба (имя типа -VERTEX) для ломаных или конец величин атрибутов (имя типа ATTRIB) для графического примитива INSERT, который имеет атрибуты (определяемые по наличию не равной нулю группы 66 в графическом примитиве INSERT).

С.1.3.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 означает, что данный блок имеет атрибуты.

С.1.4 Написание интерфейсных программ DXF

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

В качестве примера далее следует программа на языке BASIC фирмы "Microsoft", которая осуществляет считывание файла DXF и выбор из рисунка всех примитивов LINE (линии, которые встречаются внутри блоков, опускаются). Эта программа осуществляет вывод на экран конечных точек этих линий. В качестве упражнения вы можете попытаться ввести эту программу в свою вычислительную машину и с ее помощью осуществить обработку какого-либо файла DXF одного из ваших чертежей, а затем расширить возможности программы, предусмотрев вывод координат центра и величины радиуса любых окружностей, которые эта программа обнаруживает. Данная программа предлагается не как пример, дающий возможность отточить технику программирования, и не как иллюстрация способа написания обобщенной программы обработки файла DXF; она представлена в качестве примера того, насколько простой может быть программа, осуществляющая считывание файла DXF.

1000 REM 1010 REM Extract lines from DXF file 1020 REM 1030 LINE INPUT "DXF file name: "; A$ 1040 A$=A$+".DXF" 1050 OPEN "i",1,A$ 1060 REM 1070 REM Ignore until section start encountered 1080 REM 1090 GOSUB 1320 1100 IF G% <> THEN 1090 1110 IF S$ <> "SECTION" THEN 1090 1120 GOSUB 1320 1130 REM 1140 REM Skip unless ENTITIES section 1150 REM 1160 IF S$ <> "ENTITIES" THEN 1090 1170 REM 1180 REM Scan until end of section processing LINEs 1190 REM 1200 GOSUB 1320 1210 IF G% = ) AND S$="ENDSEC" THEN STOP 1220 IF G%=0 AND S$="LINE" THEN GOSUB 1270 : GOTO 1210 1230 GOTO 1200 1240 REM 1250 REM Accumulate LINE entity groups 1260 REM 1270 GOSUB 1320 1280 IF G%=!) THEN X1=X : Y1=Y 1290 IF G%=11 THEN X2=X : Y2=Y 1300 IF G%=0 THEN PRINT "Line from (";X1;",";Y1;") to (";X2;",";Y2;")" : RETURN 1310 GOTO 1270 1320 REM 1330 REm Read group code and following value 1340 REM 1350 INPUT #1, G% 1360 IF G% < 10 THEN LINE INPUT #1, S$ : RETURN 1370 IF G% >= 30 AND G% <= 49 THEN INPUT #1, V : RETURN 1380 IF G% >= 50 AND G% <= 59 THEN INPUT #1, A : RETURN 1390 IF G% >= 60 AND G% <= 69 THEN INPUT #1, P% : RETURN 1400 IF G% >= 70 AND G% <= 79 THEN INPUT #1, F% : RETURN 1410 IF G% >=20 THEN PRINT "Invalid group code ";G% : STOP 1420 INPUT #1,X 1430 INPUT #1,G1% 1440 IF G1% <> (G%+10) THEN PRINT "Invalid Y coord code "; G1% : STOP 1450 INPUT #1,Y 1460 RETURN

Написание программы, которая осуществляет построение файла DXF, является более трудной задачей, т.к. вы должны сохранить логическую последовательность в пределах чертежа, которая является обязательной для системы AutoCAD. Система AutoCAD дает вам возможность опустить многие элементы в файле DXF и все же получить годный чертеж. Если вам не требуется устанавливать значения каких-либо переменных в разделе заголовка, то весь раздел HEADER может быть опущен. Любая из таблиц раздела TABLES может быть опущена, если вам не требуется вводить какие-либо данные, и даже весь раздел TABLES может быть опущен, если ничего в нем не требуется. Если вы описали какие-либо типы линий в таблице LTYPE, то эта таблица должна встретиться перед таблицей LAYER. Если в чертеже не используются определения блоков, то может быть опущен раздел BLOCKS. Однако, если он есть, то должен идти перед разделом ENTITIES. В пределах раздела ENTITIES вы можете ссылаться на имена слоев, даже если вы их не определили в таблице LAYER. Такие слои будут автоматически создаваться с помощью цвета 7 и типа линий CONTINUOUS. В конце файла должен стоять элемент EOF.

Приведенная ниже программа, которая написана на языке BASIC фирмы "Microsoft", осуществляет построение файла DXF для многоугольника с заданным числом сторон, координатами крайней левой начальной точки и длинами сторон. Данная программа обеспечивает запись информации только в раздел ENTITIES файла DXF, и размещает все сгенерированные графические примитивы в слое "0", назначенном по умолчанию. Данная программа может рассматриваться в качестве примера минимальной программы, которая осуществляет генерацию файла DXF. Т.к. данная программа не создает заголовка чертежа, границы чертежа, пределы и текущий вид окажутся недопустимыми после выполнения команды DXFIN для данного чертежа, сформированного с помощью этой программы. Вы можете выполнить команду "ZOOM E" для вывода выработанного чертежа на экран. А затем установить границы вручную.

1000 REM 1010 REM Polygon generator 1020 REM 1030 LINE INPUT "Drawing (DXF) file name: "; A$ 1040 OPEN "o",1,A$+".DXF" 1050 PRINT #1,0 1060 PRINT #1,"SECTION" 1070 PRINT #1,2 1080 PRINT #1,"ENTITIES" 1090 PI=ATN(1)*4 1100 INPUT "Number of sides for polygon: ";S% 1110 INPUT "Starting point (X,Y): ";X,Y 1120 INPUT "Polygon side: ";D 1130 A1=(2*PI)/S% 1140 A=PI/2 1150 FOR I%=1 TO S% 1160 PRINT #1,0 1170 PRINT #1,"LINE" 1180 PRINT #1,8 1190 PRINT #1,"0" 1200 PRINT #1,10 1210 PRINT #1,X 1220 PRINT #1,20 1230 PRINT #1,Y 1240 NX=D*COS(A)+X 1250 NY=D*SIN(A)+Y 1260 PRINT #1,11 1270 PRINT #1,NX 1280 PRINT #1,21 1290 PRINT #1,NY 1300 X=NX 1310 Y=NY 1320 A=A+A1 1330 NEXT I% 1340 PRINT #1,0 1350 PRINT #1,"ENDSEC" 1360 PRINT #1,0 1370 PRINT #1,"EOF" 1380 CLOSE 1

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

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

C.2 Двоичные файлы обмена чертежами (+3)

Формат файла DXF, описанный ранее в данном приложении, представляет собой полное представление чертежа системы AutoCAD, в текстовой форме кода ASCII, допускающей простую обработку с помощью других программ. Однако, в случае использования программы CAD/camera или же других программ, обращение к которым осуществляется посредством средств "внешних команд" (возможность, предоставляемая пакетом программ ADE-3; смотри приложение B), обеспечена возможность использования гораздо более компактного файлового формата "DXB" (для двоичного обмена чертежами).

C.2.1 Команда DXBIN

Для загрузки файла DXBIN, созданного с помощью такой программы, как CAD/camera, введите команду DXBIN:
Command: DXBIN DXB file:

Введите имя файла, который вы хотите загрузить. Не следует включать в имя тип файла; система полагает, что тип ".DXB".

C.2.2 Формат файла DXB

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

Файл DXB имеет следующий формат:
Заголовок: "AutoCAD DXB 1.0" CR LF ^Z NUL (19 байт) Данные: ...Нуль или более записей данных... Признак конца: NUL (1 байт)

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

w-16-битовоем целое число, имеет обратный порядок следования байтов, как в стандартных словах процессора 8086 (сначала младший байт, затем старший).
l-указывает на 32-битовое целое число, которое также имеет обратный порядок следования байтов.
f-перед значением указывает, что это 64-битовое число с плавающей запятой типа IEEE (как для процессора 8087).
n-Число, которое может быть либо 16-битовым целым, либо числом с плавающей точкой с зависимости от последних установок элемента данных "режим чисел". По умолчанию режим представления чисел 0, целые со знаком. Если он установлен в 1, все элементы n– будут ситаться как с плавающей точкой.
u-Элемент, представляющий либо 32-битовое целое либо число с плавающе точкой в зависимости от последней установки режима. Если это 32-битовое целое, то значение масштабируется путем умножения на 65536 (2^16). Если значение с плавающей точкой, масштабирование не применяется.
a-Элемент представляет угол. Если режим представления чисел установлен в целочисленные, это 32-битовое целое представляющее угол в миллионных долях градуса (диапазон от 0 до 360000000). Если это число с плавающей точкой, то оно представляет градусы.

Все длины заданы из предположения, что режим чисел установлен в 0 (режим целый). Если режима чисел – вещественный, добавляется 6 байт к длине каждого n– элемента, и добавляется 4 байта для каждого a-, или u– элемента.
LINE: 1 n-fromx n-fromy n-tox n-toy (9 байт) POINT: 2 n-x n-y (5 байт) CIRCLE 3 n-ctrx n-ctry n-rad (7 байт) ARC 8 n-ctrx n-ctry n-rad a-starta a-enda (19 байт) TRACE: 3 n-x1 n-y1 n-x2 n-y2 n-x3 n-y3 n-x4 n-y4 (17 байт) SOLID: 11 n-x1 n-y1 n-x2 n-y2 n-x3 n-y3 n-x4 n-y4 (17 байт) SEQEND: 17 (1 байт) POLYLINE: 19 n-closureflag (3 байта) VERTEX: 20 n-x n-y (5 байт) SCALE FACTOR: 128 f-scalefac (9 байт) NEW LAYER: 129 "layername" NUL (strlen("layername")+2) LINE EXTENSION: 130 n-tox n-toy (5 байт) TRACE EXTENSION: 131 n-x3 n-y3 n-x4 n-y4 (9 байт) BLOCK BASE: 132 n-bx n-by (5 байт) BULGE: 133 u-2h/d (5 байт) WIDTH: 134 n-startw n-endw (5 байт) NUMBER MODE: 135 w-mode (3 байта)

Элемент LINE EXTENSION /УДЛИНЕНИЕ ЛИНИИ/ позволяет продлить последнюю линию или ее удлинение от ее конечной точки (точка "to") до новой конечной точки ("to point"). Элемент удлинение трассы подобным же образом позволяет продлить последнее трассированное сплошное тело или же удлинение трассы от ее конечной линии с координатами Х3, Y3, X4, Y4 до новой линии с координатами X3, Y3, X4, Y4.

SCALE FACTOR /МАСШТАБНЫЙ КОЭФФИЦИЕНТ/ представляет собой число с плавающей запятой, которое при умножении на целочисленные координаты дает возможность получить координаты с плавающей запятой, используемые в реальных графических примитивах. При считывании файла начальный масштабный коэффициент равен 1.0 . С помощью элемента NEW LAYER /НОВЫЙ СЛОЙ/ может создаваться слой, если таковой не существует, имеющий те же самые значения по умолчанию, что и команда "LAYER NEW", и этот слой будет принят в качестве текущего для последующих графических примитивов. По завершении загрузки файла слой будет восстановлен перед выполнением команды.

Элемент BLOCK BASE /БАЗА БЛОКА/ задает базовую (начальную) точку создаваемого блока. База блока должна быть определена до появления первой записи графического примитива. Если блок не определен в файле DXB, то данное описание игнорируется.

Ломаная состоит из прямолинейных сегментов фиксированной ширины, соединяющих вершины, исключая те, которые описаны с помощью элементов BULGE /КРИВИЗНА/ и WIDTH /ШИРИНА/. Признак смыкания должен быть равен либо 0, либо 1; если он равен 1, то существует неявный сегмент от последней вершины (непосредственно перед элементом SEQEND) к первой.

Элемент BULGE, расположенный между двумя элементами VERTEX /ВЕРШИНА/ (или же после последнего элемента VERTEX для замкнутой ломаной), указывает, что две вершины соединены не прямолинейным сегментом, а дугой. Если сегмент прямой линии, соединяющей вершины, имеет длину d, а кратчайшее расстояние от середины этого сегмента до дуги -h, то численное значение составляет: (2*h/d). Кривизна имеет отрицательное значение, если при перемещении по дуге из первой вершины ко второй движение осуществляется по часовой стрелке. Таким образом, половина окружности имеет кривизну равную 1 (или -1). Кроме этого, элементы BULGE могут масштабироваться с коэффициентом 216. Если режим представления чисел установлен в плавающую форму, то обеспечиваемое значение с плавающей точкеой составляет лишь 2*h/d (не масштабированное).

Элемент WIDTH указывает начальную и конечную ширину соединяющего две вершины сегмента (прямолинейного или криволинейного). Данная ширина используется до тех пор, пока не встретится следующий элемент, задающий ширину, или же до элемента SEQEND. Если между элементом POLYLINE (ЛОМАНАЯ) и первой вершиной VERTEX стоит элемент WIDTH, то он хранится как элемент, определяющий значение ширины по умолчанию для ломаной; если ломаная имеет несколько сегментов такой ширины, то использование данной возможности даст значительную экономию пространства базы данных.

Элемент РЕЖИМ ПРЕДСТАВЛЕНИЯ ЧИСЕЛ управляет режимом представления элементов с типом n-, a– или u– в приведенной выше таблице. Если установленное значение не нуль, эти значения будут целыми, в противном случае – с плавающей точкой. Хранение и явные масштабные преобразования для этих значений в обоих режимах описаны выше.

C.2.3 Запись файлов DXB

Не существует явной команды AutoCAD для записи файла DXB, однако специальный драйвер плоттера ADI может записать такой файл. Если вы хотите создать файл DXB из чертежа AutoCAD, сконфигурируйте ADI плоттер и выберите его возможность вывода файла DXB.

C.3 Стандарт обмена файлами IGES (+3)

Используя описанные в настоящем разделе команды, вы можете указать системе AutoCAD читать и записывать файлы в формате обмена IGES.

ЗАМЕЧАНИЕ: Формат файлов IGES и отображение, необходимое для перекодировки между стандартом чертежа AutoCAD и IGES не описаны в рамках данного руководства. Если вам необходимы детали такого сорта, напишите в фирму Autodesk, Inc. для получения последних спецификаций интерфейса AutoCAD/IGES.

C.3.1 Команда IGESOUT (+3)

Вы можете сгенерировать файл обмена в стандарте IGES из существующего чертежа AutoCAD с помощью команды Редактора Чертежей IGESOUT. Формат команды следующий:
Command: IGESOUT File name: (имя или RETURN)

Имя по умолчанию для выходного файла такое же, что и для текущего чертежа, но с типом файла ".igs". Если вы явно указываете имя файла, не включайте тип файла; предполагается ".igs". Если файл с таким именем уже существует, он удаляется.

C.3.2 Команда IGESIN (+3)

Файл обмена в стандарте IGES может быть преобразован в файл чертежа AutoCAD с помощью команды IGESIN. Сначала войдите в Редактор Чертежей используя задачу "Create new drawing" ("Создать новый чертеж") Главного Меню. Затем выдайте команду IGESIN:
Command: IGESIN File name: (имя)

Введите имя файла IGES, который должен быть загружен.

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

   
Если вы являетесь правообладателем данной статьи, и не желаете её нахождения в свободном доступе, вы можете сообщить о свох правах и потребовать её удаления. Для этого вам неоходимо написать письмо по одному из адресов: root@elima.ru, root.elima.ru@gmail.com.