AutoCAD 内で Web ページを表示

Forge DevCon Japan 2018H3 Webhooks API で広がるアプリ連携 クラスでは、A360 や BIM 360 Docs、Fusion Team などのオートデスクのストレージ サービスで起こるユーザ イベントを利用した WebHooks API についてご紹介しました。この中で、ストレージ操作の通知を得るべき関係者には、実際に AutoCAD などのデスクトップ製品を利用中の設計者が多いのでは?とお話しました。また、その想定に基づいて、デスクトップ製品内で WebHooks を実装した Web ページを表示する例をデモしました。DevCon の終了後、実際にどのような方法で実装するのか、何名かの人に質問を受けましたので、改めてご紹介しておきたいと思います。

ご存知のとおり、AutoCADの 2014 バージョンから JavaScript  API をサポートしています。また、AutoCAD 2015 で登場した 新しいタブ 機能と、AutoCAD 2016 で 新しいタブ から名称変更した スタートタブ とも、表示されるコンテンツは HTML で定義されています。スタートタブのカスタマイズはサポートされていないものの、AutoCAD は、このように、順次、Web 開発に対する親和性を高めてきています。

この過程で従来の AutoCAD .NET API も拡張されていて、AutoCAD にカスタム パレット(Palette クラス)を追加する Add メソッドに直接 URI を指定することで、ローカル コンピュータ内にある HTML ファイルや外部 Web サイトをパレット内に表示出来るようになっています。

AutoCADのPaletteSet.AddメソッドのC#およびVisual Basicのコード例が表示されています。

H3 Webhooks API で広がるアプリ連携 クラスでご紹介したのは、Data Management WeoHooks のサンプル(https://github.com/Autodesk-Forge/data.management-nodejs-webhook)のデモ サイトである BIM 360 Notifier(https://bim360notifier.autodesk.io/)を、このメソッドを使って AutoCAD のカスタム パレット内に表示したものとなります。

AutoCAD 2019のインターフェースに表示されているBIM 360 Notifierのカスタムパレット。ユーザーがフォルダを選択し、イベントを選ぶオプションが見える。

AutoCAD アドイン側で実装すべきは、カスタム パレットを作成して特定の Web サイトを表示するコマンドを定義するだけ、という簡単な内容です。WebHooks API で通知を得るコールバックや 3-legged OAuth で使用するコールバックの実装には Web サーバーの構築が不可欠であるため、アドイン内に Web セキュリティを持ち込まなくてもすむ利点があります。

上図の実装で定義した Forge-Webhooks コマンドの C# コードは次のとおりです。  

// Decraration variables for PalleteSet
static Autodesk.AutoCAD.Windows.PaletteSet ps = null;
// Modal Command with localized name
[CommandMethod("MyGroup", "Forge-Webhooks", "Forge-Webhooks", CommandFlags.Modal)]
public void MyCommand2()
{
    // Create PalleteSet
    if (ps == null)
    {
        ps = new Autodesk.AutoCAD.Windows.PaletteSet("BIM 360 Notifier");
        ps.Style = PaletteSetStyles.ShowPropertiesMenu |
        PaletteSetStyles.ShowAutoHideButton |
        PaletteSetStyles.ShowCloseButton |
        PaletteSetStyles.Snappable;
        ps.Visible = true;
    }
    else
    {
        ps.Visible = true;
    }
    // Create Pallete
    if (ps.Count == 0)
    {
        Uri url = new Uri("https://bim360notifier.autodesk.io/");
        Autodesk.AutoCAD.Windows.Palette p = ps.Add("BIM 360 Notifier", url);
        ps.Dock = DockSides.None;
    }
}

余談ですが、AutoCAD には JavaScript API をサポートした 2014 バージョン以降、製品内部に WebKit が組み込まれています。上記のような Web サイト/ページを表示するカスタム パレットやスタート タブ(HTML)を表示中でアクティブにした状態で F12 キーを押すと、Web ブラウザ同様のデベロッパーツールを呼び出すことが出来ます。

Chrome DevToolsのインスペクタを表示している画面。HTMLの構造やCSSスタイルが表示されており、BIM 360 Notifierに関する内容が含まれている。

Web サーバー実装では、Web ブラウザ側のデベロッパーツールを利用するものと思いますが、ご参考までにお知らせしておきます。 

By Toshiaki Isezaki

Discover more from Autodesk Developer Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading