Design Automation API を利用するには、Activity でコアエンジンで処理させる入出力ファイルを宣言、実際の実行タスクとなる WorkItem の実行時に、Activity で宣言した入出力ファイルの物理的なパス/URL を指定することになります。
Activity の登録には POST activities エンドポイントを、WorkItem の実行には POST workitems エンドポイントを、それぞれ利用することになります。
両エンドポイントのリクエスト ボディで指定する JSON ペイロードには、リファレンスに記載されるさまざまなパラメータを利用します。
POST activities | Request body
入手力ファイルを指定するパラメータは、アプリの内容によって様々なパターンに別れます。ここでは、Design Automation API:Direct-to-S3 アプローチを簡素化する新機能 の方法を使って、AutoCAD コアエンジンの代表的な例でご紹介します。
固定ファイル名での入出力
コイルの回転数、半径、高さを入力してコアエンジンにパラメータとして渡し、コイル形状のスイープ ソリッドを作成して 3D DWG をダウンロードさせる例です。
事前に画層やレイアウト ビューポートを設定したテンプレート DWG を利用することで、モデル空間にスイープ ソリッドを作成、レイアウトでモデル空間のスイープ ソリッドを投影を表示させます。
入力ファイルのテンプレート DWG を template.dwg、パラメータ ファイル(JSON)を params.json、出力ファイルは result.dwg の固定名にしています。Activity と WorkItem の JSON ペイロードは次のようになります。
Activity:
var payload ={"id": DA4A_UQ_ID,"commandLine": ['$(engine.path)\\accoreconsole.exe /i "$(args[DWGInput].path)" /al "$(appbundles[CreateCoil].path)" /s "$(settings[script].path)"'],"parameters": {"DWGInput": {"zip": false,"ondemand": false,"verb": "get","description": "Template drawing","required": true,
"localName": "template.dwg"},"Params": {"zip": false,"ondemand": false,"verb": "get","description": "Input parameters to create coil","required": true,"localName": "params.json"},"DWGOutput": {"zip": false,"ondemand": false,"verb": "put","description": "Created drawing","required": true,"localName": "result.dwg"}},"settings": {"script": {"value": "CreateCoil\n"}},"engine": "Autodesk.AutoCAD+23_1","appbundles": [DA4A_FQ_ID],"description": "Create a coil solid to new drawing"};
WorkItem:
var payload =
{"activityId": DA4A_FQ_ID,"arguments": {"DWGInput": {"url": "urn:adsk.objects:os.object:" + BUCKET_KEY + "/template.dwg" ,"headers": {"Authorization": "Bearer " + credentials.access_token},"verb": "get"},"Params": {"url": "data:application/json," + paramsJSON // ex). {"turn":"5","radius":"50","height":"100"}},"DWGOutput": {"url": "urn:adsk.objects:os.object:" + BUCKET_KEY + "/result.dwg","headers": {"Authorization": "Bearer " + credentials.access_token},"verb": 'put'}}};
次の例は、卓上扇風機の羽根の色、葉っぱ形状の有無、オーダーする数量をコアエンジンに渡し、あらかじめ用意した DWG の内容を編集して見積書レイアウトと指示書図面レイアウトを用意、 1 つの PDF ファイルに出力してダウンロードさせる例です。
入力ファイルとなるテンプレート DWG を template.dwg、パラメータ ファイル(JSON)を params.json、出力ファイルには quotation.pdf の固定名にしています。また、Design Automation API の実行環境にない TrueType フォントを解決するために、フォント マッピング ファイルを dwg.fmp の固定名で入力ファイルとしています。 フォント マッピング ファイルの詳細は、Design Automation API for AutoCAD:カスタム フォントの扱いと解決 のブログ記事でご紹介しています。
この Activity と WorkItem の JSON ペイロードは次のようになります。
Activity:
var payload ={"id": DA4A_UQ_ID,"commandLine": ['$(engine.path)\\accoreconsole.exe /i "$(args[DWGInput].path)" /dwgfontmap /al "$(appbundles[TableFanConfigurator].path)" /s $(settings[script].path)'],"parameters": {"DWGInput": {"zip": false,"ondemand": false,"verb": "get","description": "Template drawing","required": true,"localName": "template.dwg"},"Params": {"zip": false,"ondemand": false,"verb": "get","description": "Input parameters to specify behavior","required": true,"localName": "params.json"},"FontMap": {"zip": false,"ondemand": false,"verb": "get","description": "Input font map file for user truetype font","required": true,"localName": "dwg.fmp"},"PDFOutput": {"zip": false,"ondemand": false,"verb": "put","description": "output PDF quotation","required": true,"localName": "quotation.pdf"}},"settings": {"script": {"value": "CreateQuotation\n"}},"engine": "Autodesk.AutoCAD+24_1","appbundles": [DA4A_FQ_ID],"description": "Create Quotation"};
WotkItem:
var payload ={"activityId": DA4A_FQ_ID,"arguments": {"DWGInput": {"url": "urn:adsk.objects:os.object:" + BUCKET_KEY + "/template.dwg","headers": {"Authorization": "Bearer " + credentials.access_token},"verb": "get"},"Params": {"url": "data:application/json," + paramsJSON // ex). {"color":"2","quantity":"1","leaf":"true"}},"FontMap": {"url": "urn:adsk.objects:os.object:" + BUCKET_KEY + "/dwg.fmp","headers": {"Authorization": "Bearer " + credentials.access_token},"verb": "get"},"PDFOutput": {"url": "urn:adsk.objects:os.object:" + BUCKET_KEY + "/quotation.pdf","headers": {"Authorization": "Bearer " + credentials.access_token},"verb": 'put'}"onComplete": {"verb": "post","url": "https://**********************/api/oncomplete"}}};
可変ファイル名での入出力
ユーザが選択した任意名の DWG 内部を走査し、不要なブロック定義を削除(パージ)、パージ後のクリーンな DWG を同じファイル名(選択した DWG による)でダウンロードさせる例です。
パージしたブロック定義名とブロック定義内の図形数をグラフ化するため、 Chart.js(https://www.chartjs.org/)へ渡す JSON ファイルも同時に出力してます。
入力ファイルとなる DWG ファイル名は可変になるため、Activity の "DWGInput" と名付けたセクション配下の localName で特定名を指定はしていません。同様に、ここでは "DWGOutput" パラメータで指定する出力ファイル名も入力ファイルと同じファイル名にします。つまり、出力ファイル名も可変になりますが、localName 指定がないと Activity 登録時に Bad Request エラーになってしまうため、ダミーの名前 "purged.dwg" を指定しています。
出力ファイル名は、WorkItem 実行時に "DWGOutput" セクション配下に localName で指定することで、ファイル名をオーバーライドすることが出来ます。
なお、入力ファイルのパラメータ ファイル(JSON)は params.json、グラフ化で使用する出力ファイルは chart.json の固定にしています。
アドイン処理で chart.json を生成する内容は、Design Automation API:WorkItem からの JSON 反映 のブログ記事でご紹介しています。
Activity:
var payload ={"id": DA4A_UQ_ID,"commandLine": ['$(engine.path)\\accoreconsole.exe /i "$(args[DWGInput].path)" /al "$(appbundles[PurgeBlock].path)" /s $(settings[script].path)'],"parameters": {"DWGInput": {"zip": false,"ondemand": false,"verb": "get","description": "Source drawing","required": true},"Params": {"zip": false,"ondemand": false,"verb": "get","description": "Input parameters to specify behavior","required": true,"localName": "params.json"},"DWGOutput": {"zip": false,"ondemand": false,"verb": "put","description": "Output DWG drawing","required": true,"localName": "purged.dwg"},"ChartOutput": {"zip": false,"ondemand": false,"verb": "put","description": "Output Chart JSON","required": true,"localName": "chart.json"}},"settings": {"script": {"value": "PurgeBlock\n"}},"engine": "Autodesk.AutoCAD+24_1","appbundles": [DA4A_FQ_ID],"description": "Purge Block"};
WorkItem:
var payload ={"activityId": DA4A_FQ_ID,"arguments": {"DWGInput": {"url": "urn:adsk.objects:os.object:" + BUCKET_KEY + "/" + SOURCE_DWG,"headers": {"Authorization": "Bearer " + credentials.access_token},"verb": "get"},"Params": {"url": "data:application/json," + paramsJSON // ex). {"purge":"true","preview":"false"}},"DWGOutput": {"url": "urn:adsk.objects:os.object:" + BUCKET_KEY + "/" + RESULT_DWG, // 可変"headers": {"Authorization": "Bearer " + credentials.access_token},"verb": 'put',"localname": RESULT_DWG // 可変},"ChartOutput": {"url": CHART_JSON,"headers": {"Authorization": "Bearer " + credentials.access_token},"verb": 'put'},"onComplete": {"verb": "post","url": "https://**********************/api/oncomplete"}}};
ZIP 圧縮の入力
外部参照図面と親図面を ZIP 圧縮して、固定ファイル名で PDF 出力、ダウンロードさせる例です。
DWG ファイル、ラスター画像ファイル、アンダーレイ ファイルなどを外部参照する DWG 図面を処理する際には、それら一式を ZIP 圧縮後、入力ファイルとしてコアエンジンに渡すことが出来ます。この際、Actvity の zip 指定を true で設定して、WorkItem の同じ名前のセクションで、コアエンジンに開かせる親ファイル名を指定します。親ファイル名の指定で利用するのが、pathInZip パラメータです。
なお、この Activity は AutoCAD のコマンドのみを利用するので、AppBundle を使用しません。このため、appbundles パラメータの値は POST appbundles エンドポイントを使った登録で使用する AppBundle の Id ではなく、ブランク([])になっています。
Activity:
var payload ={"id": DA4A_UQ_ID,"commandLine": ['$(engine.path)\\accoreconsole.exe /i "$(args[DWGInput].path)" /s "$(settings[script].path)" /l ja-JP'],"parameters": {"DWGInput": {"zip": true,"ondemand": false,"verb": "get","description": "Source drawing","required": true},"PDFOutput": {"zip": false,"ondemand": false,"verb": "put","description": "putput PDF drawing","required": true,"localName": "result.pdf"}},"settings": {"script": {"value": "_tilemode 0 -export _pdf _all result.pdf\n"}},"engine": "Autodesk.AutoCAD+24_1","appbundles": [],"description": "PDF output"};
WorkItem:
var payload ={"activityId": DA4A_FQ_ID,"arguments": {"DWGInput": {"pathInZip": PARENT_DWG, // ex) . 8th floor.dwg"url": "urn:adsk.objects:os.object:" + BUCKET_KEY + "/" + SOURCE_ZIP, // ユーザ選択の任意ファイル名"headers": {"Authorization": "Bearer " + credentials.access_token},"verb": "get",},"PDFOutput": {"url": "urn:adsk.objects:os.object:" + BUCKET_KEY + "/result.pdf","headers": {"Authorization": "Bearer " + credentials.access_token},"verb": 'put'},"onComplete": {"verb": "post","url": "https://**********************/api/oncomplete"}}};
By Toshiaki Isezaki
コメント