2010-11-05 1 views
5

У меня есть две точки, созданные как линия. Я хочу преобразовать его как прямоугольник. Как мне это сделать?Как создать RectangleF с помощью двух PointF?

Например, я рисую линию. Но я хочу, чтобы это было Rectangle

private PointF start, end; 
    protected override void OnMouseDown(MouseEventArgs e) 
    { 
     start.X = e.X; 
     start.Y = e.Y; 
    } 

    protected override void OnMouseUp(MouseEventArgs e) 
    { 
     end.X = e.X; 
     end.Y = e.Y; 

     Invalidate(); 
    } 

ответ

16

Как насчет:

new RectangleF(Math.Min(start.X, end.X), 
       Math.Min(start.Y, end.Y), 
       Math.Abs(start.X - end.X), 
       Math.Abs(start.Y - end.Y)); 

В основном это делает, что вы на самом деле представляет верхний левый угол, как «старт», даже если пользователь создал линия от нижних левых до верхних правых углов.

+1

Спасибо это помогает :) – Rye

2

Более ясный вариант ответа Джона с помощью FromLTRB:

/// <summary> 
    /// Creates a rectangle based on two points. 
    /// </summary> 
    /// <param name="p1">Point 1</param> 
    /// <param name="p2">Point 2</param> 
    /// <returns>Rectangle</returns> 
    public static RectangleF GetRectangle(PointF p1, PointF p2) 
    { 
     float top = Math.Min(p1.Y, p2.Y); 
     float bottom = Math.Max(p1.Y, p2.Y); 
     float left = Math.Min(p1.X, p2.X); 
     float right = Math.Max(p1.X, p2.X); 

     RectangleF rect = RectangleF.FromLTRB(left, top, right, bottom); 

     return rect; 
    } 
Смежные вопросы