Home > 3D-CAD > Fusion 360 > ドキュメント > API

ベクトルドロー・レベルゼロ

Fusion360のAPIでパレットを使用する

広告

新規作成日 2017-05-06
最終更新日

公式ドキュメントの和訳です。

原文:「Using Palettes

概要

Introduction

パレットは、典型的なスクリプトやコマンドと比べて、極めて異なる対話処理の方法を提供します。Fusionは、いくつかの組み込みの機能のために、パレットを使用しているため、あなたは、すでに、パレットを見て作業することに慣れています。下記の画像は、表示されるいくつかの組み込みのパレットを示しています。;ブラウザ、はじめに、Textコマンドとレンダリング・ギャラリー。

いくつかの組み込みのパレット

パレットは、いくつかの点で、コマンド・ダイアログと極めて異なっています。まず、パレットは、コマンドに関連付けられていません。そして、コマンドが持っている、同じ寿命規則を持っていません。ユーザーが、コマンドを実行している間、パレットは、表示していることができます。そして、Fusionと対話します。パレットは、個々のドキュメントにさえ、関連付けられていません。パレットが、表示されているとき、あなた、あるいは、ユーザーがそれを閉じない限り、それは、Fusionセッション全体で、表示されたままになります。

もう一つの違いは、パレットの内容は、コマンドとして、同じ方法で、定義されないということです。コマンドを作成するとき、あなたが、行うようなコマンド入力のリストを指定する代わりに、パレットの内容は、HTMLによって定義されます。これは、あなたが、それをHTMLを使用して定義できる限り、あなたが望む方法で、パレットで、何でも表示できることを示しています。パレットを考える方法の1つは、Fusion内のフローティングブラウザです。

パレットのあなたのアドインとHTML/JavaScriptコードは、イベントを通して、互いに情報をやりとりすることができます。あなたのアドインは、結果として、発生するメソッドを呼び出すことができます。HTMLに関連付けられるJavaScriptコードは、処理され、そして、反応できます。また、HTMLに関連付けられるJavaScriptは、あなたのアドインに発生するイベントの結果、メソッドを呼び出すことができます。それで、それは、パレットで変更に反応することができます。

コマンド・ダイアログのように、パレットは、Fusionウィンドウの稜線に、そして、他のパレットに、ドッキングすることができます。コマンド・ダイアログと異なり、あなたは、パレットで、これを完全にコントロールしています。

パレットを作成する

Creating Palettes

パレットは、そのパレット・プロパティを使用して、UserInterfaceオブジェクトから、取得するPalettesコレクション・オブジェクトのaddメソッドを使用して、簡単に作成されます。他のコレクションと同じように、また、あなたは、このコレクションを通して、標準(組み込みの)Fusionパレットを含む、既存のパレットの全てを取得することができます。下記のコードは、新しいユーザー定義したパレットを作成します。

palette = _ui.palettes.add('myPalette', 'My Palette', 'palette.html', False, True, True, 300, 200)

最初の引数は、Fusionのこのセッションの中に存在する、他の全てのパレットに関して一意である必要があるパレットのIDです。2つ目の引数は、パレットの一番上に表示される名前です。第3の引数は、パレット内に表示される、HTMLファイルを参照します。これは、ディスク上のファイルへの絶対パスやアドインの.pyや.dllファイルに相対的な相対パスが使えます。上の例では:「palette.html」が、.pyや.dllファイルとして、同じ位置にあると仮定しています。また、これは、以下の例のように、Web上のHTMLファイルへの参照です。

palette = _ui.palettes.add('myPalette', 'My Palette', 'http://www.autodesk.com', False, True, True, 300, 200)
palette.setPosition(800,400)
palette.isVisible = True

次の3つの引数は、パレットが表示される場合、「Close」ボタンが表示される必要がある場合、そして、そのサイズが、変更可能な場合、指定するブール型の引数です。目に見えないパレットを最初に作成することで、あなたは、上記の例では、位置を設定するのに利用する、他のプロパティを表示する前に設定する機会があります。「Close」ボタンと一緒に、Autodesk webサイトを表示するパレットを、以下に示します。

「Close」ボタンと一緒に、Autodesk webサイトを表示するパレット

アドインとパレットの間の情報のやり取り

Communication Between the Add-In and Palette

ユーザーとモデルとの何らかの種類の対話のために、特に、あなたが、それを使いたいとき、Fusionの中で、フローティング・ブラウザ・ウィンドウを持つことができれば、便利ですが、それ自体は、あまり強力ではありません。あなたが、cssとJavaScriptライブラリの参照を使用できる参照されたhtmlは、極めて洗練されたものです。htmlは、動的である必要があるため、それは、JavaScriptコードを含める、あるいは、参照することができます。しかし、その場所は、あなたのアドインとJavaScriptが、互いに情報をやりとりするHTMLで関連付けられたとき、極めて強力になります。これは、あなたが、アドインの情報を、HTML、そして、あなたのアドインに情報を送信するための、あなたのhtmlのために、送信できる、双方向の情報のやりとりです。このやり取りは、イベントを通して行われます。

あなたのアドインから、HTMLで関連付けられるJavaScriptまで、情報を渡します。あなたは、以下に示すように、あなたが、作成するPaletteオブジェクトのsendInfoToHTMLメソッドを呼び出します。あなたが、イベントを通して、2つの文字列を、JavaScriptコードに渡せる、2つの引数が、あります。最初の引数は、「action」引数として参照されます。そして、どんな種類のデータが渡されるか、指定するための修飾子として使用できます。2つ目の引数は、多くの場合、あなたが渡す必要があるどんな情報でも、含まれるJSON文字列のデータそのものです。それは、引数の標準的な使い方ですが、Fusionは、含まれますが、ただ、渡されるものについて想定無しに渡される、そして、作成されるデータのどんな検証も行いません。それで、あなたは、あなたが望むいずれかを方法で、それらを使うことを選択することができます。

retVal = palette.sendInfoToHTML('send', 'This is the data.')

HTML側でイベントを処理するために、あなたは、JavaScriptコードでハンドラを実装する必要があります。例を以下に示します。また、戻り値は文字列で、sendInfoToHTMLメソッドの戻り値として、アドインに戻されます。空の文字列が返されると、エラーとして解釈されます。それで、あなたは、常に、成功と失敗の両方の場合で、何かを返すべきです。

window.fusionJavaScriptHandler = {handle: function(action, data){
    try {
        switch (action) {
            case 'send':
                // 渡されたデータで、段落を更新します。
                document.getElementById('p1').innerHTML = data
                break;
            case 'debugger':
                debugger;
                break;
        }
    } catch (e) {
        console.log(e);
        console.log('exception caught with action: ' + action + ', data: ' + data);
        return 'FAILED';
    }
    return 'OK';
}};

HTMLから、あなたのアドインまで、情報を送信します。あなたは、adsk.fusionSendData関数を呼び出します。2つの引数があるという点で、これは、sendInfoToHTMLと極めて類似しています。;1つは、動作のため、そして、1つは、データのため。この場合、データは、Fusionで、PaletteオブジェクトのincomingFromHTMLイベントを処理することで、受け取る、あなたのアドインに渡されています。2つの引数の値は、イベント・ハンドラに渡されるHTMLEventArgsオブジェクトを通して呼び出されます。

下記は、いくつかのデータで、JSON文字列上で構築する、JavaScript関数の例です。そして、その次に、fusionSendDataメソッドを呼び出すことで、Fusionにそれを渡します。

function sendInfoToFusion(){
    // JSON文字列に、データを束にします。
    var args = {
        arg1 : "Sample argument 1",
        arg2 : "Sample argument 2"
    };

    // データを渡すために、Fusion関数を呼び出します。そして、アドインで、incomingFromHTMLイベントを起動します。

    adsk.fusionSendData('send', JSON.stringify(args));
}

if ui.activeCommand != 'SelectCommand':
    ui.commandDefinitions.itemById('SelectCommand').execute()

下記は、アドインによって実装されるハンドラの例です。それは、イベントを通して渡されるHTMLEventArgsオブジェクトによって、2つの引数を取得します。JSON文字列から情報を抽出します。そして、メッセージボックスに、結果を表示します。

class MyHTMLEventHandler(adsk.core.HTMLEventHandler):
    def __init__(self):
        super().__init__()
    def notify(self, args):
        try:
            htmlArgs = adsk.core.HTMLEventArgs.cast(args)            
            data = json.loads(htmlArgs.data)
            msg = "An event has been fired from the html to Fusion with the following data:\n"
            msg += '    Action: {}\n    arg1: {}\n    arg2: {}'.format(htmlArgs.action, data['arg1'], data['arg2'])
            _ui.messageBox(msg)
        except:
            _ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))

あなたは、Paletteサンプルプログラムで、この動作のすべてを確かめることができます。

Home 3D-CAD 2D-CAD 3D-モデラー 学生版 モデリング資料

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」