Artículo original: PIE GRAPHICS WITH PURE VFP CODE
https://vfpimaging.blogspot.com/2006/03/pie-graphics-with-pure-vfp-code_9269.html
Autor: Cesar Ch.
Traducido por: Ana María Bisbé York
¿Sabía usted que es posible dibujar un gráfico al estilo tarta con VFP sin necesidad de emplear ningún ActiveX o llamar a una función API? ¿Con código VFP puro?
Para dibujar cualquier círculo hay dos parámetros principales: un punto con las coordenadas en el centro del círculo (x,y) y el radio. Teniendo esto, es muy fácil calcular las coordenadas de cualquier punto en el borde de la circunferencia.
Incluso, si ya ha utilizado antes GDI+ o cualquier ActiveX para dibujar gráficos, pienso que es interesante conocer cómo se puede crear un círculo y cómo calcular las posiciones de cada punto.
Con este propósito, necesitaré recordarle los conceptos de seno y coseno.
En cualquier triángulo rectángulo, para cada ángulo:
Seno del ángulo = longitud del lado opuesto / longitud de la hipotenusa
Coseno del ángulo = longitud del lado adyacente / longitud de la hipotenusa
Hipotenusa de un triángulo es el lado más largo, el que es el opuesto al ángulo recto. El lado adyacente es el lado entre el ángulo en cuestión y el ángulo recto. El lado opuesto es el opuesto al ángulo en cuestión.
Entonces, imagine un triángulo rectángulo dentro de una circunferencia, como la imagen que se muestra debajo.
Seno del ángulo = el lado opuesto (altura o "Y") / hipotenusa (Radio) !!!
Altura = Seno del ángulo * Radio
Coseno del ángulo = lado adyacente (Ancho o "X" / hipotenusa (Radio) !!!
Ancho = Coseno del ángulo * Radio
Ahora, podemos crear un lazo comenzando con el ángulo 0 (cero) y terminando en 360 grados. Para cada paso, podemos calcular la posición de cada punto del círculo.
Entonces, todo será más sencillo para dibujar el gráfico. Para todos los propósitos., voy a utilizar el objeto line para dibujar líneas desde el centro del círculo hasta el punto X,Y que acabamos de calcular. ¡¡¡ Y eso es todo !!!
Existe un problema con el objeto line en VFP. Para dibujar una línea, necesitamos utilizar las propiedades Top, Left, Width, Height y LineSlant (especifica la forma de inclinación de las líneas, en dependencia del ángulo y la posición resultante en el cuadrante (un cuarto de la conferencia o círculo), necesité crear algo de código extra para ocuparme de eso. Preste atención al comando DO CASE que se muestra debajo.
PROCEDURE DRAWPIE PARAMETERS tnCenterX, tnCentery, tnRadius, tnStart, tnEnd, tnColor LOCAL lnLineWidth, n, x, y, lcObj, lnPointLeft, lnPointTop, lcSlant lnLineWidth = 3 FOR n = tnStart TO tnEnd STEP (1 * lnLineWidth) x = COS(DTOR(n)) * tnRadius y = SIN(DTOR(n)) * tnRadius lcObj = "line" + TRANSFORM(n*100) Thisform.Container1.AddObject(lcObj,"line") DO CASE CASE n >= 0 AND n < 90 && 1er cuadrante lnPointLeft = tnCenterX lnPointTop = tnCenterY - y lcSlant = "/" CASE n >=90 AND n < 180 && 2do cuadrante lnPointLeft = tnCenterx + x lnPointTop = tnCenterY - y lcSlant = "\" CASE n >= 180 AND n < 270 && 3er cuadrante lnPointLeft = tnCenterX + x lnPointTop = tnCenterY lcSlant = "/" CASE n >= 270 AND n <= 360 && 4to cuadrante lnPointLeft = tnCenterX lnPointTop = tnCenterY lcSlant = "\" ENDCASE WITH Thisform.Container1.&lcObj. .LineSlant = lcSlant .BorderColor = tnColor .BorderWidth = lnLineWidth .Width = ABS(x) .Height = ABS(y) .left = lnPointLeft .Top = lnPointTop .Visible = .T. ENDWITH ENDFOR RETURN
Puede que encuentre un poco lento este procedimiento, especialmente si lo ejecuta en una máquina lenta; ¡ pero funciona ! El problema fundamental es que añade muchos objetos en un formulario, en el caso de un lazo con paso 1, ¡ al menos 360 líneas!
Si dibujamos una línea con BorderWidth = 1, en algunos casos, los puntos calculados creará unos huecos entre las líneas. Un borde más ancho resolverá el problema. El paso más grande en el lazo (desde 0 a 360 grados), el más rápido el procedimiento que ejecuta, y menos objetos los que serán agregados.
Ejecute el formulario PieGraphics.scx desde el archivo adjunto, cambie los valores del cursor, radio, pasos y linewidth (ancho de líneas) y verifique todos los procedimientos para entender mejor este artículo.
¿Qué es lo próximo?
Por supuesto, en uno de mis futuros post, voy a trabajar el Gráfico de estilo tarta utilizando GDI+
Algunos de los aspectos descritos aquí, ayudarán a crear más gráficos interesantes.
Como siempre, por favor, envíe sus comentarios, sugerencias o arreglos.
Nota de la traductora: Junto a la autorización para publicar la traducción de este artículo, el autor, ha solicitado que: (y escribo textualmente) "coloque una referencia al artículo en UTMAG (www.utmag.com/wconnect/wc.dll?9,7,10,Spanish,2094), que aborda el tema de modo más completo, pero utilizando GDI+ (obviamente, ya traducido al español). Contiene códigos fuente, con una clase que permite crear gráficos planos y 3D, controlando la altura, controlar el tamaño del círculo, a colores y monocromático y colores en gradientes , separar fragmentos y controlar la distancia del centro , escribir encima de los fragmentos, agregar un título al gráfico, crear leyendas, controlar fuentes, controlar colores del fragmento y del borde, ocultar fragmentos"
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.