Factory Design API
透過 API (應用程式開發介面) 操控您的 Factory Design 配置。
Factory Design 的 CAD API (應用程式設計介面) 旨在讓您對 Factory Design 配置進行程式化存取與操控。該 API 在 Inventor Factory 和 AutoCAD Factory 2018.1 版本或更高版本中可用。
Factory Design API 可讓您將 Factory 配置與其他電腦系統整合。例如,如果您使用一個自訂工具來分析產品組合工作流程的人體工學,並相應地調整工作站或機器位置,則可使用此工具的輸出以程式化方式影響資產在 Factory Design 配置中的位置。
若要使用此 API,您必須在 CAD 程序中執行 .NET 程式碼。若要在 CAD 程序中執行該程式碼,請建立一個外掛程式。
使用 Microsoft. NET 技術建立 CAD 外掛程式的步驟
請參閱〈My First Plug-in Training〉(我的第一個外掛程式訓練)。
擁有有效 CAD 外掛程式後,您可以參考以下位置的 Autodesk.Factory.PublicAPI.dll:
- C:\Program Files\Autodesk\ApplicationPlugins\FactApplication_R22.0.bundle\Contents\x64\ (AutoCAD)
- C:\Program Files\Autodesk\Inventor 2018\Bin\InventorFactory\ (Inventor)
- 參考 Autodesk.Factory.PublicAPI.dll 呼叫 Factory Design API。
重要提示:請勿使用您的 CAD 外掛程式部署該 DLL。
Factory Design 的 CAD API 在 Inventor 和 AutoCAD 中顯示相同的介面,並且一次處理一個配置 (不操控子配置)。所有 API 方法均接受配置參數 (表示目前處理的配置文件)。在 Inventor 中,此為 AssemblyDocument;在 AutoCAD 中,此為 Autodesk.AutoCAD.DatabaseServices.Database。
API 提供以下方法:
四種方法可處理資產例證物件:
若要取得資產的 AssetID,請參閱 family.xml 中的「Family 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 });
兩種方法可處理 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 資料:
- 圖層名稱
- 圖層顏色
- 指出圖層內容是否可見的布林值
- 是否應將顏色套用至 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 });