API do Factory Design
Manipule os layouts do Factory Design usando a interface de programação de aplicativo (API, Application Programming Interface).
A Interface de programação de aplicativo (API - Application Programming Interface) em CAD do Factory Design foi criada para permitir o acesso programático aos layouts do Factory Design e a manipulação desses layouts. A API está disponível no Inventor Factory e no AutoCAD Factory 2018.1 ou em versões posteriores.
A API do Factory Design permite que você integre seus layouts de fábrica a outros sistemas de computador. Por exemplo, se você tem uma ferramenta personalizada que é usada para analisar a ergonomia do fluxo de trabalho de montagem de um produto e ajusta a localização de máquinas ou estações de trabalho de acordo, a saída dessa ferramenta pode ser usada para afetar de forma programática a localização de recursos no layout do Factory Design.
Se você quiser usar essa API, o código .NET deverá ser executado no processo de CAD. Para executar o código no processo de CAD, crie um plug-in.
Para criar plug-ins de CAD usando tecnologia Microsoft.NET
Consulte Meu primeiro treinamento de plug-in.
Quando o plug-in de CAD estiver funcionando, você poderá fazer referência ao Autodesk.Factory.PublicAPI.dll localizado em:
- C:\ProgramData\Autodesk\ApplicationPlugins\FactoryAutoCAD2023.bundle\Contents\x64\ (AutoCAD)
- C:\ProgramData\Autodesk\ApplicationPlugins\FactoryInventor2023.bundle\Contents\ (Inventor)
- Faça referência ao Autodesk.Factory.PublicAPI.dll para chamar a API do Factory Design.
A API em CAD do Factory Design expõe a mesma interface no Inventor e no AutoCAD e opera em um layout de cada vez (sem manipulação de sublayout). Todos os métodos de API aceitam o parâmetro de layout, que representa o documento de layout no qual você está trabalhando. No Inventor, esse documento é um AssemblyDocument, e no AutoCAD, um Autodesk.AutoCAD.DatabaseServices.Database.
A API oferece os seguintes métodos:
Quatro métodos operam em objetos de instância de recurso:
Para obter o AssetID de um recurso, consulte a ID da família em family.xml.
Uma instância de recurso fornece os seguintes dados do Factory Design.
- ID da instância
- Nomes de parâmetro
- Valores de parâmetro (retornos e atualizações de valores em centímetros)
- ID do recurso usado para construir as instâncias
- Nome da camada em que a instância do recurso está localizada
- Acesso ao objeto de CAD nativo que representa a instância de recurso no documento: ComponentOccurence no Inventor e BlockReference no AutoCAD
AddAssetInstances
Use esta API para adicionar novas instâncias de recurso a um layout. Cada instância deve especificar a posição em que será inserida e o recurso de biblioteca que será usado para construí-la. Opcionalmente, o chamador pode especificar os valores de parâmetro que serão usados para construir a instância. Se nenhum parâmetro for especificado, serão usados os valores padrão da biblioteca.
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
Esta API é usada para alterar a posição, os parâmetros e as propriedades da instância.
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 });
Dois métodos operam no objeto de piso de fábrica:
O objeto de piso fornece os seguintes dados do Factory Design:
- A posição central do piso
- A cota X máxima (centímetros)
- A cota X mínima (centímetros)
- A cota Y máxima (centímetros)
- A cota Y mínima (centímetros)
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”);
Quatro métodos operam em objetos de camada:
Uma camada fornece os seguintes dados do Factory Design:
- O nome da camada
- A cor da camada
- Um valor booleano que indica se o conteúdo da camada é ou não visível
- Se a cor deve ou não ser aplicada a recursos 3D do 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 });