Как вести запись в dxf формат
Перейти к содержимому

Как вести запись в dxf формат

  • автор:

Документация по 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 Общая структура файла
  1. Раздел ЗАГОЛОВКА /HEADER/ – В данном разделе файла DXF содержится общая информация о чертеже. Каждый параметр имеет имя переменной и соответствующее ей значение.
  2. Раздел ТАБЛИЦ /TABLES/ – В данном разделе содержатся определения именованных элементов.
    • Таблица типов линий (LTYPE)
    • Таблица слоев
    • Таблица типов шрифтов
    • Таблица видов
  3. Раздел БЛОКОВ /BLOCKS/ – В данном разделе содержатся графические примитивы определений блоков, которые описывают примитивы, входящие в состав каждого блока изображения.
  4. Раздел ПРИМИТИВОВ /ENTITIES/ – В данном разделе содержатся графические примитивы чертежа, включая любые ссылки на блоки.
  5. КОНЕЦ ФАЙЛА

Файл DXF состоит из множества групп, каждая из которых занимает две строки в файле DXF. В первой строке размещается код группы, который представляет собой положительное ненулевое целое число, имеющее формат «I3» языка ФОРТРАН (то есть выровненное вправо число, заполненное пробелами в трехсимвольном поле). Вторая строка группы представляет собой значение группы, имеющее формат, который зависит от типа группы, задаваемого кодом группы.

Присвоение кодов групп зависит от того, какой элемент описывается в файле. Тип значения, которое дает эта группа, определяется из кода группы следующим образом:
Диапазон кодов группы Соответствующее значение 0 – 9 Строковое 10 – 59 С плавающей запятой 60 – 79 Целое

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

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

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

C.1.3.2 Коды группы

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

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

ЗАМЕЧАНИЕ: Хотя выше приведенный список переменных заголовка 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».

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.

С.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 байт)

Все длины заданы из предположения, что режим чисел установлен в 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, который должен быть загружен.

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

Как вести запись в dxf формат

Единственный недостаток это коды 5 и 330. Под ними хранятся HEX-числа и от балды их ставить нельзя. Для следующей полилинии пробовал менять их по принципу i+1 иногда Автокад выдает сообщение о поврежденном файле, а иногда fatal-error, иногда вторая полилиния успешно получается.
И если так подумать, то в данном примере в десятичной форме получаются чистла (5 . 268) (330 . 31), и если формировать метки по принципу i+1, то в итоге получится их совпадение, правда о последствиях совпадения значений этих кодов я также ничего не знаю. К сожалению без этих кодов DXF-файл получается поврежденным.

По какому принципу фомируются метки объектов под кодами 5 и 330?

По какому принципу фомируются метки объектов под кодами 5 и 330?

По принципам, указанным в DXF Reference. Его надо долго изучать, чтобы понять, что этим не стоит заниматься с помощью "обычного блокнота".

Когда DXF генерирует AutoCAD, он знает, как присваивать handle. Когда DXF генерирует человек, он должен знать как это делать. Если еще хочется помучиться, можно почитать старую книгу Джампа, в которой он утверждал, что настоящие программисты работают с DXF, и только мазохисты с DWG. Вся книга про то, как писать на C DXF. И только в конце автор обнаружил, что есть и другие способы для работы (Автолисп, например).

Гы про i+1 ты это правильно определил.
ток фишка в том что Handle раздаются не только в блоке Entities но и в ряде других(практически во всех, на сколько помню).

Вообщем, что я делаю — сначала выборку по файлу, в поисках наибольшего Handle, а потом к нему прибавляем еще 50, что б точняк совпадающих не получить.
и дальше как и сказал i+1 в шеснадцатеричной системе.

Хотя вроде как в описании dxf`а Handle по идее необязательное поле, насколько я понял из Описания dxf формата. Но отвязаться от него так и не удалось.

Вообщем как то так.
А вообще я чаз от Dxf`а ухожу на ActiveX элементы черчения. Уж очень удобно и проработанно в Аутодеске по это этой теме хелпу сделали. Запускаешь автокад программой, и в нем же отрисовываешь все.

Гы апдейт
Про Dxf смотреть в Акаде(2007, в прочих версиях врочем это тоже есть, там же или почти там же)
Help\Additional Resources \Developer Help
Про ActiveX смотреть там же

про поля выдержки из хелпа
5
Handle (тобишь 16ти указатель. добавляется по принципу i+1)

330:
Soft-pointer ID/handle to owner dictionary (optional) честно хз что. я его статичным оставляю. в проге у меня идет ко всем поликам значение — 1F, Акад спокойно хавает.

Программное создание DXF-файлов

Хочу поделиться опытом программного создания DXF-файлов — вдруг кому-то пригодится.
Сам не раз пользовался полезными советами и чужими примерами кода, и буду рад, если и мой труд кому-то принесёт пользу.
Итак.

DXF-формат — это один из самых популярных форматов векторной графики. Его понимают практически все CAD-системы, всевозможные ГИС и САПР. Это его первый большой плюс. А второй плюс DXF-формата — это то, что он текстовый и достаточно хорошо задокументирован (в отличие, например, от распространенных, но закрытых форматов DGN и DWG), а значит — с ним можно работать программно без всяких сторонних библиотек.

Однажды у меня возникла необходимость видеть результаты расчётов своей программы в наглядном графическом виде. Пришлось разобраться с DXF-форматом, и написать свои процедуры, облегчающие создание DXF-файла.
Все эти процедуры собрал в отдельный модуль "unit_dxf.pas" — есть в прилагаемом архиве.
Ну а для примера сделал маленький проект, создающий пару тестовых DXF-файлов.
Как выглядят эти тестовые DXF-файлы — показано на прилагаемых картинках.

Чтобы успешно использовать предлагаемые инструменты, полезно кое-что знать о DXF-формате.

DXF-файл — это текстовый файл, организованный определенным образом.

Если открыть DXF-файл в "Блокноте", можно увидеть, что:
DXF-файл состоит из множества групп, каждая из которых занимает две строки. В первой строке размещается код группы (положительное целое число), а вторая строка группы представляет собой значение группы, имеющее формат, зависящий от кода группы. То есть, минимальный кирпичик, из которых строится DXF-файл, состоит из ПАРЫ строк. (Но в это, в принципе, можно и не вникать — просто интересно для общего развития).

DXF-файл состоит из "шапки" и нескольких разделов (некоторые из которых могут и отсутствовать). Раздел заголовка (HEADER), раздел таблиц (TABLES), раздел блоков (BLOCKS), раздел графических примитивов (ENTITIES). Начало и конец всех разделов отмечаются в DXF-файле специальными группами.

Принцип создания DXF-файла при помощи модуля "unit_dxf.pas":

Сначала процедура "Write_DXF_Header" открывает новый DXF-файл (текстовый) и записывает в него необходимую "минимальную" шапку (её строки описаны как константы в этом же модуле), включая признак начала раздела графических примитиов.
Затем записываем в DXF-файл всю необходимую нам графику при помощи ряда процедур, создающих такие элементы: Поли-линия (ломаная), квадрат, прямоугольник, круг, отрезок, текст.
И затем завершаем создание DXF-файла процедурой "Write_DXF_End" (она пишет в файл признак конца раздела графических примитивов и признак конца DXF-файла, и закрывает его текстовый файл).

Среди всех графических примитивов, особенность имеет поли-линия. Она имеет свою "шапку" (записывается в файл процедурой "Write_POLYLINE_Header"), затем перечень вертексов, т.е. угловых точек ломаной (записываются последовательно процедурой "Write_DXF_Vertex"), и признак конца поли-линии (записывается в файл процедурой "Write_POLYLINE_End"). Нельзя забывать об этом порядке при записи в файл (иначе будет нарушение формата, и DXF-файл может не считываться различными программами).

Вот, собственно, и всё.
Пример создания DXF-файлов показан в прилагаемом проекте.

Документация по 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 Общая структура файла
  1. Раздел ЗАГОЛОВКА /HEADER/ – В данном разделе файла DXF содержится общая информация о чертеже. Каждый параметр имеет имя переменной и соответствующее ей значение.
  2. Раздел ТАБЛИЦ /TABLES/ – В данном разделе содержатся определения именованных элементов.
    • Таблица типов линий (LTYPE)
    • Таблица слоев
    • Таблица типов шрифтов
    • Таблица видов
  3. Раздел БЛОКОВ /BLOCKS/ – В данном разделе содержатся графические примитивы определений блоков, которые описывают примитивы, входящие в состав каждого блока изображения.
  4. Раздел ПРИМИТИВОВ /ENTITIES/ – В данном разделе содержатся графические примитивы чертежа, включая любые ссылки на блоки.
  5. КОНЕЦ ФАЙЛА

Файл DXF состоит из множества групп, каждая из которых занимает две строки в файле DXF. В первой строке размещается код группы, который представляет собой положительное ненулевое целое число, имеющее формат «I3» языка ФОРТРАН (то есть выровненное вправо число, заполненное пробелами в трехсимвольном поле). Вторая строка группы представляет собой значение группы, имеющее формат, который зависит от типа группы, задаваемого кодом группы.

Присвоение кодов групп зависит от того, какой элемент описывается в файле. Тип значения, которое дает эта группа, определяется из кода группы следующим образом:
Диапазон кодов группы Соответствующее значение 0 – 9 Строковое 10 – 59 С плавающей запятой 60 – 79 Целое

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

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

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

C.1.3.2 Коды группы

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

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

ЗАМЕЧАНИЕ: Хотя выше приведенный список переменных заголовка 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».

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.

С.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 байт)

Все длины заданы из предположения, что режим чисел установлен в 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, который должен быть загружен.

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

vri-cnc.ru

Растровые рисунки BMP:
1) берем BMP
2) запихиваем его в bmp to 3d (cм на vricnc.narod.ru сюда еще не перенес)
3) МАХ глубина в мм — это разница между белам и черным т.е. например белый ноль а черный будет 50мм высотой в детали.
4) выставляем необходимые габариты рисунка
5) режим экспорта 3Д
6) конвертируем.
7) обязателен авто кад. для просмотра получившегося. смотрите, крутите, маштабируете в авто каде. и все станет понятно. сохраняете как DXF
загружаете в VRI-cnc. режим Автокад 3Д

перемешение рисунка в ноль в автокаде:
1) на ноль рисунка принимаем его нижний левый угол
2) в авто каде: пишем "_move" (без ковычек) или иконку крестик из стрелочек.
3) выделяем весь рисунок
4) указываем базовую точку т.е. нижний левый угол рисунка
5) вводим новые координаты 0,0
6) и все

маштабировани рисунка в автокаде:
1) выставте рисунок в ноль (пост №4)
2) _scale (команда, иконка квадратик с пунктирным квадратиком)
3) выделяем весь рисунок и жмем enter
4) указываем базовую точку 0,0 (вручную с клавы)
5) вводим масштаб 2 (увеличить в два раза и т.д.)
6) и все

1) можно рисунок нарисоватьть в CorelDRAW
сохранить как DXF. открыть в AutoCAD и выполнить команду
_explode (иконка маленький динамит). — разбить линии.
одно но: кривые не поддерживаются.
далее открываем уже в VRI-cnc. и все.

2) использование растровой графики BMP, JPG и т.п.
качаем любой конвертор из инета называтся типа: растр в вектор
я например использую MELAN (melanmegaz.narod.ru) — бесплатная
или Acme TraceArt, Algolab PtVector? Img2CAD, RasterVector — мощные но платные.
ели вы например разрабатываете свои рисунки в других програх не выдающих DXF, смело конвертируйте в BMP а далее конвертором в DXF. но не забудте: открыть в AutoCAD и выполнить команду
_explode (иконка маленький динамит). иначе PoliLines моя прога не видит

короче слюбой графический файл из любой программы можно запихнуть в мою прогу VRI-cnc.
с обной оговоркой: программа в которой разработан эскиз, долна поддерживать экспорт в расторый рисунок (bmp, jpg,gif. ) далее ее в конвертор см. ниже.

приведу пример с которым столкнулся Lonbzik. Дано: файл DXF (DWG) который нарисован не линиями а другими приметивами — круги, дуги, полилинии, заливка, кривые и т.п.

Русские Блоги

Формат кодирования файла DXF и вывод в формат DXF с массивом

Ниже приведены очень важные части формата кодировки файла DXF, другие части не важны, вы не можете изменить

[EXTMIN], [EXTMAX] могут быть непосредственно определены как значения x и y минимального и максимального значений в массиве

[12], [22], [40] в [ACTIVE], первые два могут быть непосредственно определены как значения x, y среднего значения массива

Это объясняется ниже. Объяснение [40] не было найдено. Я сделал [40]: Xmax + 5 (Xmax — максимальное значение значения x в массиве), которое может быть успешно отображено

[1] Значение в [HANDSEED] может быть чистым значением, если оно хранится как [POINT], например «232», и если оно хранится как [POLYLINE], кажется, что оно не может быть чистым значением. (Это просто проблема, возникающая при программировании, без проверки, просто напоминание)

[2] Независимо от того, сохранено ли оно как [POINT] или [POLYLINE], каждая точка имеет числовой код, а последние две цифры этого номера от 0 до F, и полная буква F перемещается вперед.

Формат файлов Автокад (dws и dxf)

alt

Ранее были рассмотрены популярные форматы dwt и dwg AutoCAD. Однако есть еще и такие типы файлов AutoCAD, как *.dws и *.dxf.

Первый из них является Стандартом оформления чертежей с расширением (*.dws), второй формат позволяет обмениваться данными чертежей (*.dxf). Рассмотрим каждый из них более подробно.

Формат файлов AutoCAD для создания Стандартов оформления (*.dws)

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

— текстовые и размерные стили;

Затем перейти в «Файл» – «Сохранить как…» и выбрать «Стандарты оформления AutoCAD (*.dws)». Задать имя и указать место сохранения файла. Для одного чертежа можно создавать несколько файлов со стандартами.

Сохранение чертежа AutoCAD в формате dws

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

Связывание файла чертежа с файлом стандартов

Для этого необходимо перейти на вкладку «Управление» → панель «Стандарты оформления» и выбрать команду «Настройка».

Работа со стандартами оформления в AutoCAD

Откроется диалоговое окно (см. рис.), в котором нужно найти сохраненные стандарты Автокад, воспользовавшись кнопкой «плюс».

Настройка стандартов AutoCAD

Дерево папок будет содержать нужные файлы с расширением *.dws. После выбора стандартов в данном чертеже все элементы будут подлежать проверке на соответствие.

Аналогичным образом связь можно разорвать, но использовать нужно кнопку с крестиком.

Стандарты AutoCAD и возможные ошибки

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

Нарушение стандартов AutoCAD

Ошибки могут возникнуть в двух случаях:

1) Если чертеж содержит объекты, которые лежат на слое, не зафиксированном в файлах со стандартами.

2) Объекты находятся на оговоренных в Стандартах слоях, однако имеют свойства, не указанные в файле. Т.е. стандартный слой, например, использует тип линии ISO_штриховая, а созданному объекту присвоен тип Continuous и т.п.

В первом случае программа выдаст ошибку. Необходимо будет переместить все объекты на слои, прописанные в стандартах, а «нестандартный» слой автоматически удалится.

Файлы обмена данными чертежей (*.dxf)

Расширение файлов AutoCAD *.dxf позволяет сохранять чертеж в таком формате, который передает информацию о проекте в двоичном коде, что позволяет переносить данные между разными приложениями.

Неоспоримым преимуществом является скорость работы с файлом. Доступ к нему можно получить даже через текстовый файл для редактирования. Чертеж можно передать в другую программу, которая не поддерживает работу с dwg файлами, но может обработать файл с расширением *.dxf, и тем самым воссоздать чертеж для дальнейшего проектирования.

Расширение файлов AutoCAD *.dxf

Для сохранения чертежа в данном формате нужно перейти в «Файл» – «Сохранить как…» и в типе файла указать расширение *.dxf.

Теперь вы знаете, какие файлы открывает Автокад, а главное, понимаете, для чего предназначен тот или иной формат. Помните, что чертежи AutoCAD можно сохранять в формате *.pdf. Хоть он и не является стандартным, однако удобен для работы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *