vieweditattachhistorytopchangessearchhelp

サブモーフ化とスタックなど

そろそろサブモーフ化を無視して説明するのが難しくなってきました(笑)。

サブモーフ化はドロー系ツールにおけるグループ化とよく似た概念です。ちょっと違うのは、親子(オーナーとサブモーフ)の関係がはっきりしていることでしょうか。これは、NewtonScript やそのベースであり、Morphic フレームワークのオリジナルが開発された環境としても知られる Self の _parent スロットについて理解しているとなぜそうした仕組みが必要なのかがピンとくるかも知れません。ご存じなければこの記述は無視してください。--sumim
- 2002-11-27, 09:48:15

この上下関係を明示的にするために、残念ながら、サブモーフ化はグループ化と違って「複数選択後にグループ化宣言」というような単純な手続きではできません。いちいちオーナーを定めてやる必要があります。また、グループ化の際、オブジェクトの前後関係は自由にできますが、サブモーフ化の場合、サブモーフはオーナーの必ず前面に来る、という制限があります。たとえば、犬の胴をオーナーに、脚をサブモーフにすると、かならず脚が前に来てしまう…という欠点があります。--sumim - 2002-11-27, 09:53:38

External Image External Image
こうしたいのに… こうするしかない


まあ、これは疑似胴モーフを用意することで回避できますが、いずれにせよちょっとした工夫が要求されることがある…ということを頭の片隅に置いておいてください。--sumim - 2002-11-27, 10:01:40

サブモーフ化
1)オーナーとサブモーフと言う親子(上下)関係が存在する.
なので,「このモーフはこのモーフの子だよ」と示してあげる事が「いちいちオーナーを定めてやる必要と言うことだと理解しました.
2)サブモーフ化の場合,サブモーフはオーナーの必ず前面に来る,と言う事ですが,一つのオーナーに複数のサブモーフがあった場合,サブモーフ同士の前後は調整出来るのでしょうか?--人狼 - 2002-11-27, 10:00:55

サブモーフ同士の前後は調整出来るのでしょうか?
できます。赤ハローメニューにsend to back とか bring to front とかがありましたよね?--sumim
- 2002-11-27, 10:03:56

>できます。赤ハローメニューにsend to backとかbring to front
了解です.前後関係の制限はオーナーとサブモーフの間だけなんですね.

そう言えば、ペイントツールをやっていませんでしたけど、これ、大丈夫ですかね…? いや。けったいな機能もあるのでやっておいたほうがよさそうですね。--sumim - 2002-11-27, 10:06:33

ペイントツール…遊んだ程度なので,よく判っていないと思います.--人狼 - 2002-11-27, 10:09:23

External Image

残念ながら、ここは“モード”に入る必要があります(笑)。ご存じのように、Navigator フラップの刷毛アイコンをクリックすると、ペイントモードを起動できます。--sumim - 2002-11-27, 10:12:24

External Image

起動すると、既存のデスクトップは色が薄くなってそれと分かるようになります。ペイントボックスと呼ばれるパレットは枠部分をドラッグすると自由な場所に移動できます。もちろんこいつもモーフなので青クリックで選択して黒ハローでピックアップしたり茶色ハローでドラッグして移動させても構いません。--sumim - 2002-11-27, 10:16:26

ツールは4つ。デフォの刷毛と、閉じた領域を塗りつぶすペンキ缶、カラーピッカー、消しゴムです。消しゴムは透明色の特殊な刷毛ツールと思えばよいでしょう。刷毛と消しゴムの大きさは、ツール選択パネルの下の6つの円形で指定できます(ただし消しゴムツールの形は刷毛とほぼ同じ大きさの正方形)。この円形は現在先駆されている色のインジケータにもなっています。色は右下のカラーチャートから選択できます。no color で透明(消しゴムツールと同じ効果)を選ぶことができます。選択した色は下の選択色履歴パレットに追加されるので、あとで同じ色で塗りたいときに便利です。もし追加されないときは、カラーピッカーを使って描画ずみの絵から採取します。--sumim - 2002-11-27, 10:20:52

Undo で直前の作業をキャンセルできます。Clear ですべてを消去することが可能です。--sumim - 2002-11-27, 10:25:50

左下のスタンプトレイは、通常のペイントソフトにおける刷毛先の変更/編集機能と同等の機能ですが、選択と複製の機能も兼ねています。トレイを開いたときに現われる空の矩形の上にあるスタンプアイコンをクリックすると画面の一部を選択するモードになるので、ここでドラッグして指定した領域に描かれたものが刷毛先になります。ペイントモードの次回起動時には保持されないので、一次的なものと考えたほうがよいでしょう。--sumim - 2002-11-27, 10:31:55

スタンプトレイの右側のトレイは、基本図形を描くためのトレイです。…とここまで書いて基本図形モーフの説明をするのを忘れていたことに気付く罠(^_^;)。ということで、基本図形モーフの説明をしてから戻ってきましょう。階層がどんどん深くなる…(笑)--sumim - 2002-11-27, 10:33:50

ペイントモードの起動はOKです.言われるまで気付きませんでしたが,確かに既存のデスクトップは色が薄くなりました.ペイントボックスの移動等はOKです.青クリックも色々やってみました.copyしてみたり(笑)--人狼 - 2002-11-27, 10:32:38

さすがにコピーすると誤動作しますが、まあ、普通に動くのはたいしたものですよね。さすがオブジェクト指向…と←本当か?(笑)。ちなみに、既存のデスクトップを白っぽくしているのもモーフですので、複製による誤動作でうまくモードからぬけれないときは、青クリックで選択して削除してください。--sumim - 2002-11-27, 10:36:50

いや,さすがに不安だったので動作まではさせてないです(笑)とりあえずnew morph...from paste bufferってやったらどうなるかなぁ…と.ちゃんとペースト出来たのでびっくり.でも「モード」だとおっしゃっていたので,モードに入らずに使う恐怖に勝てずに何もしないで削除しちゃいました.
>既存のデスクトップを白っぽくしているのもモーフ
了解しました.--人狼 - 2002-11-27, 10:44:52

UndoClearも試してみました.これもOKです.--人狼 - 2002-11-27, 10:34:57

スタンプトレイも試してみました.一時的な物である事も確認しました.で,基本図形ですね.階層が深くなってきてますね(^^;--人狼 - 2002-11-27, 10:36:32

画面右手と上にある赤い玉は、それぞれ、拡大縮小と回転をさせるためのハンドルです。元の画面に戻ってからもできますが(ベクター情報)、こちら(ペイントモード中)はラスター情報で拡大縮小および回転を行ないます。--sumim - 2002-11-27, 10:39:46 で追記。--sumim

>こちらはラスター情報で拡大縮小および回転
は元の画面での拡大縮小と回転がラスター情報で行われるのですよね.ペイントモードの中でベクターですか?--人狼 - 2002-11-27, 10:50:08

ペイントモードの中でベクターですか?
いや。だから、ベクターではなくラスターだと…(^_^;)。黄色ハローと青ハローはベクターです。--sumim
- 2002-11-27, 10:54:57

>いや。だから、ベクターではなくラスターだと…
了解しました.失礼,「こちら」の意味を取り違えていました.ペイントモードではラスター,元の画面の黄色ハローと青ハローがベクターですね.--人狼 - 2002-11-27, 11:00:21

絵を描き終わったら Keep ボタンで終了です。気に入らないときは Toss することもできます。再編集は、スケッチモーフを選択したとき右端に現われる鉛筆ハローのクリックで再びペイントモードに入れます。このとき Toss するとペイントモードに入ってからの編集をキャンセルしてモードに入る前の状態に戻すことができます。--sumim - 2002-11-27, 10:41:43

Keepボタンで終了.Tossボタンは…おぉっ,こう言う動きなんですね.全部無かった事にして終了.しかも再編集時には再編集した分だけ.かしこい.--人狼 - 2002-11-27, 10:52:12

基本図形モーフと言っても多角形モーフだけですが、も、一気にやってしまいましょう。Line、Polygon、Curve、Star はいずれも PolygonMorph の仲間たちです。shift-クリックでハンドルが現われるのでそれで屈折点などの制御を行なえます。--sumim - 2002-11-27, 10:45:04

External Image

でも「モード」だとおっしゃっていたので
実は、これ。モードに見せかけてモードではないんですよね(笑)。そんなヤツです、Squeak ってやつわ(笑)。--sumim
- 2002-11-27, 10:47:49

>Line、Polygon、Curve、Star はいずれも PolygonMorph の仲間たち
あれ?Lineと言うのはどこにあるのでしょう?
黄色い○のハンドルは頂点移動,緑の▲のハンドルは頂点作成ですよね.Starを五芒星から六芒星にする事はできないみたいですね.--人狼 - 2002-11-27, 10:58:18

Polygon や Curve では黄色いハンドルは隣の黄色いハンドルに重ねると屈折点を削除できます。最低2つは残しておく必要があります。ちなみにハンドルが2つの Polygon が Line です。緑の三角は、屈折点を増やすときにクリックします。Line も Polygon になります。星だけ特殊で、腕の先の黄色いハンドルで大きさを変えられます。--sumim - 2002-11-27, 10:59:03

>Polygon や Curve では黄色いハンドルは隣の黄色いハンドルに重ねると屈折点を削除
やってみました.2つを残すと言うのは端点ですね.2個でLineだと.OKです.やはり星だけ特殊なのですね.六芒星描きたかったのに(笑)--人狼 - 2002-11-27, 11:12:52

Lineと言うのはどこにあるのでしょう?
cmd-o もしくは、デスクトップメニュー → obujects で呼び出すことができる Object Catalog → Basic 2 から引き出せます。--sumim
- 2002-11-27, 11:01:47

>モードに見せかけてモードではないんですよね
今はまだ深く考えるのはやめておきます.混乱しそう(汗)--人狼 - 2002-11-27, 11:02:00

いや、そんな複雑な話ではありません。ペイント“モード”に見えるモノは、実は、後ろが白っぽく見えるシート状のモーフをかぶせてペイントボックスモーフを表示しているだけで、それらを取り除いてしまえば(もしくは大きさや位置を変えれば、無視して作業は進められる。つまり“モード”でもなんでもない…)ということです。--sumim - 2002-11-27, 11:04:17

>後ろが白っぽく見えるシート状のモーフをかぶせてペイントボックスモーフを表示
あ,そうなんですか.ほんとだ.白っぽく見えるところを青ボタンでクリックしたらハローが.ここで削除すると…さっきデスクトップにパレットをペーストした時と同じ感じですね.
なるほど,大きさや位置を変えたら作業は進められますね.--人狼 - 2002-11-27, 11:10:16

>Object Catalog → Basic 2
ありました.お手数をおかけしました.他にも色々とあるんですね.これらの一部がSuppliesに収められているんですね.--人狼 - 2002-11-27, 11:03:39

そうです。実はここ(Object Catalog)にあるのも“全部”ではないんですが(笑)。--sumim - 2002-11-27, 11:05:02

>ここ(Object Catalog)にあるのも“全部”ではない
ありゃ,そうですか.でも,とりあえずこれで,フラップの中に見当たらないオブジェクトはここに探しに行けます.それで無ければまたご質問させて頂くと.--人狼 - 2002-11-27, 11:14:52

で、ペイントツールに戻って、基本図形トレイでいろいろな基本図形を描くことができます。概してその描画方法は一般的ですが、多角形ツールだけはなぜか(笑)モーフのそれの編集方法を踏襲しています。--sumim - 2002-11-27, 11:14:00

これでサブルーチン、終了でしょうか(笑)。オブジェクト指向なのにすっかり構造化してますな(^_^;)。--sumim - 2002-11-27, 11:14:36

基本図形をペイントツールで描いてみました.多角形ツールで描かれた図形の編集もOKです.一点判らないのが,全て塗りつぶしになっていますが,枠だけ描いて塗らない,と言うのは出来ないでそうか.これが判ればサブルーチン終了です(笑)--人狼 - 2002-11-27, 11:19:46

原則、塗りつぶしです。no color 選択時に枠だけを描くことができるようです。直線は必ず色を指定する必要があるようです。各図形の枠の太さは刷毛の大きさに比例しますが、多角形と星には反映されないようです。色の枠が必要なら塗りつぶすか直線ツールでなぞれ…と、そういうことでしょうな(ぉぃ!--sumim - 2002-11-27, 11:25:18

了解致しました.試してみました.無事,サブルーチン終了です.--人狼 - 2002-11-27, 11:27:19

では、サブモーフ化、続けます。サブモーフ化するにはオーナーとサブモーフを決めます。ここでは、Rectangle と Ellipse をドラッグ&ドロップして用意していただきましょう。Rectangle をオーナーにしたいのでちょっと大きめにしておきます。--sumim - 2002-11-27, 11:36:49

External Image

両者をちょっと重なるように(しかしその位置で Rectangle が前面に来ても Ellipse を完全に覆い隠してしまわないように)配置し、それぞれをクリックするとそれぞれがピックアップされて、前面に来ることを確認します。これがサブモーフ化されていない状態です。--sumim - 2002-11-27, 11:43:02

次に、Ellipse の中心部分が Rectangle の領域内に含まれるように配置します。この状態で Ellispe を青クリックで選択し、赤ハローメニューから embed into → Rectangle を選びます。これで、サブモーフ化が完了です。サブモーフ化されると、クリックでのピックアップができなくなります。青クリックでの選択も同様です。選択するには2回以上同じ場所でクリックするか、shift-クリックする必要があります。--sumim - 2002-11-27, 11:45:11

サブモーフ化されてない状態を確認した上で,サブモーフ化しました.ピックアップできなくなる事,青クリックの選択が2回以上のクリックがshift-クリックも確認しました.shift-クリックの方が判りやすいです.--人狼 - 2002-11-27, 11:53:10

サブモーフ化されたモーフは動きを制限されます。茶色ハローでドラッグすると、その移動可能範囲が分かると思います。逆に、この移動可能範囲内に置かれていないと、先ほどの embed into のサブメニューに Rectangle は現われません。ちなみに、Rectangleと併記されていた PasteUpMorph とはデスクトップのモーフとしての名前です。world と名付けられたり呼ばれることもあります。--sumim - 2002-11-27, 11:47:09

動きの制限も確認しました.
>この移動可能範囲内に置かれていないと、先ほどの embed into のサブメニューに Rectangle は現われません
なるほど.そう言う事なのですね.これで納得です.サブモーフ化した状態のまま,Rectangleを小さくして再度Ellipseを移動しようとすると,Rectangleへピタっとくっつくんですね.
>PasteUpMorph とはデスクトップのモーフとしての名前
了解です.なぜ,デスクトップのサブモーフ化…と言う疑問は既に解決されていました(苦笑)--人狼 - 2002-11-27, 11:57:05

移動の際に黒ハローに触れなかったのは理由があります。実は黒ハローはサブモーフの移動には使えません。黒ハローでピックアップすると同時にサブモーフ化は解除されます。従って、サブモーフ化の解除には2つの方法があることになります。ひとつは、改めて PasteUpMorph のサブモーフ化する(換言すれば、通常はデスクトップにドロップしたモーフは、無条件でデスクトップのサブモーフになっていたことになります)か、黒ハローでピックアップして適当な場所でドロップする…と。--sumim - 2002-11-27, 11:49:44

>黒ハローでピックアップすると同時にサブモーフ化は解除
なるほど.サブモーフ化のお勉強前は同じに見えたのですが,実はこう言うからくりだったのですね.
2つの方法をご呈示頂きましたが,本質としてはどちらも等しくデスクトップのサブモーフにする,と言う事かと思います.どちらか自分にとって操作しやすい方を選んで差し支えないのでしょうか.--人狼 - 2002-11-27, 12:23:09

デスクトップのサブモーフ化されていたのに、黒ハローは使えた。「黒ハローはサブモーフの移動には使えない…」は矛盾していないか? と訊かれそうなので答えておくと(笑)、たしかにいったんはデスクトップのサブモーフ化を解除されますが、ドロップする先はいずれにせよデスクトップなので、最初と最後を見るとデスクトップにおけるサブモーフ化は解除されなかったことになる、とでも解釈していただければ幸いです。--sumim - 2002-11-27, 11:51:59

>最初と最後を見るとデスクトップにおけるサブモーフ化は解除されなかった
と言う事ですが,なぜドロップするとサブモーフ化される…のかも説明されてしまっています.う〜ん,疑問の感じ方のパターンが読み取られてしまったのでしょうか(汗)--人狼 - 2002-11-27, 12:25:23

さて、先ほどはサブモーフ化予定のモーフにメッセージを送って(そう。メニューの実行はそのモーフに対するメッセージの送信にほかなりません)サブモーフ化しましたが、逆も可能です。オーナーのほうに細工をして別のモーフをそのサブモーフ化する方法があります。それは、オーナー、この場合 Rectangle を選択して赤ハローメニューの accept dorps オプションを設定しておきます。これで、Rectangle の上でドロップされたモーフは無条件でサブモーフ化されるようになります。サブモーフ化がすんだら、このオプションは解除しておきます。--sumim - 2002-11-27, 11:55:27

>メニューの実行はそのモーフに対するメッセージの送信にほかなりません
大事な事ですね.当たり前と言えば当たり前なのでしょうが…当たり前過ぎて失念しないように…と.
accept dorpsオプションを設定
なるほど.オーナーの方で「さぁ,サブモーフになりたい人,いらっしゃい!」と言うのもありなんですね.--人狼 - 2002-11-27, 12:31:37

こまかいことを言うと、この accept drops オプション、デスクトップのそれも設定状態になっています。あと、通常のサブモーフでは青クリックによる選択や黒ハローによるピックアップは使えないのに、なぜデスクトップでは可能か…という点については疑問はありませんでしたか?(^_^;) それはデスクトップの役割りを果たすモーフに特殊な細工がしてあるからなのです。オブジェクトの世界はなんでもありなので、蓋を開けてみればたいしたことはありませんね(笑)。--sumim - 2002-11-27, 12:20:03

>通常のサブモーフでは青クリックによる選択や黒ハローによるピックアップは使えないのに、なぜデスクトップでは可能か…という点については疑問はありませんでしたか?
見透かされてますでしょうか(^^;
このご説明で,黒ハローでデスクトップにドロップした時にサブモーフ化される理由は判りました.
>なんてことはありませんね
赤ハローのメニューの中に,きっとそんな設定があるのでは.探してみよう.

>デスクトップの役割りを果たすモーフに特殊な細工がしてあるから
ありゃ,そういうオチですか(苦笑)--人狼 - 2002-11-27, 12:35:30

当たり前過ぎて失念しないように…と.
よいお心掛けだと思います。誰にどんなメッセージが送られていて引数はなにかなぁ…などと考える癖を付けておくと、いろいろなもの(中で行なわれているメッセージ送信の様子)がバンバン見えてくるようになります。まあ、それは追々(でもじき…<まだ言うか!(笑))ですが。--sumim
- 2002-11-27, 12:34:41

>誰にどんなメッセージが送られていて引数はなにか
はい,そう言う癖を付けていきたいと思います.つまるところは,オブジェクトとメッセージなわけですから,メッセージについて考える事は大事ですね.
>それは追々(でもじき…<まだ言うか!(笑))
追々…と言いながら私の事ですからうっかり地雷を踏みそうです(笑) - 2002-11-27, 13:04:35

せっせと踏んでください(笑)>地雷

さて、サブモーフのレイアウトを予定していたのですがちょっと変えて、スタックを先にやっつけておきましょう。人狼さんはハイパーカードは?--sumim
- 2002-11-27, 13:23:00

私は地雷を踏むつもりではないのに,なぜか進んだ先には地雷があった,と言う事が多いです.危険察知能力が退化しているとしか思えません(苦笑)

スタック(=積んでおく.メモリースタックとか?)ですね.ハイパーカードはスクリプトを組んだ事はありません.(言語仕様も存じません)--人狼 - 2002-11-27, 13:28:10

では、まあ、一般論で行きましょう。

よろしくお願いします.--人狼 - 2002-11-27, 13:39:22

サブモーフ化を使って、いろいろな表現が可能になります。モーフをパーツに組み込むタイプのブック(って、BookMorph とそのまんま)なんかもそうです。--sumim
- 2002-11-27, 13:35:49

External Image

このモーフは右手の◇をクリックして編集状態にすると、平たく言うと accept drops が設定されてドロップインしたモーフがどんどんサブモーフとして追加されます。ちなみに + ボタンを押すと新しいページが追加され、再び◇をクリックすると閉じてドロップインを受け入れなくなります。これで、>ボタンなどを押させて閲覧させようという実にシンプルなものです。--sumim - 2002-11-27, 13:44:37

試してみました>BookMorph
色々とやってみました.うっかりBookMorphまで追加してしまいました.追加したBookMorphにも(当たり前ですが)色々と追加出来ますね.--人狼 - 2002-11-27, 14:00:16

サブモーフ化機構をそのまま応用しただけなので、なんか自分でも簡単に作れそう…と思えてしまいそうな作りですよね(笑)。まあ、そう思わせるのも思惑のひとつかもしれませんが、基本的に面倒くさがりやでもそこそこのソフトが作れてしまう…とういのが Morphic のいいところ(でもあり、悪いところとも(笑)。たとえば、同じ BookMorph 系で Supplies にまで入ってる TabbedPalette なんか、なんじゃこりゃ的仕上がりで、実際、使いもんになりませんからね(^_^;))かと。--sumim - 2002-11-27, 14:08:36

>なんか自分でも簡単に作れそう…と思えてしまいそう
いやいや,まだそこまで思えないですよ〜(^^;「どうなっとるんだろう?」と言う興味津々状態です.
>TabbedPalette なんか、なんじゃこりゃ的仕上がり
今一つ使い方が判らないです.いじくってみたんですが…--人狼 - 2002-11-27, 14:19:24

いや。私もはっきり言って分かりません(笑)。--sumim - 2002-11-27, 14:25:48

この BookMoprh をもう少し進化させたのが StackMorph です。BookMorph ではバックグラウンドは色しか指定できませんでしたが、バックグラウンドにテンプレート的なものを配置しておいて、カードレイヤーにはデータだけを置くと、そんな仕組みになっています。--sumim - 2002-11-27, 14:13:29

External Image

BookMorph と同様に、パーツをドロップインしてから、サブモーフ化されたそのモーフを選択してその赤ハローメニューから put onto Background を選択します。すると、そのモーフは、新しく作ったページにも自動的に現われるようになります。カードに置かれたモーフか、バックグラウンドに置かれたモーフかは § ボタンを押している間、色分けされた枠で表示されます。--sumim - 2002-11-27, 14:18:54

StackMorphのbackgroundは色々と応用が利きそうです.§を押している間,緑の枠でbackgroundのオブジェクトが囲まれました.--人狼 - 2002-11-27, 14:48:55

TextMorph の場合はさらに、各ページで別の文字列を保持するオプションを利用できるので、データベースのフィールド代わりになります。--sumim - 2002-11-27, 14:26:59

>TextMorph の場合はさらに、各ページで別の文字列を保持
不思議ですねぇ.TextMorphのインスタンスは各ページ毎に存在しているんでしょうか.--人狼 - 2002-11-27, 14:53:28

External Image

ハイパーカードにあまりファミリアでないなら、スタックはこの程度でよいでしょう(笑)。--sumim - 2002-11-27, 14:28:55

そうそう。忘れていました。Supplies の Next Page や Previous Page ボタンは、これら BookMorph タイプのモーフのサブモーフにすると機能します。主に StackMorph でバックグラウンドに置き、上のコントロールバーを消した状態でもカードの行き来ができるようにするためのものです。--sumim - 2002-11-27, 14:30:35

>Supplies の Next Page や Previous Page ボタンは、これら BookMorph タイプのモーフのサブモーフにすると機能
あれ?普通にドロップインするだけで,サブモーフ化されるのですよね?ボタンをドロップインするだけでは機能しないのでしょうか?--人狼 - 2002-11-27, 14:59:17

あ、すみません。これらのボタンは、BookMorph でしか機能しないみたいです。使えないじゃん…(^_^;)。--sumim - 2002-11-27, 15:03:26

>BookMorph でしか機能しないみたい
ありゃ.BookMorphでは機能しました.
>使えないじゃん
各ページにドロップインしなきゃならんすね.--人狼 - 2002-11-27, 15:06:13

ですね。いや、ちょろっと変えると動いたりするんですが、それはまた別の機会に。--sumim - 2002-11-27, 15:16:49

では、次。行きましょうか。--sumim - 2002-11-27, 15:17:29

このページを編集 (26994 bytes)


Congratulations! 以下の 1 ページから参照されています。

This page has been visited 2139 times.