XPresso 基礎

レベル/ 対象者:中級/ CINEMA 4Dを使えて、読み書きができる人
対象ソフトウエア、プラグイン:CINEMA 4D R12

プログラムは文章である。読み書きができる人間なら誰にでも書ける。

冨士 俊雄/ gtofuji@gmail.com
章番号 題名 内容、及び関連する章 作成日/注記
801 1_XPressoを作る XPressoを作る、XPressoを止める、COFFEEノード、エクスプレッションエディタ、コンソール、Hello World!、1001章 2011.1.29
English Top

 

Step 1

XPressoを作る

 さてこれからXPressoについて勉強していきます。「XPresso」というのは、CINEMA 4Dに内蔵されているノードベースのプログラミング環境の名前です。とは言っても言葉で説明できるものではないので、実際にプログラムを組みながら少しずつ説明していきます。

 まず新規ファイルを作成し、ヌルオブジェクトを作成して下さい。このオブジェクトはプログラムとは関係ありませんが、XPressoは「タグ」の形を取るので、オブジェクトが一つもないと作れないのです。

 次にヌルオブジェクトを右クリックし、プルダウンメニューから「CINEMA 4Dタグ -> XPresso」を選択します。すると、オブジェクトの右にXPressoタグができ、同時にXPresso編集ウインドウが表示されるはずです。

図801-1

 さて、それではまずプログラムの教科書でよく使われる「Hello World!」を表示させてみましょう。とは言っても、普通の方法では面白くないので、CINEMA 4Dらしい方法で表示させます。オブジェクトマネージャに戻って、「オブジェクト -> スプラインプリミティブ」から「テキスト」オブジェクトを作成して下さい。そして、テキストスプラインオブジェクトをXPresso編集ウインドウにドラッグして下さい。

図801-2

 次に、テキストスプラインに文字を入力するために「定数」ノードを作成します。XPresso編集ウインドウ内で直接新しいノードを作るには、画面内の空いているところで右クリックし、プルダウンメニューから必要なノードを選択します。

 定数ノードは「新規ノード -> XPresso -> 一般」の中に入っています。また、先ほどドラッグアンドドロップで作成したノードも、実はこのメニューの中に入っている「オブジェクト」ノードと同じものです。

 それでは、定数ノードを選択してそのパラメータを属性マネージャに表示させます。そして、データタイプを文字に変更し、値のフィールドに「Hello World!」と入力します。

図801-3

 次に、この定数ノードの値をテキストスプラインオブジェクトに伝えます。そのためにはまず、ノードの左上をクリックして「オブジェクトの属性 -> テキスト」ポートを作ります(デフォルトでは、ノードの左側が青く表示され、入力ポートを追加できます。ノードの右側は赤く表示され、出力ポートを追加できます)。

図801-4

 そして、定数ノードとスプラインオブジェクトのポートの間をドラッグアンドドロップしてつなぎます。

図801-5

 この状態でエディタビューを見るとテキストスプラインが「Hello World!」に変っているはずです。

図801-6

 

 

Step 2

XPressoを止める

 それでは他にもいろいろなところに「Hello World!」を出してみましょう。

 まずXPresso編集ウインドウ内部に出します。これはXPressoのバグチェックをする時にとても便利です。まず「新規ノード -> XPresso -> 一般」から「結果」ノードを作成して下さい。

 次に属性マネージャでデータタイプを文字に変更し、定数ノードの出力ポートにつなぎます。すると結果ノードの中に「Hello World!」と表示されるはずです。

図801-7

 次に、テキストスプラインオブジェクト自体の名前も変えてしまいましょう。テキストスプラインを含んだオブジェクトノードの左側に「基本属性 -> 名前」ポートを作成し、定数ノードにリンクします。この状態でオブジェクトマネージャを見ると、テキストスプラインの名前が「Text」から「Hello World!」に変っているはずです。

図801-8

 もし変っていない場合は、XPresso編集ウインドウで「計算 -> XPressoを実行」コマンドを選択したり、オブジェクトマネージャの空いている部分をクリックしてみて下さい。するとXPressoが実行され、表示が更新されるはずです。また、小さなノードにポートを追加すると表示がはみ出します。このような場合は、Controlキーを押しながらノードのタイトル部分をダブルクリックすると適切にリサイズされます。

 

 さて、ここでちょっと実験をしてみましょう。オブジェクトマネージャでテキストスプラインオブジェクトを選択し、名前を「Hello World!」から元の「Text」に戻すのです。

 名前を入力してエンターキーを押すと、すぐに名前が「Hello World!」に戻るはずです。つまり、この名前パラメータはXPressoに支配されていて、オブジェクトマネージャからは変更できなくなっています。

 これはこれで不便です。もちろんXPressoを削除すればこの働きを消せるわけですが、XPressoを消さずに一時的に働きを止める方法はないもんでしょうか。CINEMA 4Dの中にはXPressoの働きを止める方法が何段階か用意されています。

 一番上にあるのが「編集 -> エクスプレッションを使う」のチェックを外す方法です。これで全てのエクスプレッションが一時停止します(XPressoやCOFFEE、プラグイン等はエクスプレッションに含まれます)。この状態でテキストスプラインに新しい名前を入力すると、その通りに変更されるはずです。

図801-9

 次に、オブジェクトマネージャでXPressoタグを選択して属性マネージャを開き、そこで「使用する」のチェックを外すと、個々のXPressoの働きを一時停止できます。

図801-10

  最後に、XPresso編集ウインドウでテキストオブジェクトノードを右クリックし、プルダウンメニューから「停止」をチェックすると、個々のXPressoノードの働きを一時停止できます。この操作は属性マネージャからでもできます。

図801-11

 これで安心してXPressoを使えるようになりました。

 

 

Step 3

COFFEEノード

 それでは、さらにまた別の方法を紹介します。それはCOFFEEノードを使う方法です。COFFEEノードを使うと、昔ながらにテキストでプログラムを書けます。一見難しそうですが、実は複雑なプログラムを作る場合は、こちらの方が遥かに見やすくて簡単です。また、実際問題としてCOFFEEノードを使わずに複雑なプログラムは作れません。

 CINEMA 4DにはXPressoタグ以外にも従来からの「COFFEEタグ」があり、ここでは全てテキストでプログラムを書きます。しかし、COFFEEタグの中ではThinkingParticlesを扱えません。したがって、XPressoの中で必要に応じてCOFFEEノードを使うというのが、現在のCINEMA 4Dにおいて最も簡単で強力なプログラム法なのです。

 それでは、XPresso編集ウインドウに戻って、空いている部分を右クリックし「新規ノード -> XPresso -> 計算」からCOFFEEノードを選択してください。

図801-12

 COFFEEノードにはデフォルトで3個のポートが付きますが、まずこれを消しましょう。ポートを消すにはポートをダブルクリックします。ポートにワイアが付いている場合は最初のダブルクリックでまずワイアが消えます。

 次にCOFFEEノードを選択した状態で属性マネージャを見ます。

図801-13

 ここでまず重要なのは、「属性マネージャのフィールドでプログラムを編集してはいけない」という点です。一応属性マネージャでもプログラムの編集はできます。しかし属性マネージャの仕様ではプログラムがカラー表示されず、またタブやリターンで次のフィールドに移動するようになっていて、非常にプログラムしにくいのです。そこで、左下にある「COFFEEエディタを開く」をクリックして下さい。すると「エクスプレッションエディタ」ウインドウが開き、属性マネージャに表示されていたプログラムがその中にも表示されるはずです。

図801-14

 エクスプレッションエディタは、元々COFFEEタグを編集するために作られたもので、この中では普通にプログラムを書けます。ただし、タグやノードを切り替えてもエクスプレッションエディタの中身は切り替わらないので注意して下さい。毎回属性マネージャで「COFFEEエディタを開く」ボタンを押す必要があります。ちょっと面倒ですが、いろいろな技術が歴史的に積み重なっているので仕方がありません。

 それではエクスプレッションエディタでの作業に移ります。まずデフォルトで付いていた3個のポートに対するプログラムを消去して下さい。

 次に以下の1行を追加します。

	println("Hello World!");

そしてエクスプレッションエディタの上にある「実行」ボタンを押すと、「コンソール」ウインドウに「Hello World!」と表示されるはずです。

図801-15

  コンソールウインドウが開いていない場合は、ウインドウメニューから選択して開いて下さい。また何も表示されない場合は、前のステップでXPressoを止めたままになっていないかどうかチェックして下さい。

 結果ノードと違ってコンソールウインドウは出力の履歴が残るので、プログラムのデバッグ時に重要な役割を果たします。

 

 また、COFFEEの働きを止めるには、止めたい行の先頭に「//」 を追加します。たとえば、プログラムを次のように変更すると、行の色が緑に変わり、実行ボタンを押してもコンソールウインドウには何も表示されません。

	//println("Hello World!");

図801-21

 止めたい部分が複数の行に渡る場合は、その部分を「/*」と「*/」で囲みます。

 

 

Step 4

COFFEEノードにポートを追加する

 最後に、COFFEEノードでポートと情報をやり取りする方法を説明しましょう。まずCOFFEEノードの左上をクリックし、文字ポートを作ります。次にポート名を右クリックし、プルダウンメニューから「名前を変更」を選択し、判りやすい名前に変更します。ここでは「n_in」としておきましょう。

 次に、このポートを定数ノードにつなぎます。これで、COFFEEノードは定数ノードから「Hello World!」という文字情報を受け取れるようになりました。

図801-16

  次に、エクスプレッションエディタに戻り、プログラムを次のように変更し、実行ボタンを押します。すると、コンソールにもう一行「Hello World!」が増えたはずです。簡単ですね。

	println(n_in);

図801-17

  次に、COFFEEノードの右側にも文字ポートを追加し、名前を「n_out」とします。そしてプログラムに次の1行を追加します。

	n_out= n_in;

 そして、このn_outポートを結果ノードにつなぎます。

図801-18

 すると結果ノードには前と同じように「Hello World!」が表示されたはずです。表示は「Hello World!」のまま変りませんが、この文字データはCOFFEEノードの中を通ってきたものです。ですからCOFFEEノードの中でプログラムを追加すれば自由に操作できます。

 たとえばプログラムを次のように変更すれば、結果ノードの表示は「Hello World + COFFEE」に変化したはずです。ここで「stradd()」は文字を追加する関数です。

	n_out= stradd(n_in, " + COFFEE");

図801-19

 また、プログラムを次のように変更すれば、結果ノードの表示は「12」に変ります。12は「Hello World!」の文字数で、「sizeof()」は文字数を調べる関数、「tostring()」は整数データを文字データに変換する関数です。

	n_out=	tostring(sizeof(n_in));

図801-20

 たくさんあるCOFFEEの関数を憶えるのは大変だと思うでしょうが、憶える必要は全くありません。その度にマニュアルを調べればいいのです。私もマニュアルを調べながらこのテキストを書いていますが、世の中そんなもんです。また、マニュアルを読んでも判らないことはどんどん掲示板に質問しましょう。

 COFFEEのマニュアルは以下のページから入手できます。

http://www.maxon.net/en/support/plugin-cafe.html