Поделиться

API Factory Design

Компоновки Factory Design можно изменять с помощью API (интерфейса прикладного программирования).

Встроенный в САПР API (интерфейс прикладного программирования) Factory Design обеспечивает программный доступ к компоновкам Factory Design и возможность совершения операций с ними. Интерфейс API доступен в Inventor Factory и AutoCAD Factory, начиная с версии 2018.1.

API Factory Design позволяет интегрировать компоновки Factory с другими компьютерными системами. Например, если имеется пользовательский инструмент, который используется для анализа эргономики процесса сборки продукта и соответствующей настройки папок на рабочей станции или компьютере, вывод данного инструмента можно применять для программного изменения расположения компонентов в компоновке Factory Design.

Для использования этого API в процессе САПР должен выполняться код .NET. Чтобы код выполнялся в процессе САПР, создайте подключаемый модуль.

Создание подключаемых модулей САПР с помощью технологии Microsoft.NET

  1. См. учебное пособие My First Plug-In.

  2. Если имеется рабочий подключаемый модуль САПР, можно ссылаться на файл Autodesk.Factory.PublicAPI.dll в следующих папках:

  • C:\ProgramData\Autodesk\ApplicationPlugins\FactoryAutoCAD2023.bundle\Contents\x64\ (AutoCAD)
  • C:\ProgramData\Autodesk\ApplicationPlugins\FactoryInventor2023.bundle\Contents\ (Inventor)
  1. Создайте ссылку на файл Autodesk.Factory.PublicAPI.dll для вызова API Factory Design.

Важно. Не развертывайте библиотеку DLL с подключаемым модулем САПР.

Встроенный в САПР API Factory Design предоставляет одинаковый интерфейс в Inventor и AutoCAD, при этом работа осуществляется на одной компоновке в конкретный момент времени (без операций с вложенными компоновками). Все методы API принимают параметр компоновки, представляющий собой документ компоновки, с которым выполняются операции. В Inventor это AssemblyDocument, а в AutoCAD — Autodesk.AutoCAD.DatabaseServices.Database.

Интерфейс API обеспечивает следующие методы:

Четыре метода функционируют с объектами экземпляра компонента:

Чтобы получить значение AssetID компонента, создайте ссылку на идентификатор Family ID в файле family.xml.

Экземпляр компонента предоставляет следующие данные Factory Design.

  • Идентификатор экземпляра
  • Имена параметров
  • Значения параметров (возвращенные значения и обновления значений в сантиметрах)
  • Идентификатор компонента, используемого для создания экземпляров
  • Имя слоя, на котором находится экземпляр компонента
  • Обратитесь к собственному объекту САПР, который представляет собой экземпляр компонента в документе: ComponentOccurence в Inventor и BlockReference в AutoCAD.

AddAssetInstances

Используйте этот API для добавления новых экземпляров компонентов в компоновку. Каждый экземпляр должен указывать место, где будет размещен экземпляр, и компонент библиотеки, который будет использоваться для создания экземпляра. При необходимости, вызывающий объект может задавать значения параметров, которые следует использовать для создания экземпляра. Если параметры не заданы, применяются значения по умолчанию из библиотеки.

using APIv2 = Autodesk.Factory.PublicAPI.Objects.v2;
var api = Autodesk.Factory.PublicAPI.API.Instance;
APIv2.AssetInstance newInst1 = new APIv2.AssetInstance()
{
    AssetID = "41c84844-7b28-4903-bebd-365ca3a6a53c", //Straight Belt Conveyor
    Position = new System.Windows.Media.Media3D.Matrix3D() { OffsetX = 0, OffsetY = 0, OffsetZ = 0 },
};
var insts = api.AddAssetInstances(layout, new PublicAPI.Currency.v2.IAssetInstance[] { newInst1 });
System.Windows.MessageBox.Show(insts.Length.ToString(), "Added instances");

GetAssetInstances

var insts = api.GetAssetInstances(layout);
System.Windows.MessageBox.Show(insts.Length.ToString(), "Get - COUNT");

UpdateAssetInstances

Этот API используется для изменения положения экземпляра, его параметров и свойств.

var insts = api.GetAssetInstances(layout);
foreach (var item in insts)
{
    var position = item.Position;
    position.OffsetX += 200;
    item.Position = position;
    item.Parameters["Length"] = "400";
}
insts = api.UpdateAssetInstances(layout, insts);
System.Windows.MessageBox.Show("update position done");

DeleteAssetInstances

api.DeleteAssetInstances(layout, new PublicAPI.Currency.v2.IAssetInstance[] { instToDelete });

Два метода функционируют с объектами перекрытия Factory:

Объект перекрытия предоставляет следующие данные Factory Design.

  • Центральное положение перекрытия
  • Максимальный размер по оси X (см)
  • Минимальный размер по оси X (см)
  • Максимальный размер по оси Y (см)
  • Минимальный размер по оси Y (см)

GetFloor

var floor = api.GetFloor(layout);
System.Windows.MessageBox.Show(floor.XPlus.ToString(), “+X Dimension”);

UpdateFloor

var floor = api.GetFloor(layout);
floor.XPlus = 1000;
floor.XMins = -1000;
api.UpdateFloor(layout, floor);
System.Windows.MessageBox.Show(“Updated floor X dimensions”);

Четыре метода функционируют с объектами слоя:

Слой предоставляет следующие данные Factory Design.

  • Имя слоя
  • Цвет слоя
  • Логическое выражение, указывающее на то, отображается ли содержимое слоя или нет
  • Следует ли применять цвет для 3D-компонентов в Inventor

GetLayers

var layers = api.GetLayers(layout);
System.Windows.MessageBox.Show(layers.Length.ToString(), Get  COUNT”);

AddLayers

using APIv2 = Autodesk.Factory.PublicAPI.Objects.v2;
APIv2.Layer newLayer = new new APIv2.Layer()
{
    Name = Green Layer”,
    Color = new APIv2.LayerColor(0, 255, 0),
    LayerOn = true,
    ApplyColorTo3FDAssets = true
};
var layers = api.AddLayers(layout, new PublicAPI.Currency.v2.ILayer[] { newLayer });
System.Windows.MessageBox.Show(layers.Length.ToString(), Added layers”);

UpdateLayers
using APIv2 = Autodesk.Factory.PublicAPI.Objects.v2;
var layers = api.GetLayers(layout);
foreach (var layer in layers)
{
    layer.Color = new APIv2.LayerColor(255, 255, 0);
    layer.ApplyColorTo3DAssets = true;
}
api.UpdateLayers(layout, layers);
System.Windows.MessageBox.Show(“Updated all layers to yellow”);

UpdateLayers

using APIv2 = Autodesk.Factory.PublicAPI.Objects.v2;
var layers = api.GetLayers(layout);
foreach (var layer in layers)
{
    layer.Color = new APIv2.LayerColor(255, 255, 0);
    layer.ApplyColorTo3DAssets = true;
}
api.UpdateLayers(layout, layers);
System.Windows.MessageBox.Show(“Updated all layers to yellow”);

DeleteLayers

api.DeleteLayers(layout, new PublicAPI.Currency.v2.ILayer[] { layerToDelete });

Была ли эта информация полезной?