Лекции и лабораторные работы по AutoCAD'у

         

Дополнительная информация


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

В том случае, когда расширенные данные присоединены к примитиву, то в базе чертежа они следуют за обычными данными. Для расширенных данных отведено пространство (нужно вспомнить DXF-коды) начиная с 1000 по 1071.

Строковые константы

1000. Строковые константы в расширенных данных могут быть длиной не более 255 знаков (256-й знак зарезервирован под символ с кодом 0).

Имя приложения

1001 (тоже строковая константа). Используется только для указания имени приложения, длиной не более 31 знака (если код 1001 попадает внутрь списка, организуемого с помощью DXF-кодов 1002, то он интерпретируется как обычная строковая константа, а не имя приложения). Имя приложения должно состоять только из латинских букв, цифр и символов $, -, _.

Название слоя

1003. Название слоя, с которым связываются расширенные данные.

Метка в базе чертежа

1005. Метка объекта в базе чертежа

3D точка

1010. Три вещественных числа, обозначающие координату точки в 3-х мерном пространстве.

Вещественное число

1040. Вещественное число.

Короткое целое число

1070. 16-битовое целое число (со знаком или без знака).



Длинное целое число

1071. 32-битовое целое число. Если присвоить значение в группе 1071 как короткое целое число или вещественное число, то оно будет преобразовано в длинное целое число. Если присвоит, например строковую константу, то оно преобразуется в 32-битный нуль (0L).

ObjectARX всегда трактует группы 1071 как длинные целые.


Существуют и другие группы специальных расширенных данных:
Управляющая строка
1002. Расширенными данными можно управлять используя скобки "{" и "}". С помощью группы 1002 можно формировать в расширенных данных списковые структуры. Они должны начинаться открывающей скобкой с кодом 1002, затем должны идти данные, включаемые в список, а закрывающая скобка с кодом 1002 завершает оформление списка.
Двоичные данные
1004. Двоичные данные длиной не более 127 байтов. Обрабатываются только в ObjectARX.
3-х мерная точка положения в МСК
1011. Трехмерная точка интерпретируется как положение в МСК. Такая точка перемещается, масштабируется, поворачивается, и симметрируется одновременно с родительским примитивом рисунка.
3-х мерная точка перемещения
1012. Такая точка не перемещается, не масштабируется и не растягивается одновременно с родительским примитивом, но участвует вместе с ним в операциях масштабирования, поворота и симметрирования.
3-х мерная точка направления
1013. Трехмерная точка интерпретируется как направление в МСК. Учувствует в операциях поворота и симметрирования. Вектор с координатами, взятыми из группы с кодом 1013, является нормализованным, т.е. единичной длинны.
Расстояние
1041. Вещественное число, интерпретируемое как расстояние. Оно масштабируется одновременно с родительским примитивом.
Коэффициент масштаба
1042. Вещественное число, интерпретируемое как коэффициент масштаба. Масштабируется одновременно с родительским примитивом.
Пример использования расширенных данных на Object Pascal (Delphi).
function AcPoint(x, y, z: double) : OleVariant;
begin
   Result := VarArrayCreate([0, 2], varDouble);
   Result[0] := x; Result[1] := y; Result[2] := z;
end;
procedure CadDev_XDataExample;
const
   appid = 'MYAPPID';
var
   AcadApplication, Objects, vaPoint, vaType, vaData: OleVariant;
   i : integer;
begin
   
   // Получаем ссылку на откытый AutoCAD


2004 или запускаем новый
   AcadApplication := GetActiveOleObject('AutoCAD.Application.16');
   // Получаем множество выбранных объектов
   Objects := AcadApplication.ActiveDocument.SelectionSets.Add('XDATAEXAMPLE');
   Objects.SelectOnScreen;
   // Регестрируем приложение
   AcadApplication.ActiveDocument.RegisteredApplications.Add(appid);
   // Создаем гркппы кодов и массивы данных
   vaType := VarArrayCreate([0, 4], varSmallInt);
   vaData := VarArrayCreate([0, 4], varVariant);
   // Создаем вариантый массив 3D точки
   vaPoint := AcPoint(4.0, 6.0, 0.0);
   // Заполняем массив
   vaType[0] := 1001; // Название приложения должно быть вначале
   vaData[0] := appid;
   vaType[1] := 1070; // Целочисленное
   vaData[1] := 99;
   vaType[2] := 1040; // Вещественное
   vaData[2] := 2.5;
   vaType[3] := 1000; // Строка
   vaData[3] := 'Здавствуй яблочко!';
   vaType[4] := 1010; // 3D точка
   vaData[4] := vaPoint;
   // К каждому объекту в выбранных объктах
   // присоеденим расширенные данные XData
   For i := 0 to Objects.Count - 1 do
      Objects.Item(i).SetXData(vaType, vaData);
   Objects.Delete;
end;

Содержание раздела