分享

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 外掛程式的步驟

  1. 請參閱〈My First Plug-in Training〉(我的第一個外掛程式訓練)。

  2. 擁有有效 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)
  1. 參考 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 });

此資訊有幫助嗎?