CLR: .Net / Mono / Boo / Otros CLR > C#
Rectangulo con esquinas redondas
(1/1)
lUis_mIguel:
Saludos al foro!
Estoy programando (aficionado) en c# con VS2008 en un winform.
Quisiera pedir vuestra ayuda, pues estoy atascado en lo siguiente:
He creado una clase que dibuja cuatro líneas que no se tocan en las esquinas, así formo un rectángulo (SIN ESQUINAS); ahora quiero dibujar cuatro arcos una en cada esquina, pero no me aclaro con esto último, ¿podríais echarme una manita por favor?
ESTO ES LO QUE TENGO HECHO:
protected override void OnPaint( PaintEventArgs e )
{
System.Drawing.Graphics areaToPaint = this.CreateGraphics();
System.Drawing.Pen myPen = new System.Drawing.Pen( System.Drawing.Color.MediumSlateBlue );
System.Drawing.Rectangle myRect = new System.Drawing.Rectangle( 50, 50, 500, 100 );
ExtensionesGraficas.RectRoundCorner( areaToPaint, myPen, myRect, 8 );
}
public static void RectRoundCorner( this Graphics g, Pen pen, Rectangle rect, int radio )
{
g.DrawLine( pen, rect.Left + radio, rect.Top, rect.Right - radio, rect.Top );
g.DrawLine( pen, rect.Left + radio, rect.Bottom, rect.Right - radio, rect.Bottom );
g.DrawLine( pen, rect.Left, rect.Top + radio, rect.Left, rect.Bottom - radio );
g.DrawLine( pen, rect.Right, rect.Top + radio, rect.Right, rect.Bottom - radio );
//(aquí tengo que dibujar las cuatro esquinas)
}
Espero haberme expresado con claridad y se entienda el código. Si me podéis orientar os lo agradezco de antemano,
LMiguel
------------
Como podéis ver en el adjunto ya lo he conseguido. Solo se requería pasar a Draw.Arc las coordenadas del vértice, y la anchura y altura, del cuadrado imaginario en cuyo interior se dibuja la circunferencia de la cual estamos pintando un arco.
FernandaUY:
Yo utilizo el siguiente método
--- Código: C# --- public void Redondeado() { GraphicsPath gp = new GraphicsPath(); //SolidBrush oSolidBrush = new SolidBrush(_ColorRelleno); Brush oSolidBrush = new LinearGradientBrush(new Rectangle(_Izquierda, _Arriba, _Ancho, _Altura), _ColorRelleno, Color.White, 45, false); Pen oPen = new Pen(_ColorBorde, _AnchoBorde); gp.AddLine(_Izquierda + _Radio, _Arriba, _Izquierda + _Ancho - (_Radio * 2), _Arriba); // Line gp.AddArc(_Izquierda + _Ancho - (_Radio * 2), _Arriba, _Radio * 2, _Radio * 2, 270, 90); // Corner gp.AddLine(_Izquierda + _Ancho, _Arriba + _Radio, _Izquierda + _Ancho, _Arriba + _Altura - (_Radio * 2)); // Line gp.AddArc(_Izquierda + _Ancho - (_Radio * 2), _Arriba + _Altura - (_Radio * 2), _Radio * 2, _Radio * 2, 0, 90); // Corner gp.AddLine(_Izquierda + _Ancho - (_Radio * 2), _Arriba + _Altura, _Izquierda + _Radio, _Arriba + _Altura); // Line gp.AddArc(_Izquierda, _Arriba + _Altura - (_Radio * 2), _Radio * 2, _Radio * 2, 90, 90); // Corner gp.AddLine(_Izquierda, _Arriba + _Altura - (_Radio * 2), _Izquierda, _Arriba + _Radio); // Line gp.AddArc(_Izquierda, _Arriba, _Radio * 2, _Radio * 2, 180, 90); // Corner gp.CloseFigure(); _Area.FillPath(oSolidBrush, gp); _Area.DrawPath(oPen, gp); gp.Dispose(); }
Navegación
Ir a la versión completa