サンプルプログラム"draw"について

概要

drawは、SERのテストドライバとして作成した、 簡易ドローツールです。

draw画面例

起動方法は以下の通りです。

形式1:

% draw

形式2:

% draw データファイル名

メニューの各ボタンは、以下の機能があります。

quit
プログラムを終了します。
line
左クリック→左クリック→左クリック→中央クリック により、 ポリライン(折れ線)を描画します。
box
ドラッグにより矩形を描画します。
circle
ドラッグにより円を描画します。
modify_polyline
このボタンを押してから、ポリラインの頂点や線上をドラッグすることにより、 直線を変形できます。頂点で中央ボタンをクリックすると、頂点を削除できます。
delete
このボタンを押してから、図形をクリックすることにより、 図形を削除できます。
done
これはボタンではなくラベルです。 ここにMule(Emacs)よろしくgarbage collecting... done と 表示させようとしたのですが、この程度のアプリではガベージコレクションは 一瞬で終わってしまうので、結局標準出力に出すことにした、その名残りです(^^;
check
現在のヒープの状況をダンプします(SERのデバッグ用)。
serialize
現在描画中のストレージをシリアライズ(ファイルにセーブ)します。 ダイアログが出てファイル名の入力を促します。
deserialize
デシリアライズ(ファイルからの読み込み)を行ないます。 ダイアログが出てファイル名の入力を促します。
Zoom
別ウィンドウに拡大図を表示します。拡大したい領域を、 ドラッグで指示してください。
Redraw
画面を再描画します。
Pan(Zoomウィンドウのみ)
Zoomウィンドウの表示範囲を、クリックした点が中心になるように移動します。

コンパイル方法

このプログラムのコンパイルには、以下のライブラリが必要です。

配布ディレクトリ以下のdrawディレクトリに移動して、 makeを実行してください。

ライブラリやヘッダファイルのパスをMakefile(Makeobj)中に 無頓着に書いているので、適当に調整してください。


SERの機能をひと通り使ってみる

スキーマファイル

drawのスキーマファイルは、shape.schemaです。

% schemac ./shape.schema

としてスキーマコンパイラにかけてみてください。

AP向けヘッダファイルshape.hと、内部情報ヘッダファイルshape_i.hが 生成されます(初めからあるけど)。

ヘッダファイルが生成されたら、draw自体をコンパイルします。

ガベージコレクション

適当に絵を描いてみてください。手を休めると、 時々標準出力に"garbage collecting...done"と出力されると思います (3秒以上イベントがないとガベージコレクタが起動するようにしてある)。

(言うまでもないことですが)ガベージコレクションは、 "garbage collecting..."が表示されてから、"done"が 表示されるまでの間に終了しています。

シリアライズ

適当に絵を書いて、シリアライズしてみてください。

デシリアライズ

ファイル名を引数に指定してdrawを起動するか、 deserializeボタンを使用して、 シリアライズしたファイルを読み込んでみてください。

スキーマの拡張

現在のdrawでは色が付けられませんから、図形毎に色を付けられるよう、 データ構造を拡張することを考えます。

スキーマファイル shape.schema 中には、 色に関するデータを保持するための定義がコメントアウトされた形で 入っているので、このコメントを外し、スキーマをカラー化に対応させます。

新しいスキーマファイルをスキーマコンパイラにかけ、 アプリケーション(draw)自体を再コンパイルし、 その後で古いスキーマでセーブしたデータを読み込んでみてください。

(多少の)データ構造の拡張については、SERが自動でデータ変換を 行なうことがわかると思います。


おまけ

このテストドライバ作成のために、 簡易版のグラフィックライブラリを作成しました。

モジュール名TGK, tinygkディレクトリ以下にあります。 使い方は、include以下の、TGK.hを読んで下さい(^^;


ひとつ上のページに戻る | prev(コンパイル方法) | next(関数リファレンス)