2010-11-05 8 views
5

Tengo dos puntos creados, como una línea. Quiero convertirlo como un rectángulo. ¿Cómo debo hacerlo?Cómo crear un RectangleF usando dos PointF?

Por ejemplo, así es como trazo la línea. Pero yo quiero que sea un 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(); 
    } 

Respuesta

16

¿Qué tal:

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)); 

Básicamente esto se asegura de que realmente presenta la esquina superior izquierda como el "inicio", incluso si el usuario ha creado una línea desde la esquina inferior izquierda a la esquina superior derecha.

+1

Gracias Esto ayuda :) – Rye

2

Una versión más clara de la respuesta de Jon usando 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; 
    } 
Cuestiones relacionadas