sábado, 20 de febrero de 2010

Hágalo usted mismo!!!

El pan de cada día en el mundo del desarrollo de aplicaciones es encontrarnos con un problema que alguien ya solucionó... El día de hoy he sumado un punto más a la estadística ya que necesitaba generar un organigrama dinámicamente... Haciendo una búsqueda rápida en google encontre un excelente artículo en CodeProject http://www.codeproject.com/KB/cs/TreeGenerator.aspx.
Pero, como buenos consumidores siempre encontramos algo para estar inconformes, y por eso el origen de esta entrada en el blog; ya que al hechar un vistazo al artículo de cp lo primero que noté fue que a pesar de parecer muy funcional no estaba muy bonito gráficamente hablando... Y si está el código disponible... xq no añadirle un pequeño fix para que se vea como yo quiero? Muchas veces somos del grupo miro, utilizo y no toco... Como parte de la gran comunidad del "alguien ya lo hizo" no esta mal de vez en cuando ser ese que tuvo que hacerlo y lo publicó para el uso de los demás, lamentablemente algo no muy profesado en EC...
Yendo al grano, bastó remembrar mis andanzas por el mundo del GDI+ y darle un pequeño smooth a los cuadros del organigrama con unas cuantas líneas:

gr.CompositingQuality = CompositingQuality.HighQuality;
gr.SmoothingMode = SmoothingMode.AntiAlias
;


//Comentando lo hecho x el autor original
//gr.DrawRectangle(boxPen, currentRectangle);

//gr.FillRectangle(new SolidBrush(_BoxFillColor), currentRectangle);

GraphicsPath path = CornerRendererHelper.RoundRectangle(currentRectangle, 20);
gr.FillPath(new LinearGradientBrush(currentRectangle,_BoxFillColor, _BoxFillColor2, LinearGradientMode.BackwardDiagonal), path);


Aquí con la brocha gradient el organigrama se dibuja mucho mejor, y utilizando una utilería hecha por mi buen amigo John (seguramente ni se acuerda que hizo esa clase) el rectangulo se redondea...

He aquí las diferencias:

Code Project:



Luego de las mejoras



Go ahead! Hágalo usted mismo.

Los fuentes modificados de la librería se pueden encontrar aqui

Salu2
gish@c