API per Factory Design
È possibile manipolare i layout di Factory Design tramite l'API (Application Programming Interface).
L'API (Application Programming Interface) in CAD per Factory Design è progettata per consentire l'accesso a livello di programmazione ai layout di Factory Design e la loro manipolazione. L'API è disponibile in Inventor Factory e nella release 2018.1 di AutoCAD Factory o versioni successive.
L'API per Factory Design consente di integrare i layout di Factory con altri sistemi di computer. Ad esempio, se si dispone di uno strumento personalizzato utilizzato per analizzare l'ergonomia di un flusso di lavoro degli assiemi dei prodotti e regolare di conseguenza la stazione di lavoro o le posizioni dei computer, l'output di questo strumento può essere utilizzato per determinare, a livello di programmazione, la posizione degli asset in un layout di Factory Design.
Per utilizzare l'API, è necessario disporre di codice .NET in esecuzione nel processo CAD. Per eseguire il codice nel processo CAD, creare un plug-in.
Come creare plug-in CAD utilizzando la tecnologia Microsoft.NET
Consultare Esercitazione My First Plug-in.
Una volta creato un plug-in CAD funzionante, è possibile fare riferimento alla Autodesk.Factory.PublicAPI.dll posizionata in:
- C:\ProgramData\Autodesk\ApplicationPlugins\FactoryAutoCAD2023.bundle\Contents\x64\ (AutoCAD)
- C:\ProgramData\Autodesk\ApplicationPlugins\FactoryInventor2023.bundle\Contents\ (Inventor)
- Fare riferimento alla Autodesk.Factory.PublicAPI.dll per richiamare l'API per Factory Design.
Importante Non installare la DLL con il plug-in CAD.
L'API in CAD per Factory Design presenta la stessa interfaccia sia in Inventor che in AutoCAD e agisce su un layout alla volta (nessuna manipolazione di layout secondari). Tutti i metodi basati sull'API accettano il parametro del layout che rappresenta il documento di layout su cui si sta lavorando. In Inventor, questo documento è un AssemblyDocument, mentre in AutoCAD è un Autodesk.AutoCAD.DatabaseServices.Database.
L'API fornisce i seguenti metodi:
Quattro metodi agiscono su oggetti istanza di asset:
Per ottenere l'ID asset di un asset, fare riferimento all'ID famiglia nel file family.xml.
Un'istanza di asset fornisce i seguenti dati di Factory Design.
- ID istanza
- Nomi dei parametri
- Valori dei parametri (il valore viene restituito e aggiornato in centimetri)
- ID dell'asset utilizzato per creare le istanze
- Nome del layer sul quale risiede l'istanza di asset
- Accesso all'oggetto CAD nativo che rappresenta l'istanza di asset nel documento ComponentOccurence in Inventor e BlockReference in AutoCAD
AddAssetInstances
Utilizzare questa API per aggiungere nuove istanze di asset in un layout. Ogni istanza deve specificare la posizione in cui viene inserita e la libreria di asset utilizzata per creare l'istanza. Se desiderato, è possibile specificare i valori dei parametri da utilizzare per creare l'istanza. Se i parametri non sono specificati, vengono utilizzati i valori di default della libreria.
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
Questa API si utilizza per modificare la posizione dell'istanza, i parametri e le proprietà.
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 });
Due metodi funzionano sull'oggetto pavimento della fabbrica:
L'oggetto pavimento fornisce i seguenti dati di Factory Design.
- La posizione del centro del pavimento
- La quota X massima (centimetri)
- La quota X minima (centimetri)
- La quota Y massima (centimetri)
- La quota Y minima (centimetri)
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”);
Quattro metodi funzionano sugli oggetti del layer:
Un layer fornisce i seguenti dati di Factory Design:
- Nome del layer
- Colore del layer
- Un valore booleano che indica se il contenuto del layer è visibile o meno
- Se il colore deve essere applicato o meno agli asset 3D in 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 });