Программирование 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
Поле 0 Application Name = AVCMaterial
Поле 1 Тип Integer32 = 1071, Value: Назначение материала MatUseLike
Поле 2 Тип Real = 1040, Значение: Плотность
Поле 3 Тип Real = 1040, Значение: Длина листа/хлыста
Поле 4 Тип Real = 1040, Значение: Ширина
Поле 5 Тип Real = 1040, Значение: Толщина
Поле 6 Тип AsciiString = 1000, Значение: Индекс (буква для выносок, для кратного обозначения кромок)
Поле 7 Тип AsciiString = 1000, Значение: Артикул
Поле 8 Тип Real = 1040, Значение: Цена за единицу
Поле 9 Тип Integer32 = 1071, Значение: Флаги настроек материала MaterialEnum
Поле 10 Тип AsciiString = 1000, Значение: Название фрезы по этому материалу для станка ЧПУ
Поле 11 Тип AsciiString = 1000, Значение: Режим фрезерования
Поле 12 Тип AsciiString = 1000, Значение: Название пильного диска для ЧПУ
Поле 13 Тип AsciiString = 1000, Значение: Режим пилы
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: номер раздела (листа) разделенной таблицы