DATA チュートリアル 4:
Cellblock

イントロダクション

このチュートリアルでは、jit.cellblock オブジェクト(一般的には "cellblock" と呼ばれます)に焦点をあてます。jit.cellblock オブジェクトはデータの2次元マトリックスに対するビジュアルなインターフェイスを提供します。個々のデータポイント(あるいは、「セル」)には Max で使用される任意のデータ型を格納することができます。このデータは、変更や編集ができ、ユーザが直接に選択したり、パッチのプログラムから選択したりすることができます。

jit.cellblock オブジェクトはMax における特別なニーズを満たします。これは、Maxで使用される値を空間的、効率的に表示し、パッチ内での値の選択、編集を行なう機能を持たせるというものです。lcd オブジェクトと同様、jit.cellblock オブジェクトは非常に数多くのメッセージやアトリビュートの設定をサポートしています。このチュートリアルでは、その中でも最も役立つものをいくつか紹介しますが、高度な使い方においては、さらに多くのオプションを利用することができます。

構造に関するメッセージと設定

チュートリアルを開いて下さい。

このチュートリアルのパッチを見て下さい。組になったメッセージボックスと共に、グリッド(格子)状の表示があることがわかります。パッチの中央にあるグリッド(スプレッドシートによく似ています)が jit.cellblock オブジェクトです。jit.cellblock は内部に格納されたデータの2次元表示を行ないます。

jit.cellblock の構造に関する設定の多くは、プログラムからのコントロールによって操作することができます。例をあげると、rows と cols というメッセージに接続された2つのナンバーボックスがありますが、このナンバーボックスを使って、jit.cellblock に格納されている行と列の数の設定を変更することができます。表示領域に表示されているより多くの行や列を追加すると、自動的にスクロールバーが表示されます。

このオブジェクトの最初の行や列の色を変えると、別のタイプの構造を持たせることができます。この場合、この最初の行が、残りの行に対する「インデックス」あるいは「識別子」であることがわかりやすくなります。rowhead と colhead メッセージを使うことによって、この最初の値の使い方を変えることができます。ヘッダ領域のビジュアルな表示方法を変えた場合でも、データの使い方やデータの追加、変更を行なう機能は全く変わりません。このことは重要ですので、ぜひ覚えておいて下さい。

他にも、格納しているデータに影響を与えずに変更できる、表示に関するアトリビュートがあります。その1つの例は、grid アトリビュートです。grid がオンの場合、よく見慣れたスプレッドシートのような形でデータを表示します。grid がオフの場合、値の表示は、グリッド線による表のような形では行なわれません。グリッドによって区切られるのではなく、テキストや背景色によってデータの識別を行なうレイアウトを用いたい場合には、この方法が特に便利です。

より構造的な設定を操作することが可能です。オブジェクトのインスペクタを開くと、そのほとんどにアクセスすることができます。チュートリアルパッチにあるjit.cellblock オブジェクトのインスペクタを開き、Structure タブを選ぶと、パッチの中で使用しているメッセージに対応したアトリビュートの設定を見ることができます。さらに、ここにはデフォルトの列サイズと行サイズの設定もあります。これは、特に何も設定しない場合に使用される列の幅と行の高さの値になります。この設定を調整すると、その値に合わせてjit.cellblock のセルが動的に変化するようすがわかります。

他の表示方法に関する設定は、インスペクタの Appearance タブにあります。jit.cellblock の様々な要素の色は、カラーピッカーを使って設定できます。変更したい色をクリックすると、標準のカラーセレクタが表示されます。Default BackGround Color を選んで、色を明るい赤に変えてください。すべてのセルの背景色が変更され、それ以外の要素(グリッドの色、選択されているセルの色など)がそのまま変更されていないことに気がつくでしょう。

jit.cellblock オブジェクトのインスペクタの中にある値だけでなく、パッチの左側(1 と表示されています)を使って様々な設定に慣れてください。

値の格納と読み出し

jit.cellblock オブジェクトの構造的な設定の後は、セルの選択、セルへの値の格納、セルからのデータの取り出しを行なう必要があります。まず、セルの選択について見てみましょう。最も簡単なセルの選択方法は、セル自身をクリックすることです。これは、スプレッドシートを使う場合とほとんど同様です。新しくセルを選択すると、オブジェクトの左アウトレットから座標値(列、行の順序)が出力されることに気が付くと思います(これは Maxウィンドウに表示されるようになっています)。選択するセルをプログラムからコントロールしたい場合もあるでしょう。そのため、jit.cellblock オブジェクトは、選択する列と行を指定するアーギュメントを伴ったselect メッセージにも応答します。select メッセージボックスに接続されたナンバーボックスを使うと、jit.cellblock の選択範囲をコントロールすることができます。行と列を指定する数値が 0 から始まる点に注意して下さい。最初の行の最初の列にあるセルを選択するためには、select 0 0 というメッセージを送信します。

選択されているセルは、特定のメッセージの中では "current" として参照されます。そのため、次のナンバーボックスはset current というメッセージボックスを介して接続されています。このメッセージボックスは入力された整数を使い、選択されているセルの値をこの整数に変更します。値が格納されている任意のセルをクリックして下さい。オブジェクトの出力が先ほどと違うことがわかります。Max ウィンドウには、行と列を表す値だけではなく、そのセルに格納されている値が表示されます。

セルに格納されているデータを変更する場合、必ずしもセルを選択する必要はありません。次のメッセージボックスは、set x y 値... という構文を使って、オブジェクトに格納するデータをセットしています。set メッセージに続く2つの整数は、値を変更するセルの行と列を表しています。この座標値の次にあるデータが格納されます。データが整数、または浮動小数点数の場合、1つの要素(エントリ)だけが格納されます。セルの値としてシンボルやリストを格納することもできます。3番目のメッセージボックスをクリックすると、2 2 という座標のセルに "Here I am" というテキストが格納されます。もちろん、データを削除することもできなくてはなりません。これが clear メッセージの機能です。次のメッセージボックスでは clear 2 2 というメッセージを生成しています。これは先ほどセットしたテキストを消去するものです。

jit.cellblock オブジェクトが便利である理由の1つに、セルに格納されたデータの選択や操作に関するユーザオプションの組み合わせを数多く提供するということがあります。もちろん、手間をかけてセルの値をセットしてある場合には、ユーザによって(ついでに言えば、プログラムによってでも)設定した値を変更されたくないと思うでしょう。readonly アトリビュートを 1 にしておくと、値が変更されることを防ぎます。このアトリビュートをセットしておけば、値が変更されるという心配をせずに、jit.cellblock を使うことができます。

選択方法と出力のオプション

できる限り柔軟に扱うことができるように、jit.cellblock には、選択や出力に関するいくつかのモードがあります。選択モード(selmode というアトリビュートで設定します)のデフォルト設定は、1つのセルを選択するモード("one cell select" モードと呼びます)です。3 というセクションの左側の umenuを見ると、セルの選択には、それぞれ異なる6個のオプションがあることがわかります。

最初のオプション(オプション 0、"no selection")では、セルの選択をできなくします。これは、jit.cellblock オブジェクトを大きなラベルの集合として使用したい場合に便利です。オプション 1、"single cell select" はデフォルトの選択ハンドラで、1度に1個のセルだけを選択できます。次の2つのオプション(オプション2 と 3)では、1回のクリックで多くのセルを選択することができます。オプション 2("column select")は、任意の列のすべてのセルを選択します。オプション 3("row select")は、同様なことを行単位で行ないます。

5番目のオプション(オプション 4、"header select")は、やや複雑です。列や行のヘッダをオンにしてある場合、ヘッダにあたるセルをクリックすると、それに対応する列、または行のすべてのセルが選択されます。そうでない場合には、1つのセルだけが選択されます。これはスプレッドシートの動作と非常によく似ています。スプレッドシートでは、ヘッダには他の標準セルとは異なる特別な「選択のルール」があります。

最後のオプション(オブション 5、"in-place edit")では、jit.cellblock にデータを入力する簡単な手段を与えてくれます。任意のセルをダブルクリックすると、選択されたセルが持っている情報を編集したり、その情報に何かを追加したりすることができます。この方法はselect メッセージや set メッセージを使った場合より便利なものかもしれませんが、パッチによってこの編集操作をコントロールすることはできません。

これらのモードの中には複数のセルを選択するものがいくつかあります。そのため、「データがどのようなフォーマットで出力されるのか?」という疑問が生じます。jit.cellblock オブジェクトは、この答えとして、3つの出力モードを用意しています。これは outmode というアトリビュートで設定されます。モード 0、"individual output" モードでは、選択されたセルごとに、そのセルが持つメッセージを送信します。データを全く持たないセルのメッセージも出力されます。モード1、"output as one list" モードでは、空白でないセルの値を1つのリストにまとめ、1つのメッセージとして出力します。モード 2、"output as one symble" では、空白でないセルの値を1つのリストにまとめ、そのリストを1つのテキストシンボルに変換します。このモードは、jit.cellblock にテキストによる値が格納されていて、それを大きな「フレーズ」にまとめたい場合に、非常に便利です。

出力モードの動作をみるために、loader というサブパッチに接続された button をクリックして下さい。このサブパッチは、jit.cellblock オブジェクトをフォーマットし、0 から 99 までの数値を読み込ませます。また、jit.cellblock が "row select" モードに設定されるため、1回のクリックで数多くのセルを選択することができます。セルをクリックして行を選択して下さい。Max ウィンドウに、連続した10個のメッセージが表示されることに気付くと思います。これは選択されたセル1つ1つの値です。それでは、出力モードを "output as one list" に変更して、6列目をクリックして下さい。今度は、Max ウィンドウに表示された結果は1行になっています。これはメッセージが1つだけ作られたことを表しています。最初の2個の数値は行(この場合は無意味です)と列(jit.cellblock は 0 から値をカウントするため、この値は 5 になります)を示す値、続いて、その行のすべての値のリストになっています。

出力モードを "output as one symbol" に変更した場合、Max ウィンドウに表示される結果は全く変わりないように見えます。しかし、jit.cellblock オブジェクトに接続されたzl len オブジェクト(別のチュートリアルで詳しく説明します)の出力に注目すると、前のモードではメッセージが12個の要素を持っていたのに対し、このモードではメッセージが3つの要素しか持っていないことがわかるでしょう。

結び

jit.cellblock オブジェクトは、あらゆる型の 2D データを取り扱う、強力なツールです。そして、データはグリッド(格子)状のフォーマットで表示されます。ここでは、最も役に立つ2、3のコマンドについてのみ説明しました。より詳しい情報は、このオブジェクトに関するヘルプファイルやリファレンスドキュメントを参照して下さい。

参照

jit.cellblock 2次元データの格納と表示