マウスクリックで図形を描く(1)
普段なにげなく使っている直線ツールや四角形ツールをマイツール化してみましょう。クリックインタフェースを学び、ツール化までしてみます。
第1章 一点クリック
一点クリックの操作は本体機能の2D基準点ツールと同じです。
手続きGetPt( VAR pX, pY : REAL );
を使います。
この手続きを実行すると、マウスカーソルが照準カーソルになりクリックをするまで待ち続けます。図面の任意の場所でクリックすることで、その位置座標を引数 pX, pYに実数の値で返します。
クリックされた場所をメッセージウインドウに表示するプログラムを書いてみましょう。
メッセージウインドウに表示するには、
手続きMessage( z1, z2, ..., zN : ANY );
を使います。
PROCEDURE sample; VAR pX, pY : REAL; BEGIN GetPt( pX, pY ); Message( pX, ',', pY ); END; Run( sample );
次に、2D基準点ツールのように2D基準点を描かせてみましょう。
2D基準点は、
手続き Locus( pX, pY : REAL );
を使います。
PROCEDURE sample; VAR pX, pY : REAL; BEGIN GetPt( pX, pY ); Locus( pX, pY ); END; Run( sample );
手続きGetPtはクリックした座標位置を返しますが、その数値を使って2D基準点しか描けないわけではありませんたとえば、クリックした位置に円を描いて見ましょう。
円を描くには、
手続きArcByCenter( px, py, radius : REAL; startAngl, sweepAngle : REAL);
を使います。
引数、px, pyは円の中心ですので、GetPtで得られた座標を渡します。
引数 radiusは円の半径です。とりあえず1を与えましょう。
直接数値を書いても、変数にいれて渡してもよいのですが、今回は定数とします。
直接書くとは:
ArcByCenter( pX, pY, 1, startAngl, sweepAngle );
変数にいれて書くとは:
radius = 1.0; ArcByCenter( pX, pY, radius, startAngl, sweepAngle );
引数 startAngl, sweepAngleは円弧の開始位置と円弧角度です。
startAnglは0度としましょう、水平右方向が0度です。
sweepAngleは360.0としましょう。
CONSTは値を変数ではなく定数として扱う場合の宣言です。定数は、プログラムの途中で変更されないので、値は変更したくないけれど、変数のように名前をつけたい場合に便利です。
PROCEDURE sample; CONST radius = 1.0; startAngl = 0.0; sweepAngle = 360.0; VAR pX, pY : REAL; BEGIN GetPt( pX, pY ); ArcByCenter( pX, pY, radius, startAngl, sweepAngle ); END; Run( sample );
さらに、 radiusの数値を10にすることで大きな円を、 sweepAngleを180度にすることで半円を描くことができます。