Forge の学習サイト、Learn Autodesk Forge には、Design Automation API の各コアエンジン(AutoCAD、Revit、Inventor、3ds Max)を説明する Modify your models があります。手順に沿って実装していくことが出来ますが、GitHub リポジトリにも、ほぼ同じサンプルが記載されています。learn.forge.designautomation サンプルです。ここでは、このサンプルをローカル Node.js 開発環境にクローンし、セットアップ、テストしていく手順をご案内します。
リポジトリの内容をローカルでテストするには、事前に Git for Windows や Node.js をセットアップしておく必要があります。また、実行時には Forge で利用する Client ID と Client Secret(Consumer Key と Consumer Secret)を事前に Forge ポータル から取得しておく必要があります。これらの手順は、それぞれ、次のブログ記事でご案内しています。
Client ID と Client Secret の取得時には、作成するアプリに Design Automation API と Data Management API を指定するようにしてください。
- Web ブラウザで GitHub 上の learn.forge.designautomation リポジトリ ページを開きます。
- 画面右側の [Clone or download] ボタンをクリックして、表示される URL https://github.com/Autodesk-Forge/learn.forge.designautomation.git をクリップボードにコピーしておきます。
- GitHub 上のプロジェクトを 、リポジトリから開発に使用するローカル コンピュータにコピーします。コマンド プロンプトを起動して、リポジトリ内容をコピーしたいフォルダ(ディレクトリ)に CD コマンドで移動し、git clone -b nodejs https://github.com/Autodesk-Forge/learn.forge.designautomation.git(クリップボード内の URL)と入力します。例えば、C:\repo フォルダに移動して git clone -b nodejs https://github.com/Autodesk-Forge/learn.forge.designautomation.git を実行すると、C:\repo フォルダ下に learn.forge.designautomation フォルダが作成され、GitHub リポジトリからプロジェクト一式がコピーされます。
- クローン(コピー)されたプロジェクトに Node.js の実行で必要となるパッケージ(ミドルウェア)をインストールします。CD コマンドで現在のフォルダを learn.forge.designautomation フォルダへ移動してから、npm install と入力します。
- この Design Automation API サンプルでは、ジョブ(WorkItem)の終了通知を得るために OnComplete コールバック URL を利用します。ただ、ローカル環境では、URL が外部から認識されないため、ngrook ツール を利用してローカル ⇔ パブリックの橋渡し(トンネル化)効果を利用する必要があります。コマンドプロンプトを起動して ngrok のあるパスに移動したら、ngrok http 3000 を実行します。
上記の例では、http://localhost:3000 が https://f44f-115-162-81-167.jp.ngrok.io に置き換えられて外部から通知を得られるようになります。この処理は ngrok の実行中のみ有効です。また、置き換えられる URL は ngrok の実行毎に変化してしまうので、サンプルの評価中は実行を停止しないよう注意してください。なお、ngrok のセッション有効期限が起動後 2 時間です。 - このサンプルでは、実行時にシステム環境変数から Client ID と Client Secret、CallBack URL を取得します。コマンド プロンプト上で SET コマンドをシステム環境変数、FORGE_CLIENT_ID、FORGE_CLIENT_SECRET、FORGE_WEBHOOK_URL 環境変数を、それぞれ設定します。クリップボードとメモ帳などを利用してコピー&ペーストしながら SET コマンドを実行してください。<<YOUR NGROK URL>> は、上記 5. で得られた URL を指します。
set FORGE_CLIENT_ID=<<YOUR CLIENT ID FROM DEVELOPER PORTAL>> set FORGE_CLIENT_SECRET=<<YOUR CLIENT SECRET>> set FORGE_WEBHOOK_URL=<<YOUR NGROK URL>>
- ここまでの手順で実行の準備は完了です。カレント フォルダが learn.forge.designautomation フォルダであることを確認したら、npm start と入力、リターンキーを押して Node.js サーバーを起動します。
- Web ブラウザを起動して、URL の localhost:3000 と入力してリターンすると、次のページが表示されるはずです。
- ページ右上の「Configure」リンクをクリックして AppBundle と Activity を登録します。ここでは、Design Automation API for AutoCAD コアエンジンを使って、DWG ファイルの内容を書き換える WorkItem を実行することにします。
次のページが表示されたら、「Select a local AppBundle:」にクローンしたリポジトリに含まれる AppBundle 名(ここでは C:\repo\learn.forge.designautomation\bundles フォルダ)が 4 つ表示されるので、AutoCAD アドインを含むバンドル パッケージである「UpdateDWGParam」を選択します。
この UpdateDWGParam.zip には、AutoCAD 2020 用の .NET アドインが含まるので、「Select engine:」には対応するコアエンジン名である「Autodesk.AutoCAD+23_1」を選択します。 - 「Select a local AppBundle:」と「Select engine:」を選択したら、ページ右下の [Create/Update] ボタンをクリックすると、AppBundle をアップロードされて登録、同時に Activity も登録されます。登録が正常に終了すると、ページ左下の「Existing activities」に「UpdateDWGParamActivity+dev」が表示されるようになります。
- learn.forge.designautomation サンプルには、編集対象とするデザイン ファイルも提供されています。ここでは、インチ単位の Width (幅)と Height(高さ)パラメータを持つダイナミックブロックを含む autocad_sample_file.dwg を編集対象とします。ローカル リポジトリ内の sample files フォルダ(ここでは C:\repo\learn.forge.designautomation\sample files フォルダ)に autocad_sample_file.dwg があることを確認してください。
- アプリ ページの「Width:」と「Height:」に適当な値を入力して、「Input file」の [ファイルの選択] ボタンで autocad_sample_file.dwg を選択したら、「UpdateDWGParamActivity+dev」Activity が選択されていることを確認して [Start workitem] ボタンをクリックしてください。
ページ上にログデータが表示されて、WorkItem が正常終了すると、ログ メッセージ下部の "status" 値に ”success” と表示されます。"reportUrl" 値に記された長めの URL をブラウザで開けば、ログファイルをダウンロードすることも出来ます。
ngtok を起動したコマンド プロンプトには、OnComplete コールバック URL が呼び出されたことが表示されます。(ここでは https://f44f-115-162-81-167.jp.ngrok.io/api/forge/callback/designautomation) - "status" 値が ”success” で WorkItem が終了している場合、ログを上部にスクロールすると。ハイパーリンクが埋め込まれた「Download result file here」が表示されます。このリンクをクリックすると、WorkItem が処理した成果ファイルをダウンロードすることが出来ます。
あとは、ダウンロードした DWG ファイルを AutoCAD、または、AutoCAD LT で開けば、処理された内容を確認することが出来ます。 - (オプション) learn.forge.designautomation サンプルは WorkItem が処理した成果ファイルを Forge Viewer に表示する機能は実装されていません。ただし、新たなコード実装なしに成果ファイルをチェックする方法もあります。
- learn.forge.designautomation サンプルで使った Client ID と Client Secret で VS Code Forge エクステンション を利用すると、 <<Client ID>>-designautomation の名前で Bucket が作成されていることがわかります。
Bucket 内の <<date_time>>_output_autocad_sample_file.dwg(例:20220816063911_output_autocad_sample_file.dwg)を右クリックして「Translate Object」から Model Derivative API で変換すると、「Preview Derivative」で Forge Viewer 上で確認することが出来ます。 - 同様に <<Client ID>>-designautomation 名の Bucket に <<date_time>>_output_autocad_sample_file.dwg を見つけて右クリックすると、「Downoad Object」で成果ファイルをダウンロードすることも出来ます。
- learn.forge.designautomation サンプルで使った Client ID と Client Secret で VS Code Forge エクステンション を利用すると、 <<Client ID>>-designautomation の名前で Bucket が作成されていることがわかります。
ここでは AutoCAD コアエンジン(Design Automation API for AutoCAD)でリポジトリ内に用意された AppBundle を含むバンドル パッケージを使った内容をご紹介しましたが、Revit、Inventor、3ds Max のコアエンジンも評価することも出来ます。リポジトリ内の AppBundle を利用する場合、登録する AppBundle とエンジン、実行時に指定する Activity とサンプル デザイン ファイルの組み合わせは、次のとおりです。
※revit_sample_file.rvt はフィート/インチ単位であるため、パラメータ値はフィートでお試しください。(例:Width: 5、Height: 3)
By Toshiaki Isezaki
コメント