Forge Viewer已是耳熟能詳的行業技術,也是很多朋友關注Forge的原因,一些朋友常常把Forge 等同於Forge Viewer。其實Forge作為服務體系,涵蓋了多個類別的服務,Forge Viewer只是其中一個類別,使用CAD資料的某個方式而已。
今天,我們簡要介紹Forge的另外一個類別:雲端自動化設計服務。Forge在雲端提供多個設計軟體引擎:AutoCAD, Revit, Inventor, 3DMax。使用者無需再安裝設計軟體,即能夠在雲端進行資料(或模型)的建立,或是模型資料的修改,或是資料的提取等。您原有的外掛(或指令碼)業務功能仍舊如往常一樣執行。透過它,可以更大自由的操作模型和資料處理,更靈活的系統整合和整合。
其實,早在三年前,Forge就釋出了第一版的AutoCAD雲端自動化設計服務,客戶基於此服務,建立了很多應用,例如自動引數化建立模型,自動出圖,線上圖紙稽核,數字簽章,圖紙資料整合等。而今年1月,Forge正式推出了Revit, Inventor, 3DMax三個重量級設計軟體的自動化服務。藉此,您就可以直接在雲端執行AutoCAD, Revit, Inventor, 3DMax的外掛了!
雲端自動化設計服務原理很簡單,您的app提交任務請求,Forge從您任務設定的資料中下載到原始模型(或模板,或其它輔助資料),進而啟動對應設計軟體的沙箱環境,在此環境中,執行您上載好的外掛或指令碼,當任務成功結束後,Forge將把更新後的模型,或建立的資料傳送到您app指定的雲端儲存。
請參閱我們同事吳忠做的入門講解: https://v.youku.com/v_show/id...
我們團隊還建立了一個嚮導式教程,演示如何一步步的搭建出網路應用。此應用能讓客戶提供原始模型,透過網頁輸入的引數,修改其中某個實體的尺寸,最後提供更新後的模型。此教程是 Learn Forge tutorial - 嚮導式Forge進階教程的一個內容。
http://learnforge.autodesk.io...
嚮導本身已經寫得很詳細,按照步驟操作即可。今天主要提示一下執行這個樣例需要注意的內容,以及執行樣例會是什麼樣的情景。
- 下載教程提供的完整原始碼工程,目前只有NET Core版本。您也可以根據雲端自動化設計服務*的埠規範用其它語言寫伺服器端過程
https://github.com/Autodesk-F... - 開啟工程designautomation.sln,注意需要網路應用forgesample 需要NER Core2.1,外掛需要Framework 4.7 以上的環境
此工程包含AutoCAD, Revit, Inventor, 3DMax的外掛樣例,展示如果要使用雲端自動化設計服務*,外掛的結構應該是什麼樣的。可以解除安裝掉其其它 產品,只保留Revit外掛UpdateRVTParam
- 透過NuGet安裝好兩個引用:DesignAutomationBridge 和 Newtonsoft.Json. 編譯看看有無錯誤。
-
簡單講一下外掛結構:
4.1) Revit外掛需要從IExternalDBApplication繼承,並實現OnStartup等虛擬函式。在雲端引擎環境啟動後,自動導引進入載入可用外掛,執行OnStartup, 在OnStartup委託引擎環境準備就緒的事件。在此事件中,最終執行外掛的自定義的操作。
namespace Autodesk.Forge.Sample.DesignAutomation.Revit { //外掛基本屬性仍和普通本地外掛類似 [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] //Design Automation的外掛必須從 IExternalDBApplication 繼承 public class Commands : IExternalDBApplication { //更新後的匯出檔名 string OUTPUT_FILE = "OutputFile.rvt"; //必須實現的虛擬函式,雲端引擎啟動後,載入此外掛後,會自動匯入到OnStartup,並傳入雲端Revit的Application控制程式碼 public ExternalDBApplicationResult OnStartup(ControlledApplication application) { //在此委託引擎環境準備就緒的事件 DesignAutomationBridge.DesignAutomationReadyEvent += HandleDesignAutomationReadyEvent; return ExternalDBApplicationResult.Succeeded; } //必須實現的虛擬函式, 引擎環境準備就緒, DesignAutomationReadyEventArgs提供原始Revit文件的控制程式碼 private void HandleDesignAutomationReadyEvent(object sender, DesignAutomationReadyEventArgs e) { LogTrace("Design Automation Ready event triggered..."); e.Succeeded = true; //在此開始執行外掛的自定義的操作 EditWindowParametersMethod(e.DesignAutomationData.RevitDoc); } //必須實現的虛擬函式, 當任務結束,引擎開始終止 public ExternalDBApplicationResult OnShutdown(ControlledApplication application) { return ExternalDBApplicationResult.Succeeded; } //......
4.2) 由於本例會根據引數來修改牆體的尺寸,還要提供引數檔案,預設從執行路徑下拿到,在雲端執行的時候也是類似。
private void EditWindowParametersMethod(Document doc) { //如果有額外的引數檔案,Design Automation在任務啟動初期,下載到執行路徑之中,透過相對路徑獲取檔案內容 InputParams inputParameters = JsonConvert.DeserializeObject<InputParams>(File.ReadAllText("params.json")); //外掛的自定義的操作,是修改所有牆的高和寬,和普通外掛的執行類似 using (Transaction trans = new Transaction(doc)) { //.... //.... trans.Commit(); } //將修改後的模型儲存,如果和原始檔案同名,則加上OverwriteExistingFile標記 ModelPath ProjectModelPath = ModelPathUtils.ConvertUserVisiblePathToModelPath(OUTPUT_FILE); SaveAsOptions SAO = new SaveAsOptions(); SAO.OverwriteExistingFile = true; //儲存檔案 LogTrace("Saving file..."); doc.SaveAs(ProjectModelPath, SAO); }
4.3) *.addin 檔案的定義和普通外掛主要不同是型別,必須是 DBApplication。
<?xml version="1.0" encoding="utf-8" standalone="no"?> <RevitAddIns> <AddIn Type="DBApplication"> <Name>Modify Window Parameters</Name> <FullClassName>Autodesk.Forge.Sample.DesignAutomation.Revit.Commands</FullClassName> <Text>Revit for Design Automation</Text> <Description>Revit for Design Automation</Description> <VisibilityMode>AlwaysVisible</VisibilityMode> <Assembly>.\UpdateRVTParam.dll</Assembly> <AddInId>000BD853-36E4-461f-9171-C5ACEDA4E723</AddInId> <VendorId>ADSK</VendorId> <VendorDescription>Autodesk, Inc, www.autodesk.com</VendorDescription> </AddIn> </RevitAddIns>
4.4) 本例中,提供了完整的外掛包結構,包括PackageContents.xml, *.addin 檔案。另外,當工程編譯後,會自動將此外掛包壓縮,並放置到網路應用 forgesample路徑之下,供給forgesample執行的時候之用。
在下一篇文章,我們將講解網路應用forgesample的內容。