標準命令で角丸四角形を描くモジュール。
半径が大きすぎた場合は自動で調節するおまけつき。// 角丸四角形を描画する
#module
#define ctype max( %1, %2 ) ( %1 )*( %1 > %2 ) + ( %2 )*( %1 <= %2 )
#define ctype min( %1, %2 ) ( %1 )*( %1 < %2 ) + ( %2 )*( %1 >= %2 )
#const DEFAULT_R 20
/*
rboxf (左上X座標), (左上Y座標), (右下X座標), (右下Y座標), (角の半径)
*/
#deffunc rboxf int _x1, int _y1, int _x2, int _y2, int _r
x1 = min(_x1, _x2) : x2 = max(_x1, _x2)
y1 = min(_y1, _y2) : y2 = max(_y1, _y2)
box_width = x2 - x1 : box_height = y2 - y1
if ( _r <= 0 ) {
r = DEFAULT_R
} else {
r = _r
}
r = min( r, min( box_width / 2, box_height / 2 ) )
boxf x1, y1+r, x2, y2-r
boxf x1+r, y1, x2-r, y2
repeat 4
x = x1 + ( cnt \ 2 ) * ( box_width - r * 2 + 1)
y = y1 + ( cnt / 2 ) * ( box_height - r * 2 + 1 )
circle x, y, x + r * 2, y + r * 2
loop
return
#global
// サンプル
rboxf 50, 50, 300, 300, 50
rboxf 600, 400, 400, 300, 100 // 右下→左上の順で指定してもOK
// 半径が大きすぎる場合は自動で調節する
2007年10月28日日曜日
角丸四角形を描画
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿