Interfejs API programu Factory Design
Można manipulować układami programu Factory Design za pośrednictwem interfejsu programowania aplikacji (API).
W programie Factory Design interfejs programowania aplikacji (API) CAD został tak zaprojektowany, aby umożliwić programowy dostęp do układów programu Factory Design i manipulowania nimi. Interfejs API jest dostępny w programie Inventor Factory i AutoCAD Factory w wersji 2018.1 lub nowszej.
Interfejs API programu Factory Design umożliwia integrację układów Factory z innymi systemami komputerowymi. Przykładowo, jeśli używane jest niestandardowe narzędzie, które służy do analizy ergonomii procesów roboczych zespołu produktu i odpowiedniego dostosowania położenia stacji roboczej lub maszyny, dane wyjściowe tego narzędzia mogą posłużyć do programowego określania położenia zasobów w układzie programu Factory Design.
Aby używać tego interfejsu API, w procesie CAD musi być uruchomiony kod .NET. Aby uruchomić kod w procesie CAD, utwórz wtyczkę.
Tworzenie wtyczek CAD za pomocą technologii Microsoft.NET
Zobacz stronę Moja pierwsza wtyczka — szkolenie.
Mając działającą wtyczkę CAD, można utworzyć odwołanie do pliku Autodesk.Factory.PublicAPI.dll znajdującego się w katalogach:
- C:\ProgramData\Autodesk\ApplicationPlugins\FactoryAutoCAD2023.bundle\Contents\x64\ (AutoCAD)
- C:\ProgramData\Autodesk\ApplicationPlugins\FactoryInventor2023.bundle\Contents\ (Inventor)
- Odwołaj się do pliku Autodesk.Factory.PublicAPI.dll, aby wywołać interfejs API programu Factory Design.
Interfejs API programu Factory Design w aplikacji CAD udostępnia ten sam interfejs w programach Inventor i AutoCAD oraz działa oddzielnie na każdym układzie (brak manipulacji układami podrzędnymi). Wszystkie metody interfejsu API akceptują parametr układu, który reprezentuje właśnie przetwarzany dokument układu. W programie Inventor jest to AssemblyDocument, a w programie AutoCAD jest to Autodesk.AutoCAD.DatabaseServices.Database.
Interfejs API zapewnia następujące metody:
Cztery metody działają na obiektach wystąpienia zasobu:
Aby uzyskać właściwość AssetID zasobu, zobacz sekcję Family ID w pliku family.xml.
Wystąpienie zasobu udostępnia następujące dane programu Factory Design.
- Identyfikator wystąpienia
- Nazwy parametrów
- Wartości parametrów (wartość jest zwracana i aktualizowana w centymetrach)
- Identyfikator zasobu użytego do utworzenia wystąpień
- Nazwa warstwy, na której znajduje się wystąpienie zasobu
- Dostęp do natywnego obiektu CAD, który reprezentuje wystąpienie zasobu w dokumencie: ComponentOccurence w programie Inventor i BlockReference w programie AutoCAD
AddAssetInstances
Ten interfejs API umożliwia dodanie nowych wystąpień zasobu do układu. Każde wystąpienie musi określać położenie, w którym zostanie wstawione, i zasób z biblioteki, który zostanie użyty do utworzenia wystąpienia. Opcjonalnie funkcja wywołująca może określić wartości parametrów, które zostaną użyte do utworzenia wystąpienia. Jeśli parametry nie zostaną określone, zostaną użyte domyślne wartości z biblioteki.
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
Ten interfejs API służy do zmiany położenia, parametrów i właściwości wystąpienia.
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 });
Dwie metody działają na obiekcie podłogi Factory:
Obiekt podłogi udostępnia następujące dane programu Factory Design.
- Położenie środka podłogi
- Maksymalny wymiar X (w centymetrach)
- Minimalny wymiar X (w centymetrach)
- Maksymalny wymiar Y (w centymetrach)
- Minimalny wymiar Y (w centymetrach)
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”);
Cztery metody działają na obiektach warstwy:
Warstwa udostępnia następujące dane programu Factory Design:
- Nazwa warstwy
- Kolor warstwy
- Wartość logiczna z informacją, czy zawartość tej warstwy jest widoczna czy nie
- Określa, czy kolor ma być stosowany do zasobów 3D w programie 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 });