座標を扱う処理に共通に現われる操作を定義したもの。
マクロで定義されているものと、関数になっているものがある。
|
int rectwidth(RECT r)
RECT r 長方形
長方形の幅を戻す。
指定した長方形の r.c.right
から
r.c.left
を引いた値を戻す。
これはマクロである。
|
int rectheight(RECT r)
RECT r 長方形
長方形の高さを戻す。
指定した長方形の r.c.bottom
から r.c.top
を引いた値を戻す。
これはマクロである。
|
void setpt(PNT p, W h, W v)
PNT p 値をセットするための点 W h 水平座標 W v 垂直座標
なし
h, v
の値を p
の座標にセットする。
このマクロはブロックとして記述されているので、
if
の後の文として書く場合などには注意が必要である。
|
void movept(PNT p, W dh, W dv)
PNT p 点 W dh 水平移動量 W dv 垂直移動量
なし。
点 p
を横に dh
、
縦に dv
だけ並行移動する。
座標系のオーバーフローに関しては保証しない。
このマクロはブロックとして記述されているので、
if
の後の文として書く場合などには注意が必要である。
|
void setrect(RECT x, W l, W t, W r, W b)
RECT x セットする長方形 W l 左(left)座標 W t 上(top)座標 W r 右(right)座標 W b 下(bottom)座標
なし。
l, t, r, b
の値を、
それぞれ長方形 x
の
left, top, right, bottom
の座標値にセットする。
このマクロはブロックとして記述されているので、
if
の後の文として書く場合などには注意が必要である。
|
int equalrect(RECT a, RECT b)
RECT a, b 比較する長方形
= 1 2 つの長方形が一致した = 0 2 つの長方形は異なる
2 つの長方形 a
と b
が同一のとき
1 となり、同一でないとき 0 となる。
これはマクロである。
|
int emptyrect(RECT r)
RECT r チェックする長方形
= 1 長方形は空 = 0 長方形である ( 空ではない )
長方形 r
の幅と高さのどちらか片方でも
0 以下ならば 1 となり、
いずれも 0 より大きいならば 0 となる。
これはマクロである。
|
int sectrect(RECT a, RECT b)
RECT a, b 比較する長方形
= 1 2 つの長方形に共通部分がある = 0 2 つの長方形に共通部分はない
2 つの長方形 a
と b
の共通部分が空でないとき 1 となり、
空のとき 0 となる。これはマクロである。
|
int inrect(RECT r, PNT p)
RECT r 範囲を表わす長方形 PNT p チェックする点
= 1 p が r に含まれている = 0 p は r に含まれていない
点 p
が長方形 r
に含まれているとき 1 となり、
含まれていないとき 0 となる。これはマクロである。
|
void nullrect(RECT r)
RECT r 長方形
なし
長方形 r
のすべての座標値を 0 にセットする。
このマクロはブロックとして記述されているので、
if
の後の文として書く場合などには注意が必要である。
|
void genrect(RECT *rp, W h0, W v0, W h1, W v1)
RECT *rp 値をセットするための長方形領域へのポインタ W h0 水平座標値0 W v0 垂直座標値0 W h1 水平座標値1 W v1 垂直座標値1
なし
2 つの点 (h0, v0)、(h1, v1)
を対角点に持つ長方形を生成し、
rp
で指定した領域に格納する。
|
void gensquare(RECT *rp, W h0, W v0, W h1, W v1)
RECT *rp 値をセットするための正方形領域へのポインタ W h0 水平座標値0 W v0 垂直座標値0 W h1 水平座標値1 W v1 垂直座標値1
なし
2 つの点 (h0, v0), (h1, v1)
を対角点に持つ長方形に包含される最大の正方形を生成し、
rp
で指定した領域に格納する。
長方形の短辺が正方形の 1 辺となる。
生成される正方形は必ず (h0, v0)
(原点)を通るように作られる。
そのため、生成された正方形が元々の長方形のいづれの辺と接するのかは、
原点に対してどの象限に元々の長方形が作られていたのかによって変化する。
|
RECT* moverect(RECT *rp, W dh, W dv)
RECT *rp 移動する長方形へのポインタ W dh 水平移動量 W dv 垂直移動量
長方形へのポインタ ( rp
)
rp
で指定した長方形を横に dh
,
縦に dv
だけ平行移動する。
座標系のオーバーフローに関しては保証しない。
関数値として rp
を戻す。
|
RECT* posrect(RECT *rp, PNT p)
RECT *rp 長方形へのポインタ PNT p 左上座標値
長方形へのポインタ(rp)
rp
で指定した長方形を、
その左上の点が p
で指定した点に一致するように平行移動する。
座標系のオーバーフローに関しては保証しない。
関数値として rp
を戻す。
|
RECT* sizerect(RECT *rp, W dh, W dv)
RECT *rp 長方形へのポインタ W dh 水平方向への変化量 W dv 垂直方向への変化量
長方形へのポインタ( rp
)
rp
で指定した長方形の大きさを左右に
dh
ずつ、上下に dv
ずつ拡大 ( dh, dv > 0
の時 )、
または縮小 ( dh,dv < 0
の時 )する。
長方形の中心位置は変化せず、
長方形の幅は ( 2×dh
)、
高さは ( 2×dv
) だけ変化することになる。
座標系のオーバーフロー、
空の長方形に関しては保証しない。
関数値として rp
を戻す。
|
RECT* andrect(RECT *dr, RECT *r1, RECT *r2)
RECT *dr 結果を格納する長方形へのポインタ RECT *r1, *r2 演算元の領域
長方形へのポインタ( dr
)
r1
と r2
で指定した
2 つの長方形の共通部分を求め、dr
で指定した領域に格納する。共通部分が空でない場合は、
関数値は dr
となる。
共通部分が空の場合には、
関数値は NULL
となり、dr
の領域には空の長方形 (0,0,0,0)
が格納される。
|
RECT* andrect2(RECT *dr, RECT *r2)
RECT *dr 結果を格納する長方形へのポインタ RECT *r2 演算のための長方形
長方形へのポインタ( drp
)
dr
と r2
で指定した 2
つの長方形の共通部分を求め、dr
で指定した領域に格納する。
共通部分が空でない場合は、
関数値は dr
となる。
共通部分が空の場合には、
関数値は NULL
となり、
dr
の領域には空の長方形
(0,0,0,0)
が格納される。
この関数は、andrect (dr, dr, r2)
と同一である。
|
RECT* andrectlist(RECT *drp, RLIST *rlp)
RECT *drp 結果格納先の長方形 RLIST *rlp 長方形リスト
長方形へのポインタ( drp
)
rlp
で指定した長方形のリストのすべての要素長方形の共通部分を求め、
drp
で指定した領域に格納する。
共通部分が空でない場合は、
関数値は drp
となる。
共通部分が空の場合には、
関数値は NULL
となり、
drp
の領域には空の長方形
(0,0,0,0)
が格納される。
|
RECT* orrect(RECT *drp, RECT *r1, RECT *r2)
RECT *drp 結果を格納する長方形へのポインタ RECT *r1, *r2 演算元の領域
長方形へのポインタ ( drp
)
r1
と r2
で指定した 2
つの長方形を包含する最小の長方形を求め、
drp
で指定した領域に格納する。
空の長方形は、存在しないものとみなされる。
具体的には、r1
が空の場合には結果は
r2
と同じ領域となる。
r1
が空でなく、
r2
が空の場合には、
結果は r1
と同じ領域となる。
関数値は drp
となる。
|
RECT* orrect2(RECT *drp, RECT *r2)
RECT *drp 結果を格納する長方形へのポインタ RECT *r2 演算のための長方形
長方形へのポインタ ( drp
)
drp
と r2
で指定した 2 つの長方形を包含する最小の長方形を求め、
drp
で指定した領域に格納する。
空の長方形は、存在しないものとみなされる。
関数値は drp
となる。
この関数は、orrect(drp, drp, r2)
と同一である。
|
RECT* orrectlist(RECT *drp, RLIST *rlp)
RECT *drp 結果格納先の長方形 RLIST *rlp 長方形リスト
長方形へのポインタ ( drp
)
rlp
で指定した長方形のリストのすべての要素長方形を包含する最小の長方形を求め、
drp
で指定した領域に格納する。
空の長方形は、
存在しないものとみなされる。
関数値は drp
となる。
|
W xorrect(RLIST *rlp, RECT *r1, RECT *r2)
RLIST *rlp 結果を格納する長方形リストへのポインタ RECT *r1, *r2 演算元の領域
長方形の数
r1
で指定した長方形の中で、
r2
で指定した長方形に含まれない部分を、
いくつかの長方形に分割し、rlp
で指定した長方形リストの領域に格納する。
長方形への分割は、まず水平軸に沿って、
次に垂直軸に沿って分割され、
長方形リストには、左上の点の垂直座標が小さい長方形の順
(同じ場合は水平座標が小さい順)
に格納される。rlp
で指定する領域は、
あらかじめ長方形リストとなっていなければいけない。
関数値として分割した長方形の数 ( N ) が戻り、
長方形リストの先頭から N 個の要素長方形
( rcomp
)
に結果が格納される。
長方形リストのポインタ ( r_next
)
は一切変更されない。
長方形リストの要素数が、 分割した長方形の数より少ない場合は、 リストの要素数個のみ格納される。
|
W xorrectlist(RLIST *drlp, RECT *rp, RLIST *srlp)
RLIST *drlp 結果を保持する長方形リストへのポインタ RECT *rp 長方形 RLIST *srlp 長方形リスト
長方形の数
rp
で指定した長方形の中で、
srlp
で指定した長方形リストに含まれない部分を、
いくつかの長方形に分割し、
drlp
で指定した長方形リストの領域に格納する。
長方形への分割は、まず水平軸に沿って、
次に垂直軸に沿って分割され、
長方形リストには、左上の点の垂直座標が小さい長方形の順
(同じ場合は水平座標が小さい順)
に格納される。drlp
で指定する領域は、
あらかじめ長方形リストとなっていなければいけない。
長方形リストの要素数が、 分割した長方形の数より少ない場合は、 リストの要素数個のみ格納される。
|
RLIST* genrectlist(W n, RLIST *rlp)
W n 長方形リストの要素数 RLIST *rlp
長方形リストのポインタ ( rlp
または、生成したローカルメモリ)
rlp
で指定した領域を、
要素数 n
の 長方形リストとして初期化し、
そのポインタを戻す。
リスト中の各要素長方形は、(0,0,0,0)
に初期化され、
リストのポインタが設定される。
rlp
で指定した領域は、n×sizeof(RLIST)
の大きさを持っているものとみなされる。
rlp = NULL
の時は、
ローカルメモリ領域に要素数 n の 長方形リストを生成、
初期化を行い、そのポインタを関数値として戻す。