Forge Platform API を包括的に習得いただけるチュートリアル Learn Autodesk Forge(英語)の Design Automation API のセクション、Modify your models について、ご紹介しています。
前回のセットアップ手順にて、動作確認のための環境が準備できていることを前提とします。
今回は、learn.forge.designautomation サンプルのソースコードを入手して、ローカル環境で実行する手順をご紹介します。
1. ソースコードの入手
コマンド プロンプトを起動し、CD コマンドでカレント フォルダを任意のディレクトリ(ドキュメント ディレクトリの場合は C:\Users\<Windowsログインユーザ名>\Documents など)に移動してから、git clone コマンドで GitHub のソースコードの URL をパラメータに指定して、リポジトリ の内容をクライアント コンピュータにコピーします。
git clone https://github.com/Autodesk-Forge/learn.forge.designautomation.git と入力してください。
コピーされたリポジトリが、指定したディレクトリ(ドキュメントの場合は、C:\Users\<Windows ユーザ名>\Documents ディレクトリ)直下の learn.forge.designautomation フォルダ配下にコピーされていることを確認してください。
2. Visual Studio でプロジェクトを開く
Visual Studio 2017 を起動し、[ファイル]->[開く]->[プロジェクト/ソリューション]から、learn.forge.designautomation フォルダ配下にある designautomation.sln を選択してください。
ソリューション "designautomation" が開きます。
[表示]->[ソリューションエクスプローラー]ウィンドウを開くと、その配下に以下の5つのプロジェクトが一覧で表示されます。
[表示]->[エラー一覧]ウィンドウを開き、エラーが何もないことを確認してください。
ここで、何らかのエラーがある場合は、前回のセットアップ手順にて、下記のいずれかの要件が満たされていない可能性があります。
再度、下記のプログラムがインストールされているか、ご確認ください。
- .NET Core 2.1 開発ツール
- .NET Framework 4.7 SDK/Targeting Pack もしくは 4.7.1 SDK/Targeting Pack
- RevitAPI.dll
3. Revit アドインのビルド
Revit アドインのバンドルパッケージを作成するためには、まずは Revit アドインをビルドする必要があります。
[ソリューションエクスプローラー]ウィンドウから、Revit アドインのプロジェクト [UpdateRVTParam] をクリックして展開し、Command.cs を開きます。
すると、[エラー一覧]ウィンドウに、下記の 2つの名前空間が見つからないという警告とそれに関連するエラーが表示される場合があります。
- 警告 参照コンポーネント 'Newtonsoft.Json' が見つかりませんでした。 UpdateRVTParam
- 警告 参照コンポーネント 'DesignAutomationBridge' が見つかりませんでした。 UpdateRVTParam
これは、参照設定で指定されている「DesignAutomationBridge.dll」と「Newtonsoft.Json.dll」がまだ取得されていないことが原因です。
このサンプルでは、開発者が作成したコードを共有するためのパッケージマネージャー NuGet を通じて、上記のパッケージを取得するように設定されております。
そのため、インターネットに接続されていれば、自動的にこれらのパッケージはダウンロードされるはずです。
パッケージが適切にインストールされているか確認するためには、[ソリューションエクスプローラー]ウィンドウから UpdateRVTParam プロジェクト配下の[参照]を右クリックし、[NuGet パッケージの管理...]を選択してください。
NuGet パッケージマネージャが開き、[インストール済み]タブに 3つのパッケージがインストールされていることがわかります。
- 1つ目のパッケージは、Revit アドインを Design Automation API 用に変換するために利用するパッケージです。
- 2つ目のパッケージは、Revit アドインの実装に使用する C# 言語のコンパイルをサポートするためのパッケージです。
- 3つ目のパッケージは、.NET 環境で JSON フォーマットのデータを扱う際に利用するパッケージです。
また下記のような警告も表示される場合があります。これは、UpdateRVTParam プロジェクトのビルド設定で、ビルドターゲットプラットフォームが適切に選択されていないことが原因です。
警告 構築されているプロジェクトのプロセッサ アーキテクチャ "MSIL" と、参照 "RevitAPI" のプロセッサ アーキテクチャ "AMD64" の間には不一致がありました。この不一致は、ランタイム エラーを発生させる可能性があります。プロジェクトと参照の間でプロセッサ アーキテクチャが一致するように、構成マネージャーを使用してターゲットとするプロジェクトのプロセッサ アーキテクチャを変更するか、ターゲットとするプロジェクトのプロセッサ アーキテクチャに一致するプロセッサ アーキテクチャとの依存関係を参照で設定することを検討してください。
この警告を解決するためには、[ソリューションエクスプローラー]ウィンドウから UpdateRVTParam プロジェクトを右クリックし、プロパティを表示します。
[ビルド]タブにある[全般]セクションの[プラットフォームターゲット]の設定が「Any CPU」になっているので、「x64」に切り替えます。
次に、もう一度、UpdateRVTParam プロジェクトのプロパティを開き、[アプリケーション]タブを開いて、[既定の名前空間]の設定を 「Autodesk.Forge.Sample.DesignAutomation.Revit」に変更し、[ターゲットフレームワーク]の設定が .NET Framework 4.7 または 4.7.1 になっていることを確認してください。
[エラー一覧]ウィンドウから警告がなくなったことを確認し、UpdateRVTParam プロジェクトのビルドを実行してください。
[出力]ウィンドウにビルド結果が表示されます。
ビルドが正常終了していれば、下記のようなメッセージが出力されているはずです。
- Creating archive: C:\Users\ogasawr\GitHub Repo\learn.forge.designautomation\updateRVTParam\../forgesample/wwwroot/bundles/UpdateRVTParam.zip
これは、ビルド実行後のイベントで、AppBundle 用のディレクトリ構成でバンドルパッケージを作成し、ZIP 圧縮して、./forgesample/wwwroot/bundles/UpdateRVTParam.zip として保存する処理が実行されていることを意味します。
UpdateRVTParam プロジェクトのプロパティにある[ビルド イベント]タブから、[ビルド後イベントのコマンドライン]を表示すると、実際の処理を確認することができます。
[ソリューションエクスプローラー]ウィンドウから、forgesample プロジェクト配下の[bundles]フォルダを右クリックし、「エクスプローラーでフォルダーを開く」を選択し、UpdateRVTParam.zip ファイルが保存されていれば、バンドルパッケージの準備は完了です。
Visual Studio 2017 は起動した状態のまま、次のステップに移行します。
4. ngrok の起動
次に、ngrok ツールを使用して、Design Automation API からのコールバックによる通知処理を受信できるように、ローカル環境で起動するforgesample プロジェクトをインターネット上に一時的に公開します。
コマンド プロンプトを起動し、CD コマンドで ngrok.exe が保存されているディレクトリに移動します。
そして、下記のコマンドを実行してください。
- ngrok http 3000 -host-header="localhost:3000"
すると、下記のように ngrok ツールが起動し、"localhost:3000" というローカルアドレスが、"http://********.ngrok.io"という、ランダムな文字列のホスト名が割り当てられたアドレスにフォワードされます。
このアドレスは、ngrok ツールが起動している間だけ有効です。
そのため、サンプルを実行する間は、このツールを起動したままの状態にします。
5. 環境変数の設定
forgesample プロジェクトは、Design Automation API を利用する Forge アプリです。このサンプルを実行するためには、環境変数といくつかの設定を行う必要があります。
Visual Studio 2017 に戻り、[ソリューションエクスプローラー]ウィンドウから、forgesample プロジェクトを右クリックし、プロパティを選択してください。
[デバッグ]タブを開き、それぞれ以下の設定を行ってください。
- [プロファイル]設定: プルダウンメニューから、「forgesample」を選択
- [ブラウザの起動]設定: チェックボックスを有効化
- 環境変数:
- ASPNETCORE_ENVIRONMENT: Development
- FORGE_CLIENT_ID: Forge アプリの Client ID
- FORGE_CLIENT_SECRET: Forge アプリの Client Secret
- ASPNETCORE_URLS: http://localhost:3000
- FORGE_WEBHOOK_URL: ngrok ツールで割り当てられたアドレス
- [Web サーバーの設定]->[アプリ URL]: 「http://localhost:3000/」に変更
これで Forge アプリの準備は完了です。
6. デバッグ実行
[ソリューションエクスプローラー]ウィンドウで forgesample プロジェクトを選択している状態で、下図のように実行するプロジェクトを forgesample に変更し、RUN ボタンをクリックします。
すると、Web ブラウザが起動し、このサンプルの画面が表示されます。
7. AppBundle の登録
画面右上の [Configure]ボタンをクリックすると、ダイアログが表示されます。
「Select engine」の設定で、「Autodesk.Revit+2019」を選択してください。
[Create/Update]ボタンをクリックすると、AppBundle、Activity の登録処理が始まり、処理結果が出力コンポーネントに表示され、左サイドメニューの[Existing activities]に「UpdateRVTParamActivity+dev」という Activity ID が表示されます。
8. Revit サンプルプロジェクトをダウンロードと確認
こちらのページから、revit sample file.rvt をダウンロードしてください。
Revit 2019 でプロジェクトを開くと、シンプルな壁と窓が配置されていることがわかります。
9. WorkItem の作成
[Width] と [Height] に値を入力し、[Input file]のファイル選択で、ダウンロードした revit sample file.rvt ファイルを選択します。
[Start workitem]ボタンをクリックすると、WorkItem が作成され、処理が開始します。
※このプロジェクト単位は、フィートに設定されているため、フィート単位で値を指定してください。
10. Revit プロジェクトのダウンロードと確認
WorkItem の処理が完了すると、出力コンポーネントにログが表示されます。
そして、処理が成功した場合は、最終行に「Download result file here」リンクが表示されます。
Revit プロジェクトをダウンロードして、Revit 2019 で開いて確認してみましょう。
窓ファミリタイプの幅と高さが設定した値に変更されていることがわかります。
これで、Design Automation API のサンプルの動作を確認することができました。
次回は、処理結果の Revit プロジェクトを Model Derivative API で変換して、Forge Viewer に表示する処理を追加する手順をご紹介します。
By Ryuji Ogasawara
コメント