Patcher オブジェクト

Patcher オブジェクトは、 Max パッチャーのJavascript 表現(Javascript で表される 「Max パッチャー」)です。パッチャー内のオブジェクト全体を通して、生成、修正、および繰り返し処理を行なうことができ、thispatcher オブジェクト等を使って行なうような、パッチャーへのメッセージ送信ができます。

現在、Patcher を得る方法は3つあります。その3つとは、コンストラクタを使う方法、jsthis の patcher プロパティにアクセスする方法(this.patcher という形でアクセスします)、Maxobj オブジェクトの subpatcher() メソッドを使う方法です。

Patcher コンストラクタ

var p = new Patcher(left,top,bottom,right);

left、top、bottom、right は、それぞれ、パッチャーウィンドウのグローバルスクリーン座標の左、上、下 、右 を表します。

var p = new Patcher();

デフォルトのウィンドウ座標として、100,100,400,400 を使います。

Patcher プロパティ

box (Maxobj, get)

パッチャーがサブパッチャーの場合、box プロパティはそれを含む Maxobj を返します。トップレベルのパッチまでたどり着くためには次のような方法を使います。

prev = 0; owner = this.patcher.box; while (owner) { prev = owner; owner = owner.patcher.box; } if (prev) post("top patcher is",prev.name);

count (Number, get)

パッチャー内のオブジェクトの数。

filepath (String, get)

ディスク上のパッチャーのファイルパス。

firstobject (Maxobj, get)

パッチャーにオブジェクトがある場合、これはそのリストの最初のものにあたります。Maxobj の nextobject プロパティを使うことによって、パッチャー内の全てのオブジェクトに対して繰り返し処理を行なうことができます。

name (String, get/set)

パッチャー名(これは、ウィンドウタイトルです。サブパッチャーの場合に表示されるブラケット([])がついたものではありません)。

locked (Boolean, get/set)

パッチャーのロック状態。Max のランタイムバージョンでは、このプロパティは読み取りのみ許可されます。

maxclass (String, get)

「パッチャー」を返します。

parentclass (String, get)

サブパッチャーの場合、親オブジェクトの Max クラス名を返します。トップレベルのパッチャーの場合は nil の値を返します。

parentpatcher (Patcher, get)

パッチャーがサブパッチャーの場合、親パッチャーを返します。そうでない場合は nil の値を返します。

scrolloffset (Array, get/set)

パッチャーウィンドウのスクロールオフセットを表す X/Y 座標の配列。

scrollorigin (Array, get/set)

パッチャーの固定された原点を表す X/Y 座標の配列

wind (Wind, get)

パッチャーに結び付けられたウィンドウの Javascript 表現。より詳しい情報は、後述の Wind オブジェクトのセクションを参照して下さい。

Patcher メソッド

Max から( thispatcher オブジェクトを介して)パッチャーへ送ることが可能な任意のメッセージを、js の中の Javascript から送信できます。

例:

p = this.patcher; p.fullscreen(1); // パッチャーをスクリーン全体に表示させます。 p.dirty(); // 編集可能なパッチャーを dirty (変更されていることを表します) // にします。

以下に示す Patcher メソッドは、やや使いやすいパッチャースクリプトの実装を提供します。上に示したように、Javascript の Patcher オブジェクトは、 thispatcher オブジェクトに送ることが可能な任意のメッセージを受信できるため、script メッセージを使ってパッチャーを書くこともできます。

newobject (classname,params)

パッチャーの中に、指定されたパラメータを使って Max クラス classname の新しいオブジェクトを作り、その表現形である Maxobj(下記参照)を返します。

:

a = patcher.newobject("toggle",122,90,15,0);

newdefault (left,right,classname, 追加のアーギュメント)

パッチャーの中に、指定されたパラメータを使って classname クラスの新しいオブジェクト を作り、その表現形である Maxobj(下記参照)を返します。

:

a = patcher.newdefault(122,90,"toggle");

newdefault() メソッドは、非ユーザインターフェイスオブジェクトを生成する場合、追加のアーギュメントを受け取ることができます。これは、生成されるオブジェクトのタイプイン・アーギュメントを表すものです。

:

a = patcher.newdefault(122,90,"pack", "rgb", 255, 128, 64);

connect (from_object, outlet, to_object, inlet)

パッチャーの中の(Maxobj 型の)2つのオブジェクトを接続します。outlet および inlet アーギュメントのインデックスは一番左のインレットまたはアウトレットを 0 として順に数えます。

:

p = this.patcher; a = p.newobject("toggle",122,90,15,0); b = p.newobject("toggle",122,140,15,0); p.connect(a,0,b,0);

hiddenconnect (from_object, outlet, to_object, inlet)

パッチャーの中の(Maxobj 型の)2つのオブジェクトを非表示のパッチコードで接続します。アーギュメントは 上記の connect メッセージと同じです。

disconnect (from_object, outlet, to_object, inlet)

パッチャーの中の(Maxobj 型の)2つのオブジェクト間にの接続を解除します。outlet および inlet アーギュメントのインデックスは一番左のインレットまたはアウトレットを 0 として順に数えます。

(上記の connect() の例の場合):

p.disconnect(a,0,b,0);

apply (function)

パッチャー内の全てのオブジェクトのために、個々のオブジェクトの Maxobj を引数として関数 functionを呼び出します。サブパッチャーに対しての再帰的な適用は行なわれません。次の例は、Max ウィンドウ内の個々のオブジェクトのクラス名を表示するものです。

function printobj(a) { post(a.maxclass); post(); return true; // iterfun は繰り返し処理を続けるために true をかえさなければ // なりません。そうでない場合は停止します} this.patcher.apply(printobj);

applydeep (function)

apply() と同様ですが、applydeep() はサブパッチャーの内部にも再帰的に適用されます(深いほうから適用されます)。,

applyif (action_function, test_function)

パッチャー内の全てのオブジェクトのために、個々のオブジェクトの Maxobj を引数として test_function を実行します。test_function が真を返した場合、Maxobj を引数としてaction_function が実行されます。

applydeepif (action_function, test_function)

applyif() と同じですが、applydeepif() はサブパッチャーの内部にも再帰的に適用されます。

remove (object)

オブジェクト object をパッチャーから削除します( 引数として Maxobj が渡されます)

getnamed (name)

与えられた name よって、パッチャー内の最初のオブジェクトを返します。name は、パッチャー内で Name...ダイアログによって指定されたローカル名で、sendreceive オブジェクトの名前ではありません。オブジェクトの名前は、Maxobj の varname プロパティでセットすることもできます。

getlogical (function)

パッチャーの個々のオブジェクトで、オブジェクトを Maxobj 引数として渡し、関数 function を呼び出します。関数が true を返した場合、繰り返し処理は停止し、getlogical() メソッドの値として Max オブジェクトが返されます。そうでない場合、getlogical() は nil の値を返します。

例:

// 左座標に負の値を持つオブジェクトを探索します。 function neg_left(a) { r = a.rect; // rect は配列として返されるプロパティです。 if (r[0] < 0) return 1; else return 0; } e = patcher.getlogical(neg_left); if (e) e.rect[0] = 0;

bringtofront (object)

オブジェクト object を、割り当てられている現在のレイヤ(バックグラウンドまたはフォアグラウンド)の前面に移動させます。Maxobj の background プロパティをセットすることによってレイヤを変更することができます。

sendtoback (object)

オブジェクト object を、割り当てられている現在のレイヤ(バックグラウンドまたはフォアグラウンド)の背面に移動させます。Maxobj の background プロパティをセットすることによってレイヤを変更することができます。