« ListView/TreeViewにオーバーレイアイコンを表示する | トップページ | アンマネージドDLLの動的リンク(1) »

2010年10月14日 (木)

Intersect/Union/Inflate/Offset メソッド

ヘルプ等の文章だけによる説明だけでは一目で判りにくく、混乱しやすいので、図解付きで Rectangle の4メソッドの覚え書きを記しておく。

例として、長方形A・Bが存在し、それぞれの Rectangle 構造体値を

rect1:X=10, Y=10, Width=180, Height=120  ……長方形A
rect2:X=80,Y =80, Width=180, Height=120  ……長方形B
の値を持っているものとする。

Intersect メソッド

交差しているRectangle/RectangleFを返す。

例1
rect1.Intersect(rect2);
rect1 の内容が、長方形A∩Bの Rectangle 情報に変更される。
すなわち、rect1 は、X=80, Y=80, Width=110, Height=50 になる。

例2
Rectangle rect3 = Rectangle.Intersect(rect1, rect2);
rect3 に、長方形A∩BのRectangle 情報が格納される。
すなわち、rect3 には、X=80, Y=80, Width=110, Height=50 の値が設定される。

Union メソッド

2つの Rectangle/RectangleF の和集合を返す。


Rectangle rect3 = Rectangle.Union(rect1, rect2);
rect3 に、長方形A∪BのRectangle 情報が格納される。
すなわち、rect3 には、X=10, Y=10, Width=250, Height=190 の値が設定される。

Inflate メソッド

現在の長方形中心点を基点にして、各方向へ指定値分、拡大する。

例1
rect1.Inflate(20, 10);
rect1 の内容が、長方形Aの左右それぞれに 20、上下それぞれに 10 拡張された Rectangle 情報に変更される。
すなわち、rect1 は、X=-10, Y=0, Width=220, Height=140 になる。
幅は 20 でなく 40、高さは 10 でなく 20 拡張されるので注意する事。

例2
Rectangle rect2 = Rectangle.Inflate(rect1, 20, 10);
rect2 に、長方形Aの左右それぞれに20、上下それぞれに10拡張されたRectangle 情報が格納される。
すなわち、rect2 には、X=-10, Y=0, Width=220, Height=140 の値が設定される。

Offset メソッド

現在の長方形を、指定座標分左下方向へ移動します。


rect1.Offset(20, 10);
rect1の内容が、長方形Aの左側へ 20、下側に 10 移動した Rectangle 情報に変更される。
すなわち、rect1 は、X=30, Y=20, Width=180, Height=120になる。

補足

各メソッドは、WindowsAPI の IntersectRect, UnionRect, InflateRect, OffsetRect に相当している。これらの WindowsAPI 関数でも、上記と同様の結果となる。

« ListView/TreeViewにオーバーレイアイコンを表示する | トップページ | アンマネージドDLLの動的リンク(1) »

覚え書き」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: Intersect/Union/Inflate/Offset メソッド:

« ListView/TreeViewにオーバーレイアイコンを表示する | トップページ | アンマネージドDLLの動的リンク(1) »