C#のWinFormsでSystem.Drawing.Recangleを確認する

C# コンピュータ
C#

Recangleは矩形座標を配置する情報をプロパティに持ちます。

Rectangle rect1 = new();
Debug.Print("{0}", rect1);
// {X=0,Y=0,Width=0,Height=0}

コンストラクタで引数を指定しない場合、各プロパティに0がセットされます。

Rectangle rect2 = rect1;
Debug.Print("==:{0} Equals:{1}", rect1 == rect2, rect1.Equals(rect2));
// ==:True Equals:True

代入で初期化。各プロパティは同一だが、rect1とrect2は別オブジェクトを参照していると思われます。

rect2.Location = new Point(5, 10);
rect2.Size = new Size(100, 50);
Debug.Print("rect1:{0} rect2{1}", rect1, rect2);
// rect1:{X=0,Y=0,Width=0,Height=0} rect2{X=5,Y=10,Width=100,Height=50}
Debug.Print("Top:{0} Left:{1} Bottom:{2} Right:{3}", rect2.Top, rect2.Left, rect2.Bottom, rect2.Right);

rect2のSizeとLocationプロパティに値をセット、Top,Left,Buttom,Rightプロパティを取得してみる。
TopとLeftはX,Yプロパティ、RightはX+Width、ButtomはY+Heightだと思われます。

rect2のプロパティを変更しましたが、rect1の値に変化はないです。

Rectangle rect3 = new(8, 18, 10, 10);
Rectangle rect4 = Rectangle.Inflate(rect3, 5, 5);
Debug.Print("rect3:{0} rect4:{1}", rect3, rect4);
// rect3:{X=8,Y=18,Width=10,Height=10} rect4:{X=3,Y=13,Width=20,Height=20}

Inflateは引数のx,y分矩形のサイズを変化させます。その最x,y座標も変化します。

拡大縮小した場合でも中心地を変化させないような振る舞いに見えます。

Rectangle rect5 = new(0, 0, 10, 10);
Rectangle rect6 = new(5, 5, 10, 10);
Rectangle rect7 = Rectangle.Intersect(rect5, rect6);
Debug.Print("rect7:{0} {1}", rect7, rect5.IntersectsWith(rect6));
// rect7:{X=5,Y=5,Width=5,Height=5} True

Intersect()メソッドは2つのRectangleオブジェクトの重なる部分でRectangleオブジェクトを生成します。IntersectsWith()メソッドは重なる部分がある場合trueそうでない場合falseを返します。

Rectangle rect8 = Rectangle.Union(rect5, rect6);
Debug.Print("rect8:{0}", rect8);
// rect8:{X=0,Y=0,Width=15,Height=15}

Union()は2つのRectangleオブジェクトを結合します。2つのオブジェクトが収まるだけの領域が確保されます。

コメント