Forge Viewer已經是耳熟能詳的行業技術,也是不少朋友關注Forge的緣由,一些朋友經常把Forge 等同於Forge Viewer。其實Forge做爲服務體系,涵蓋了多個類別的服務,Forge Viewer只是其中一個類別,使用CAD數據的某個方式而已。html
今天,咱們簡要介紹Forge的另一個類別:雲端自動化設計服務。Forge在雲端提供多個設計軟件引擎:AutoCAD, Revit, Inventor, 3DMax。用戶無需再安裝設計軟件,即可以在雲端進行數據(或模型)的建立,或是模型數據的修改,或是數據的提取等。您原有的插件(或腳本)業務功能仍舊如往常同樣執行。經過它,能夠更大自由的操做模型和數據處理,更靈活的系統整合和集成。git
其實,早在三年前,Forge就發佈了初版的AutoCAD雲端自動化設計服務,客戶基於此服務,建立了不少應用,例如自動參數化建立模型,自動出圖,在線圖紙審覈,數字簽章,圖紙數據集成等。而今年1月,Forge正式推出了Revit, Inventor, 3DMax三個重量級設計軟件的自動化服務。藉此,您就能夠直接在雲端執行AutoCAD, Revit, Inventor, 3DMax的插件了!github
雲端自動化設計服務原理很簡單,您的app提交任務請求,Forge從您任務設置的數據中下載到原始模型(或模板,或其它輔助數據),進而啓動對應設計軟件的沙箱環境,在此環境中,執行您上載好的插件或腳本,當任務成功結束後,Forge將把更新後的模型,或建立的數據發送到您app指定的雲存儲。json
請參閱咱們同事吳忠作的入門講解: https://v.youku.com/v_show/id...segmentfault
咱們團隊還建立了一個嚮導式教程,演示如何一步步的搭建出網絡應用。此應用能讓客戶提供原始模型,經過網頁輸入的參數,修改其中某個實體的尺寸,最後提供更新後的模型。此教程是 Learn Forge tutorial - 嚮導式Forge進階教程的一個內容。
http://learnforge.autodesk.io...服務器
嚮導自己已經寫得很詳細,按照步驟操做便可。今天主要提示一下執行這個樣例須要注意的內容,以及執行樣例會是什麼樣的情景。網絡
簡單講一下插件結構:app
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) 因爲本例會根據參數來修改牆體的尺寸,還要提供參數文件,默認從執行路徑下拿到,在雲端執行的時候也是相似。spa
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的內容。