016

Revolution でお絵描き 2 / 革命絵図師養成講座 中級
半透明のイメージオブジェクト
ドロワーを開ける
スタック内のイメージを他のイメージオブジェクトに移動
アプリケーションになっているスタックの変更を保存する

set the mainstack of stackname1 to stackname2
preOpenStack, openstack
drawer stack stackname {[at] left | bottom | right}
the openStacks
the blendLevel of image imagename, thumbPos of sb scrollbarname
put image imagename1 into image imagename2
the optionKey is down
save stack stackname


RR Player に 016.rev と入れてスタックをダウンロードしてください。
Revolution の開発環境がある方は、メッセージボックスに
go stack url "http://www.kenjikojima.com/runrev/handbook/download/016.rev"
とタイプしてリターンキーを叩く事でもダウンロードできます。

最近のRunrevバージョンでは、このスクリプトで働かないツールがあります。修正版は今のところ作る予定はありませんから、ご自分で工夫してください。

今回もお絵描きツールです。しかし前回の古典的お絵描きツールに、もう少しRevolution らしい要素を取り入れました。ひとつはイメージを半透明にして、トレイス機能を持たせて、トレイスの下絵となるイメージをドロワーから選ばせるようにしています。またそのドロワー内にツール類を置く事で、ツールの切り替えのクリックが利くようにしました。それとお絵描きのキャンバスウインドウをサブスタックにしたので、お絵描きの途中でアプリケーションを終了しても保存されます(保存に関して、このページの最後にまとめました) 。

016.revで取り入れた機能は、アイディアを取得するための、基本的なものだけですから、実際のRevolution Painter を作る場合は、直線ツールやブラシツールのサイズの選択など様々な可能性を加えて、さらに発展させることができるかと思います。


上にも書いたように、この図でメインに見えている左のウインドウはサブスタックです。ほとんど前回 015.rev のメインスタックと同じですから、015.rev を016.revのサブスタックとして取り込むことにしました。まず New mainstack で 016 というウインドウ名(メインスタック)のファイルを作ったら、メニューの File > Open Stack...から、015.rev をオープンします。この段階ではメインスタックがふたつあることになります。ここで 006 のサブスタックをクリエイトすると同じ方法で、



set the mainstack of stack "simplePainter" to "016"


と、メッセージボックからスクリプトを実行すると、simplePainter は 016 のサブスタックになります。混乱を避けるために、このスタックでは simplePainter2 というウインドウ名に変えました。もうひとつドロワーのためのサブスタックが必要ですから、tDrawer というサブスタックをメニューから作ります。



これで上図のように、アプリケーション ブラウザーに三っつのスタックが見えるようになります。006 でも書いたように、Revolution ではメインスタックそのものは保存できませんから、描いた絵を途中でスタック内で保存するには、サブスタックにしなくてはいけません。

ここでは メインスタック 016 には、変更の必要がないトレイス用の下図をテンプレイトとして扱って、 メインスタック 016 のカード1に置いています。



上図の drawing 1,2,3,whitePaper が、それぞれ下図の元絵となるテンプレイトです。このメインスタック 016 は、下図のためだけの収納スタックですから、スタックがオープンされた時に見えないよう、 メインスタック 016 のスクリプトエディターに措置を施しています。



on preOpenStack
set the vis of me to false
end preOpenStack

on openStack
open stack "SimplePainter2"
end openStack


preOpenStack で、このスタックを見えない状態にしてから、スタック "simplePainter2" を開きます。このあと close me としてスタック016 を閉じてもかまいません。これはひとつの方法ですが、不可視にはしないでウインドウサイズを小さく(100 x 100 とか)して、グローバルのマイナスポジション(たとえば -200,-200)に、アンカーとして置いたりする事もあります。メインスタックの内容が確認しやすいように、ここでは不可視にしてプラスポジションに置いています。このようにメインスタックをアンカーにしておくと、見えている全部のウインドウ(スタック)がユーザーによって閉じられても、アプリケーションを終了させたくない時などに使えます。注:実際には再びウインドウを開けたり、終了させるメニューが必要です。

スタック simplepainter2(ペアレントスタック)から、ドロワーを右側に引き出すスクリプトは

drawer stack "tDrawer" at right

ペアレントスタック から左側に引き出すのは

drawer stack "tDrawer" at left

ですから、スタック"tDrawer" が開かれているかいないかの判断をして、スタック simplePainter2 がスクリーンの中央より左側にあれば右側に開け、スクリーンの中央より右側にあれば左側に開けます。



on mouseUp
if "tDrawer" is not among the lines of the openStacks then
if item 1 of the loc of this stack <= item 1 of screenLoc() then
drawer stack "tDrawer" at right
else
drawer stack "tDrawer" at left
end if
if platform() is "MacOS" then set the label of me to the cCloseMe of me
else set the label of me to the cCloseWin of me
else
close stack "tDrawer"
if platform() is "MacOS" then set the label of me to the cOpenMe of me
else set the label of me to the cOpenWin of me
end if
end mouseUp



is among the lines of the openStacks で、現在開かれているすべてのウインドウ(スタック)のリストを得ることができるので、スタック tDrawer が開かれているかの判断ができます。the openStacks を開発環境で実行すると rev と付いた様々なスタック名が現れます。

016.rev では、ドロワーが開かれたらボタンレイベルを「ドロワーを閉じる」、ドロワーが閉じられていたらボタンレイベルを「ドロワーを開ける」となるように、ボタンのカスタムプロパティに日本語を置いて切り替えていますが、macintosh とwindows ではユニコードの扱いに違いが出るので、 platForm() でその切り替えをしています。(まだ Revolution日本語は未確定な部分も多いので、詳しい説明はしません)カードが開けられた時に、このボタンにmouseUp を送ってドロワーが開かれるようにしてありますから、開発環境でポインターツールを選んだままカードを開くと、mouseUpが行われないので、上に書いたスクリプトが働かないで、ボタンは文字化けになります。

Revolution ではイメージオブジェクトを半透明にすることができるので、the blendLevel of imagename を使ってトレイス機能にします。ボタン「ペーパーを半透明に」のスクリプトは以下、



on mouseUp
if hilite of me then
enable sb "tBlend"
set the blendLevel of image "myPainting" to thumbPos of sb "tBlend"
else
set the blendLevel of image "myPainting" to 0
disable sb "tBlend"
end if
end mouseUp



sb "tBlend" はスクロールバー です。ブレンドのレベルが 0 だとイメージを完全な不透明、100 の場合はまったくの透明です。


スクロールバー(スケール)にあるスクリプトは



on mouseUp
if the hilite of btn "blendOn" is true then
set the blendLevel of image "myPainting" to thumbPos of me
end if
end mouseUp




次にドロワー内にある部品の説明です。

前回の 015.rev はメインウインドウだけのお絵描きスタックでしたが、016.rev ではドロワーを付けたので、ペイントツール類はドロワーに移しました。015 でも少し触れたように、パレットかドロワーのウインドウツール類のあるスタック上(ウインドウ)だったら、マウスをペイントツールにしてもクリックが有効となります。つまり send in を使ったツールの切り替えの必要がありません。今回はそのsend in で使ったスクリプトを外しています。またクリックがはっきりわかるように、マウスダウンでアイコン(イメージオブジェクト) のボーダーを太くしています。

スタック内のイメージ(imagename1)を、スタック内にある他のイメージオブジェクト(imagename2)に移すのは、

put image imagename1 into image imagename2

で簡単にできますから、ドロワーの「トレイス」ボタンが選ばれていれば、スタック016 のイメージを、ドロワーにあるドローイングのアイコンクリックで、スタック simplePainter2 の下図 image "myPainting" に移します。また、ドロワーの「ぬり絵」ボタンが選ばれていれば、上にあるペーパー部分image "baseImage"に移します。

ドローイングのアイコンの下に 新規ペーパー(WhitePaper)として、ペーパー(キャンバス)の書きかえがあります。場合によって、上のペーパー(キャンバス)だけと、下図の白地に書き換えができるように、



if the optionKey is down then
put image tName of cd 1 of stack "016" \
into image "baseImage" of cd 1 of stack "simplePainter2"
end if



をグループのスクリプトに入れていますから、オプションキーを押しながら新規ペーパー(WhitePaper)をクリックすると、下図と上のペーパー(キャンバス) が共に白地になります。


スタックを保存する

何度か書いているように、Revolution ではメインスタックの変更は保存できませんから、サブスタックを保存するということになります。この仕様は始め少し戸惑うのですが、ほとんどの現代的なアプリケーションでは単独のウインドウ(スタック) という事はないので、始めの計画次第で問題なくすぐになれるかと思います。また創造という観点からは、マイナス面はプラスに切り替わることも多いので、いつでも多面的な思考が必要です。

016.rev ではスタック simplePainter2 が閉じられる時に、以下のスクリプトが働くようにして保存をします。



on closeStack
save stack "simplePainter2"
close stack "tDrawer"
end closeStack



これでスタック simplePainter2 は保存されますが、スタンドアロンにする時にもうひとつ大事なことがあります。これをしないと保存されません。



Standalone Application Setting のStacks にある「Move substacks into individual stackfiles」にマークを付けて、その下の「create folder for stackfiles:」にもマークをしてテキストボックスにフォルダー名をタイプします(図では data としました)。細かく言ったら「create folder for stackfiles:」にはマークしなくても良いのですが、この方がサブスタックがひとつのフォルダーに整理がされるので、使いやすくなるかと思います。

Mac OSX とWindows、Mac Classic とではスタンドアロンの作りに違いが出てきます。Mac OSX でスタンドアロンとして出来上がるファイルはアイコンひとつだけですが(この例ではファイル名 016)、Windows と Mac Classic ではサブスタック(この例では simplePainter2 と tDrawer) はフォルダー data の中に入った状態で作られます。

MacOSX では、サブスタックをアプリケーション 016 の中に取り込まれて、ひとつのファイルのように見えているのですが、OSX のDevelopper>Application>Utilities の Property List Editor のOpen からアプリケーション 016 を見てみると、中にサブスタックが入っているのがわかります。

これは004の「スタックが保存してあるフォルダーまでのパス」で、MacOSX の例外を作ったこととも関連あることなので、構造がわかれば 004のファンクション theFolderPath で the filename に ".app/Contents/MacOS/" が含まれるかを確認する理由もわかるります。


図:OSX の Property List Editor のOpen から見たアプリケーションのファイル構成



015 / 016 / 017

わかりにくい事がありましたら、遠慮なくメールしてください。
index@kenjikojima.com