Factory Design API
API (アプリケーション プログラミング インタフェース)を使用して Factory Design のレイアウトを操作します。
Factory Design の In-CAD API (アプリケーション プログラミング インタフェース)は、Factory Design レイアウトをプログラム的にアクセスしたり操作できるように設計されています。API は、Inventor Factory と AutoCAD Factory 2018.1 リリース以降で使用できます。
Factory Design API は、他のコンピュータ システム上でファクトリ レイアウトを統合することを可能にします。たとえば、製品アセンブリ ワークフローで人間工学に基づいた解析を行うために使用されるカスタム ツールがあり、ワークステーションまたはコンピュータの位置を調整する場合には、このツールの出力をプログラムで使用することで、Factory Design レイアウト内のアセットの位置に影響を与えることができます。
この API を使用するには、CAD のプロセスで実行されている .NET コードを指定する必要があります。プラグインを作成して、CAD のプロセスでコードを実行します。
Microsoft.NET テクノロジを使用して CAD プラグインを作成するには
「マイ ファースト プラグインのトレーニング」を参照してください。
実行可能な CAD プラグインを準備できたら、Autodesk.Factory.PublicAPI.dll を次の場所で参照できます。
- C:\ProgramData\Autodesk\ApplicationPlugins\FactoryAutoCAD2023.bundle\Contents\x64\ (AutoCAD)
- C:\ProgramData\Autodesk\ApplicationPlugins\FactoryInventor2023.bundle\Contents\ (Inventor)
- Factory Design API を呼び出すには、Autodesk.Factory.PublicAPI.dll を参照します。
Factory Design In-CAD API は、Inventor と AutoCAD の両方で同じインタフェースを表示し、一度に 1 つのレイアウトに対して動作します(サブレイアウト操作なし)。すべての API メソッドは、実行されるレイアウト ドキュメントを表すレイアウト パラメータを受け入れます。Inventor では、これは AssemblyDocument であり、AutoCAD では、Autodesk.AutoCAD.DatabaseServices.Database です。
API には、次のメソッドがあります。
4 つがメソッドはアセット インスタンス オブジェクトで動作します。
アセットの AssetID を取得するには、family.xml でファミリ ID を参照します。
アセット インスタンスが次の Factory Design データを提供します。
- インスタンス ID
- パラメータ名
- パラメータ値(センチメートル単位の値を返して更新)
- インスタンスを作成するために使用されるアセットの ID
- アセット インスタンスが存在する画層の名前
- ドキュメント内のアセットのインスタンスである、ネイティブ CAD オブジェクトにアクセスするには: Inventor の場合は ComponentOccurence、AutoCAD の場合は BlockReference です。
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 });
2 つがメソッドはファクトリの床オブジェクトで動作します。
床オブジェクトは、次の 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”);
4 つのメソッドが画層オブジェクトで動作します。
画層は、次の Factory Design データを提供します。
- 画層の名前
- 画層の色
- 画層の内容を表示または非表示するかどうかを示すブール値
- 色を Inventor の 3D アセットに適用させるかどうか
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 });