- •«Санкт-петербургский государственный университет аэрокосмического приборостроения»
- •Оглавление
- •1. Постановка задачи
- •2. Общая структура файла dxf
- •3. Коды группы
- •4. Раздел заголовок
- •5. Раздел таблицы
- •6. Раздел блоки
- •7. Раздел примитивы
- •8. Определения признаков примитивов
- •Признаки типа блока
- •9. Написание интерфейсных программ dxf
- •12. Аппаратные и программные требования.
- •Требования к программному обеспечению
- •15. Литература
8. Определения признаков примитивов
Элементы графических примитивов, перечисленные выше, используют различные значения флажков ("признаков"). Это целочисленные коды (групп 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 означает, что данный блок имеет атрибуты.
9. Написание интерфейсных программ dxf
Процесс написания программы, которая реализует связь с системой AutoCAD посредством алгоритма обработки информации DXF, часто кажется более трудным делом, чем это есть на самом деле. Файл DXF на первый взгляд просто-таки переполнен различного рода информацией, и при анализе файла DXF вручную может показаться, что задача эта невыполнима. Однако, файл DXF построен таким образом, чтобы его обработка проводилась легко не вручную, а с помощью программы. Формат преднамеренно построен таким образом, что информация, которая вам не нужна, без особого труда может быть опущена, а считывание необходимой информации осуществляется также весьма просто. Просто запомните, что обрабатывать группы можно в любом порядке и можно опустить любую ненужную группу; тогда у вас не будет проблем с этим файлом.
В качестве примера далее следует программа на языке BASIC фирмы "Microsoft", которая осуществляет считывание файла DXF и выбор из рисунка всех примитивов LINE (линии, которые встречаются внутри блоков, опускаются). Эта программа осуществляет вывод на экран конечных точек этих линий. В качестве упражнения вы можете попытаться ввести эту программу в свою вычислительную машину и с ее помощью осуществить обработку какого-либо файла DXF одного из ваших чертежей, а затем расширить возможности программы, предусмотрев вывод координат центра и величины радиуса любых окружностей, которые эта программа обнаруживает. Данная программа предлагается не как пример, дающий возможность отточить технику программирования, и не как иллюстрация способа написания обобщенной программы обработки файла DXF; она представлена в качестве примера того, насколько простой может быть программа, осуществляющая считывание файла DXF.
Написание программы, которая осуществляет построение файла 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" для вывода выработанного чертежа на экран. А затем установить границы вручную.
Команда DXFIN является сравнительно нетребовательной к формату элементов данных. Пока в строке, в которой ожидается появление данных, встречаются элементы с правильно заданным форматом, команда DXFIN , будет их принимать (конечно, строковые элементы не должны иметь ведущих пробелов, за исключением того случая, когда они являются частью строки). Приведенная выше программа использует гибкость при задании входного формата, и не слишком стремится к генерации файла, который будет точно таким же, как если бы его генерация проводилась с помощью системы AutoCAD.
В случае возникновения ошибки при загрузке файла DXF с помощью команды DXFIN, система AutoCAD сообщит о ней, указав тип обнаруженной ошибки и последнюю обработанную до обнаружения ошибки строку файла DXF. Это может быть и не та строка, в которой встретилась ошибка, особенно в случае таких ошибок, как пропуск требуемых групп.
Текст программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ExtDlgs, Menus;
type
TForm1 = class(TForm)
Image1: TImage;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
OpenPictureDialog1: TOpenPictureDialog;
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.N1Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute then Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;
procedure TForm1.N2Click(Sender: TObject);
begin
Close;
end;
end.
Результат выполнения:
Рис.1. Вид DXF файла в системе AutoCad
