Программирование xData

Если вы разрабатываете свои плагины или пишите скрипты на LISP, то вы можете прочитать все данные которые сохраняются в чертеже, отображаются плагином Палитра Свойств A>V>C> и приписываемые к объектам Автокада, другими моими плагинами. Все эти данные хранятся в xData, так называемых Расширенных данных, солидов, таблиц и других объектов.

Исходные коды на C# вы сможете найти в папке плагинов в файле xData_Source.7z или в GitHub

xData AVCNames

Описывает дополнительные свойства солида. Можно изменять.

• Поле 0, Имя приложения = AVCNames

• Поле 1, Тип AsciiString = 1000, Значение: Имя. Используется подстановкой %name%

• Поле 2, Тип Integer32 = 1071, Значение: Флаги. Используется подстановками %sweep%, %mirror% и %texture%

• Поле 3, Тип AsciiString = 1000, Значение: Тип, вид, сорт. %kind% 

• Поле 4, Тип AsciiString = 1000, Значение: Многострочное описание. %info%


Используемые битовые флаги:

[Flags] enum

SolidFlags

  {

    None = 0,

    /// <summary>

    /// Для солидов - обмерять как развертку

    /// </summary>

    Sweep = 1,

    /// <summary>

    /// Для подсчета количества одинаковых деталей - считать отдельно как зеркальные

    /// </summary>

    Mirror = 2,

    /// <summary>

    /// Для солидов - имеет направление волокон, текстуру

    /// </summary>

    Textured = 8,

    /// <summary>

    /// Для солидов - текстура поперек, по короткой стороне

    /// </summary>

    Across = 16 

  }


xData AVCMetric

Описывает метрику солида. Только для чтения.

• Поле 0, Имя приложения = AVCMetric

• Поле 1, Тип ExtendedDataInteger32 = 1071, Значение: Число изменений солида на момент записи метрики – если не совпадает с Solid3d.NumChanges – значит метрика устарела.

• Поле 2, Тип Real = 1040, Значение: Длина,  В используется подстановкой %length% 

• Поле 3, Тип Real = 1040, Значение: Ширина, %width% 

• Поле 4, Тип Real = 1040, Значение: Толщина, %thickness%

• Поле 5, Тип Real = 1040, Значение: Объем, %volume%

• Поле 6, Тип Real = 1040, Значение: Асимметрия, %assym%

• Поле 7, Тип AsciiString= 1000, Значение: Вектор асимметрии (3 символа или пустая строка), %asymv%

• Поле 8, Тип AsciiString= 1000, Значение: Технология, %tech%

• Поле 9, Тип Integer32 = 1071, Значение: Флаги SolidMetricEnum - блокировка обмера и данные для выбора технологии изготовления

• Поле 10 Тип Real = 1040, Значение: Площадь, %area%

• Поле 11 Тип Real = 1040, Значение: Периметр, %perimeter%

• Поле 12 Тип Integer32 = 1071, Значение: Количество граней, %facecount%

Поле 13 Тип Real = 1040, Значение: Вес = %weight%

Поле 14 Тип Real = 1040, Значение: Цена = %cost%

• Поле 15 Тип BinaryChunk = 1004, Значение: Матрица выкладки (12 чисел типа double, первые 3 строки матрицы трансформации)


Используемые битовые флаги:

 [Flags] internal enum

 SolidMetricEnum

  {

    /// <summary>

    /// Деталь требует обработки с фасадной стороны (при выкладке фасадом вниз - это сверления снизу, фрезеровка снизу). 

    /// Без учета наклона торцев и 3d-поверхностей.

    /// </summary>

    FrontProcessing = 1 << 0,

    /// <summary>

    /// Деталь требует обработки с задней стороны (при выкладке фасадом вниз - это сверления сверху, фрезеровка сверху). 

    /// Без учета наклона торцев и 3d-поверхностей.

    /// </summary>

    RearProcessing = 1 << 1,

    /// <summary>

    /// Заблокирована запись метрики в XDataMetric при автоматическом обмере. 

    /// То есть обмер будет сделан, но результаты в XDataMetric записаны не будут

    /// </summary>

    Blocked = 1 << 2,

    /// <summary>

    /// Объем точно совпадает с объемом габаритного бокса

    /// </summary>

    IsBox = 1 << 3,

    /// <summary>

    /// не все поверхности плоские

    /// </summary>

    HasNotFlatFaces = 1 << 4,

    /// <summary>

    /// есть внутренние контуры

    /// </summary>

    HasHoles = 1 << 5,

    /// <summary>

    /// имеет поверхности более сложные чем может сделать 2D ЧПУ 

    /// </summary>

    Has3dFaces = 1 << 6,

    /// <summary>

    /// главная плоскость - это прямоугольник

    /// </summary>

    FrontIsRectangle = 1 << 7,

    /// <summary>

    /// есть поверхности с материалом отличным от материала солида (покрытие)

    /// </summary>

    HasCoveredFaces = 1 << 8,

    /// <summary>

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

    /// </summary>

    HasPriorFace = 1 << 9,

    TwoSideProcessing = FrontProcessing | RearProcessing

  }

xData AVCMaterial

Свойства материала


enum 

MatUseLike

  {

    Unknown = 0, // совместимость со старыми версиями

    /// <summary>

    /// Неизвестно. Учитываем как массив

    /// </summary>

    Volume = 0,

    /// <summary>

    /// Листовой

    /// </summary>

    Sheet = 1,

    /// <summary>

    /// Прокат, погонаж, прут

    /// </summary>

    Rod = 2,

    /// <summary>

    /// Покрытие

    /// </summary>

    Cover = 3,

    /// <summary>

    /// Кромка

    /// </summary>

    Banding = 4,

    Varies = 5

  }


[Flags] enum 

MaterialEnum

  {

    Grain = 1, // у материала есть текстура вдоль длинной стороны листа

  }


xData AVCTbSplit

Описывает часть разделенной таблицы

• Поле 0 Application Name = AVCTbSplit

• Поле 1 Тип AsciiString = 1000, Value: GUID разделенной таблицы в виде текстовой строки

• Поле 2 Тип Integer32 = 1071, Value: номер раздела (листа) разделенной таблицы