過去、このブログでも、何度か AutoCAD I/O についてご案内してきました。2016 年 6月の Forge の正式リリース時には、Design Automation API の名前に名称変更されています。まだ Public Beta という扱いですが、Design Automation API も v3(バージョン 3)になり、扱うことが出来るコアエンジンも、AutoCAD に加え、Revit、Inventor、3ds MAX の 4 種類に増加しています。
今回は、改めて Design Automation API for AutoCAD の目的や機能を振り返り、現時点で正式リリースされている Design Automation API for AutoCAD v2 と、年末に予定されているされている Design Automation API for AutoCAD v3 を網羅する概要に触れ、理解を深めていただく機会としたい意向です。
歴史
現在の Design Automation API for AutoCAD は、もともと AutoCAD I/O と呼ばれていたもので、オートデスクがクラウドに本腰を入れだした直後の 2013 年後半から 2014 年初頭にかけて実装されだした Web サービス API の 1 つです。当時は、AutoCAD I/O ではなく、まだ、AutoCAD Core Engine Service の名称で呼称されていました。
その後、Forge の登場で Design Automation API に変更され、2017 年秋の Forge DevCon Las Vegas で、同 API への Inventor、Revit、3ds Max エンジンの追加がアナウンスされた後、それらと区別する意味で、Design Automation API for AutoCAD の名称に落ち着いた経緯があります。現在ある Forge Platform API の中でも最古参の API ということになります。
AutoCAD Core Engine Service(2014年)
> AutoCAD I/O(2015~16年)
> Design Autimation API (2016~17年)
> Design Autimation API for AutoCAD (2017年~)
目的
コアエンジンの種類に限らず、Design Automation API は、クラウド上で稼働するコアエンジン(v2 では AutoCAD のみ、v3 では AutoCAD、Inventor、Revit、3ds MAX)にアドイン(プラグイン) をロードさせて、反復タスクを自動化するバッチ処理を実現することを目的としています。
デスクトップ製品の共有サーバー(クラウド)利用について ~ アップデート で触れているとおり、クラウド上の仮想環境に AutoCAD や Inventor、Revit、3ds MAX などのデスクトップ製品をインストールして、独自に開発した Web ページなどを介して間接的に製品を利用する方法は許可されていないため、Web インタフェースと連携したシステムを構築する際には唯一、正式にサポートされた形態となります。
Design Automation API for AutoCAD では、DWG ファイル ベースの図面生成や、既存図面の編集や情報抽出、あるいは、数量の拾い出しなどをバッチ処理させるのが一般的な利用方法になるかと思います。そのため、AutoCAD Core Engine Service の頃から、実現内容に大きな変化はありません。ちなみに、2013 年当時に想定されていたシナリオは次のとおりです。もちろん、これらは現在も有効です。
- オンラインの DWG 設定システム(フォント、画層、寸法スタイルなど)があり、指定した設定値に基づく DWG ドキュメントをエンドユーザに提供したい。
- 非常に沢山の図面ファイルに対して、表題ブロックを定期的に更新したい。
- 設計プロジェクトの日報を毎日作成するために、プロジェクト内のすべての図面を印刷したい。
- ScriptPro や他の市販スクリプトツールを使った DWG のバッチ処理用にサーバーがあり、サーバー設定やメインテナンスの労力で生産性が低下している。
メカニズム
Design Automation API for AutoCAD で実際にクラウド上で稼働するコアエンジンとは、通常の Windows 版 AutoCAD にも同梱されている AcCoreConsole.exe です。
AcCoreConsole.exe については コンソール バージョンの AutoCAD で詳しくご案内していますので、必要に応じてご確認ください。重要なのは、AcCoreConsole.exe が通常の AutoCAD(acad.exe)から、ユーザ インタフェースの実装を削除した軽量版 AutoCAD であり、ダイアログ ボックスなどのユーザ インタフェースを表示しないのであれば、起動後に標準コマンドを実行することが出来る、という点です。また、同じく、ユーザ インタフェースを表示しないコマンドであれば、アドイン アプリケーションに実装したカスタム コマンドも実行可能です。
AcCoreConsole.exe は軽量版 AutoCAD であるので、その利用には AutoCAD をある程度理解しておく必要があります。実際、独自のバッチ処理を実装したい場合にも、アドイン アプリケーションでカスタム アプリケーションを開発する方法の他、AutoCAD がもともと持っている標準コマンドを組み合わせて、スクリプト として実行させることも出来てしまいます。
標準コマンドをスクリプトで実装する場合には、コマンド実行中に、ダイアログ ボックスが表示されないよう配慮する必要もあります。このため、目的のコマンド実行前に EXPERT などのシステム変数を設定したり、ハイフン(-)付きでのコマンド呼び出しを利用しなければなりません。また、標準コマンドが再定義されている点も考慮して、ピリオド(.)付きでのコマンド呼び出しも検討する必要があるかもしれません。AutoCAD API によるカスタム コマンド利用を考えていない場合は、次のオンラインヘルプが参考になるはずです。
概要 - ダイアログ ボックスとコマンド ラインを切り替える
Design Automation API for AutoCAD で実行させたい内容(アドイン アプリケーション、または、スクリプト)は、事前のローカル コンピュータにインストールした AutoCAD の AcCoreConsole.exe で事前にテストすることが出来ます。
概念と用語
Design Automation API を利用する際には、次の概念を理解する必要があります。
- Activity(アクティビティ)
Design Automation API に処理させるジョブ(実行)単位で、後述の WorkItem に関連付けられて指定されます。 - WorkItem(ワークアイテム)
Design Automation API で扱う処理単位で、関連付けされた Activity の内容を実行します。Activity によっては WorkItem 側で Activity 用の入力パラメータと出力パラメータを指定します。パラメータには、通常、編集対象の既存 DWG ファイルの入手先 URL と、編集後に DWG ファイルを保存するための URL を指定します。 - AppPackage(App パッケージ)
Design Automation API に渡して、実行させるアドイン アプリケーションです。ObjectARX または .NET API、AutoLISP(除く Visual LISP 関数)で作成されて、自動ローダーでロード処理の詳細を提供する必要があります。自動ローダーとは、PackageContents.xml ファイルを利用して AutoCAD へのアドイン ロードを実行する仕組みです。 - Engine(エンジン)
クラウド上で稼働し、WorkItem を処理する AcCoreConsole.exe です。エンジンには、AutoCAD バージョンに準じた AcCoreConsole.exe をエンジンバージョンとして指定して実行させることが出来ます。現時点で v2 で利用可能なエンジンは AutoCAD 2015 Core Engine(Longbow) ID:20.0、AutoCAD 2016 Core Engine(Maestro) ID:20.1、AutoCAD 2017 Core Engine(Nautilus)ID:21.0、AutoCAD 2018 Core Engine(Omega) ID:22.0、AutoCAD 2019 Core Engine(Pi) ID:23.0 、v3 では、Autodesk.AutoCAD+20_1(AutoCAD 2016)、Autodesk.AutoCAD+21(AutoCAD 2017)、Autodesk.AutoCAD+22(AutoCAD 2018)、Autodesk.AutoCAD+23(AutoCAD 2019)、Autodesk.AutoCAD+23_1(AutoCAD 2020)になっています。
手順と使用する endpoint
Design Automation API for AutoCAD の一般的なワークフローは、次のとおりです。PlotToPDF のような既定の Actvity を実行する場合には、1.、3.、4. の処理は不要です。
- AppPackage に割り当てられ、Activity に関連付けられるアドイン アプリケーション、または、スクリプトを特定のクラウド ストレージにアップロードする。
- WorkItem で処理、参照されるファイルを指定のクラウド ストレージにアップロードする。
- POST appbundles を使って新しい AppPackage を作成する。
- POST activities を使って Activity を作成する。
- POST workitems endpoint を使用して、Activity のジョブをコアエンジンに送信する。 WorkItem は、WorkItemに渡された Activity に関連付けられている AppPackages に定義されているアドイン アプリケーションやスクリプトの実行を開始します。
- GET workitems/:idをポーリングして WorkItem の現在のステータスをチェックして、正常終了するか否かを確認する。
- 指定されたクラウド ストレージから処理されたファイルをダウンロードする。
※ 上記でリンクしている endpoint は v3 のものです。
よくある質問
- Design Automation API for AutoCAD は、AcCoreConsole.exe のプロンプトのみを持つ CAD 製品なのでしょうか?
- いいえ、Design Automation API for AutoCAD は開発者向けの API であり、エンドユーザ(設計者)が利用する CAD 製品ではありません。
- Design Automation API for AutoCAD を購入、オンプレミス サーバーにインストールして利用することは出来ますか?
- いいえ、他の Forge Platform API と同様に、オートデスクが AWS 上に構築したクラウドの利用が前提となります。オンプレミス化は出来ません。また、Forge はクラウド クレジットによる重量課金制をとるサブスクリプション モデルを採用しています。利用権を永久に買い取ることは出来ません。
- Design Automation API for AutoCAD を利用すると、AutoCAD Web(https://web.autocad.com)のカスタマイズが出来るのですか?
- いいえ、Design Automation API for AutoCAD は、オートデスクはクラウド上に用意した AutoCAD コアエンジンに、3rd party の開発者が開発した AutoCAD 用のアドイン アプリケーションをロード、実行さて、バッチ処理をおこなうものです。AutoCAD Web のカスタマイズや同等のクラウド サービスを構築する API ではありません。
- Design Automation API for AutoCAD で処理する DWG ファイルの入力や、アドインで処理された DWG ファイルの出力にオートデスク以外のクラウド ストレージを利用することは出来ますか?
- はい、当該ストレージ サービスが、3-legged 認証/認可をサポートしていれば可能なす。ローカル コンピュータを出力先として指定することは出来ません。
- Design Automation API for AutoCAD で AutoCAD Mechanical や AutoCAD Map 3D など、AutoCAD ベースの業種別製品で作成したデータや機能を扱うことは出来ますか?
- AutoCAD ベースの業種別製品で作成したカスタム オブジェクトは、オブジェクト イネーブラを使って認識することが出来ます。ただし、同カスタム オブジェクトを新規に作成したり、編集することは出来ません。利用可能な機能は、あくまで AutoCAD 単体の標準機能が対象となります。ただし、一部、Bing Map を利用する機能など、オートデスクが利用する外部コンポーネントのライセンス上、利用出来ないものがありますので、事前にテストしていただくことをお勧めしています。AutoCAD Civil 3D コンポーネントは Design Automation API for AutoCAD で Beta 実装しています。
Design Automation API for AutoCAD v2 についても言及してきましたが、Design Automation API for AutoCAD v3 では、異なる endpoint を利用することになるため、残念ながら、いずれかのバージョンで作成した Forge アプリの相互互換性はありませんのでご注意ください。ただ、基本的な考え方は踏襲しているので、目的や概念、用語は一緒です。また、これから Design Automation API for AutoCAD の利用を検討されている場合には、Design Automation API for AutoCAD v3 の使用を強くお勧めしています。今年末を予定している v3 の正式リリース後、しばらくの移行期間を経て、v2 の閉鎖を検討しているためです。
Design Autonation API for AutoCAD(AcCoreConsole.exe)で実行させる AppBundle では、アドイン実装内で現在の図面を切り替える実装は許可、サポートされていませんのでご注意ください。この処理には、OPEN コマンドや NEW コマンドの実行、あるいは、アプリケーション実行コンテキストが必要な既存図面オープン、新規図面作成の API 実装が含まれます。また、この制限には、Database.ReadDwgFile メソッド/AcDbDatabase::readDwgFile() の使用も同様にサポートされていません。Design Automation API for AutoCAD(AcCoreConsole.exe)では、AcCoreConsole.exe /i オプションのみがサポートされています。
Design Automation API v3 は 2019年10月28日に正式リリースされました。
By Toshiaki Isezaki
PDF主力に追加の日本語フォントを使用したい場合は、AppPackageにフォントを内蔵させて、API呼出の度にロードさせないといけないのでしょうか?
複数フォントをAppPackageに入れた場合数十MBになってしまい、毎回ロードするのがとても非効率だと思います。もしフォントを直接配置できる仕組みがあれば教えてください
投稿情報: Tom | 2019/06/24 20:03
PDF主力→PDF出力
変換ミスしました💦
投稿情報: Tom | 2019/06/24 20:26
いまのところ、追加フォントをAppPackageに入れるのが一般的な解となります。これ以外だと、eTransmit の転送パッケージ(http://help.autodesk.com/view/ACD/2020/JPN/?guid=GUID-C628034E-E124-48D8-B924-5912B5A7E5AB)にフォントを入れる方法がありますが、図面単位になってしまうので、あまりお勧めは出来ません。
個別のお問合せは、Forge Help(https://forge.autodesk.com/en/support/get-help)の活用をご検討いただけますと助かります。
投稿情報: Toshiaki Isezaki | 2019/06/26 00:52
やはりForgeのサーバから直接アクセスできる領域にフォントを配置するような事は不可で
APIコールの度にフォントファイルごと転送しないといけないんですね
ご回答ありがとうございます!
投稿情報: Tom | 2019/06/27 03:43