チュートリアル - ビットマップ ペイント ツールの開発 - 基本ユーティリティ

チュートリアル > ビットマップ ペイント ツールの開発 - 基本ユーティリティ

高機能バージョンのすべてのオリジナル コードは 1 時間足らずで開発されたもので、あらゆる種類のアプリケーションのプロトタイプ作成に関する、MAXScript の柔軟性を示すものです。

以下は、基本的な例です。

全体の流れ:

ロールアウトからダイアログ ボックスを作成する、簡単な MacroScript を開発します。

ロールアウトには、ビットマップの UI コントロールだけを含めます。

ペイントは、マウスの左ボタンを押してビットマップ内でマウスをドラッグすることによって行います。

ブラシは単一の黒のドットです。 マウスを速く動かすと、点線状のストロークになります。

スクリプト:

macroScript MicroPaint category:"HowTo"
(
global MicroPaint_CanvasRollout
try (destroyDialog MicroPaint_CanvasRollout) catch()
local isDrawing = false
local bitmapX = bitmapY = 512
local theCanvasBitmap = bitmap bitmapX bitmapY color:white
 
rollout MicroPaint_CanvasRollout "MicroPaint"
(
 bitmap theCanvas pos:[0,0] width:bitmapX height:bitmapY bitmap:theCanvasBitmap
 fn paintBrush pos =
 (
  setPixels theCanvasBitmap pos #(black)
  theCanvas.bitmap = theCanvasBitmap
 )
 on MicroPaint_CanvasRollout lbuttondown pos do
 (
  isDrawing = true
  paintBrush pos
 )
 on MicroPaint_CanvasRollout lbuttonup pos do isDrawing = false
 on MicroPaint_CanvasRollout mousemove pos do if isDrawing do paintBrush pos
)
createDialog MicroPaint_CanvasRollout bitmapX bitmapY
)

ステップごとの解説

macroScript MicroPaint category:"HowTo" (

MicroPaint という macroScript を定義します。

global MicroPaint_CanvasRollout

前のセッションからのダイアログ ボックスを閉じることができるように、ダイアログ ボックスとして使用するロールアウトの変数をグローバル変数として定義します。

ローカルおよびグローバル変数

try(destroyDialog CanvasRollout)catch()

前のセッションからのダイアログ ボックスがあれば、そのダイアログ ボックスを閉じます。ダイアログ ボックスがない場合は、try()catch() のエラー トラップでエラー メッセージを回避します。

Try 式

local isDrawing = false

このローカル変数は、描画を有効にするためのフラグとして使用されます。変数が false の場合、mousemove イベント ハンドラは描画を行いません。マウスの左ボタンを押すと、この変数は true に設定され、ボタンを離すまで描画が行われます。

BooleanClass 値

local bitmapX = bitmapY = 512

これらのローカル変数には、ペイントするビットマップのサイズが入ります。値を変更するだけでツールのサイズも変更され、異なるキャンバス サイズ上にペイントできます。

local theCanvasBitmap = bitmap bitmapX bitmapY color:white

この変数には描画するキャンバスが入ります。400 x 400 ピクセルの白いビットマップに初期化されます。

ビットマップ値

rollout MicroPaint_CanvasRollout "MicroPaint" (

ビットマップのキャンバスのあるダイアログ ボックスを定義するロールアウトです。

bitmap theCanvas pos:[0,0] width:bitmapX height:bitmapY bitmap:theCanvasBitmap 

ビットマップのユーザ インタフェース コントロールです。ロールアウトの左上隅に位置を合わせ、400 x 400のビットマップのキャンバスを表示します。

ビットマップ

注:

bitmap という名前のコンストラクタは 2 つあります。 1 つはここで使用されるユーザ インタフェース コントロールで、もう 1 つは 2 行上で使用されているビットマップ値のコンストラクタです。MAXScript では、コンテキストに基づいてどちらであるかを判断します。 ロールアウト定義の中に次の行がある場合、

bitmap my_bmp width:100 height:100

MAXScript ではユーザ インタフェース コントロールを作成します。

同じロールアウト内に次の行がある場合は、

local my_bmp = bitmap 100 100

新しいローカルのビットマップ値が作成されます。 ユーザ インタフェース コントロールは作成されません。

fn paintBrush pos = (

この関数は、ビットマップ上に点を描画するために呼び出されます。pos 引数には、新しく点を置く位置を示す 2D 座標が入ります。

カスタム関数の定義

setPixels theCanvasBitmap pos #(black)

は、1 つ以上のピクセルを続けてカラー変更するために使用します。pos は、ペイントを開始するビットマップ内の位置 (左上隅は 0,0) を定義します。変更するカラーは配列で指定します。この場合、配列には黒という要素が 1 つだけ入っています。

setpixels

theCanvas.bitmap = theCanvasBitmap

ビットマップに黒の点を描画した後、それをユーザ インタフェース コントロールに割り当て、描画を更新します。

) onMicroPaint_CanvasRollout lbuttondown pos do (

このダイアログ ボックスのイベント ハンドラは、マウスがロールアウト上にあるときにマウスの左ボタンを押すと呼び出されます。pos 引数には、ロールアウトの座標における 2D の位置が入ります。

CreateDialog

isDrawing = true

フラグをオンにし、mousemove ハンドラ (下記参照) に描画を開始できることを知らせます。

paintBrush pos

また、paintBrush 関数を呼び出し、現在クリックされている地点を渡します。こうして、マウスを動かさずにクリックしただけの場合には、ビットマップ上に黒の点が描画されます。

 ) on MicroPaint_CanvasRollout lbuttonup pos do isDrawing = false

このダイアログ ボックスのイベント ハンドラは、マウスの左ボタンを離すと呼び出されます。描画を停止するには、フラグを再びオフにします。

on MicroPaint_CanvasRollout mousemove pos do if isDrawing do paintBrush pos

このダイアログ ボックスのイベント ハンドラは、マウス ボタンの状態とは関係なく、マウスがロールアウト上を移動すると呼び出されます。pos 引数にはロールアウト内の 2D の位置を示すピクセル数が入ります。これは、ビットマップ内の位置をピクセル数で示したものと同じになります (どちらも原点[0,0]が同じであるため)。

ここで isDrawing 変数を調べ、マウスの左ボタンが押され、まだ離されていないかどうかを確認します。変数に true が入っている場合、ダイアログ ボックス内のマウスの現在位置で描画の paintBrush 関数を呼び出します。

) createDialogMicroPaint_CanvasRollout bitmapX bitmapY

最後に、定義したばかりのロールアウトを使用してダイアログ ボックスを作成します。

)

結果:

次のチュートリアル:

チュートリアル - ビットマップ ペイント ツールの開発 - ストロークの強化

関連事項