研究開発

マウスクリックで図形を描く(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度にすることで半円を描くことができます。