Shape con PolyPoint adjunto ejemplo

549 views
Skip to first unread message

Elides Paredes

unread,
Feb 29, 2016, 3:29:42 PM2/29/16
to Comunidad de Visual Foxpro en Español
Estimados Amigos.

Hace tiempo consegui una clase que me permite crear un gráfico muy bueno a partir de un control shape, los cuales tienen una propiedad muy interesante llamada PolyPoints, en esa propiedad se guarda el nombre de un arreglo que contiene las coordenadas que permiten dar formas especiales a un shape.  

Así se puede construir no solo un cuadrado, una elipse o un círculo, sino también un triángulo, octágono, etc. 

En la red buscando solución a mi problema encontré un ejemplo interesante del Maestro Luis Ma.(http://comunidadvfp.blogspot.com/2015/09/dibujando-poligonos-con-vfp-90.html).
pero hasta ahora no he logrado comprender como a partir de esos puntos se puede modificar el shape y darle esas forma. Incluso el mencionado ejemplo del Maestro muestra los puntos, pero aunque entiendo bien la trigonometría y las funciones seno y coseno, no logro ver como hace las formas. Hay muy poca documentación al respecto y algunas páginas han desaparecido.

Adjunto El formulario y la imagen que se necesita para que puedan ver lo que quiero mostrales. Antes era una clase pero para mi es mas fácil mostrarla  como un formulario. El formulario funciona perfectamente, es solo que no puedo entender como los valores que coloqué en el cuadro de lista, (que forman parte del arreglo), ¿cómo pueden darle esa forma al shape?

Otra duda enorme que tengo, es que la imagen (del reloj) es gif(aunque no se mueve), no tiene fondo y se hace transparente sin tener el archivo .BMP con el respectivo .MSK que utilizaba para hacerlo con áreas transparentes, Se vuelve transparente.. ¿Cómo es eso posible?

Saludos espero que puedan ayudarme y que ésto pueda servirle ésto a otros programadores como me sirve a mi para hacer un gráfico, a partir de un solo parámetro que se envía a la clase (que es el porcentaje).

Mi objetivo es comprender como funciona, porque la imagen permite ver el fondo siendo GIF, y así poder hacer otros gráficos que deseo hacer como los maestros..jejeje.

Ante todo, Mil gracias por la ayuda que siempre me han brindado, directa e indirectamente.

Atentamente 
Elides Paredes
Barquisimeto Venezuela.

formulario con shape.zip

Victor Espina

unread,
Feb 29, 2016, 6:06:54 PM2/29/16
to Comunidad de Visual Foxpro en Español


Como ves en la imagen, el array PolyPoint debe contener una serie de puntos, que marcan las aristas del poligono a construir, usando el esquema de coordenadas normales de VFP, donde el origen 0,0 corresponde a la esq sup izq.  En este caso, el punto 0,0 corresponde a la posicion del Shape (Left, Top), de modo que los puntos son relativos a esa ubicacion. 


Por ejemplo, el triangulo en el ejemplo de LuisMa se dibuja con 3 puntos, de izq a der,  arriba hacia abajo:


A: Left +50,  Top +0  (50,0)

B: Left +100, Top +100  (100,100)

C: Left +0, Top +100 (0,100)


En el ejemplo, la posicion del objeto es Left 36, Top 24, por tanto las coordenadas finales de los 3 vertices del triangulo serian:


A: 36 + 50, 24 + 0  (86,24)

B: 36 + 100, 24 + 100 (136,124)

C: 36 + 0, 24 + 100 (36 + 124)







Victor Espina

Elides Paredes

unread,
Feb 29, 2016, 6:36:06 PM2/29/16
to Comunidad de Visual Foxpro en Español
Muchas Gracias  Amigo Víctor,
 
Ahora lo entiendo y  hasta lo veo fácil, sin embargo, no es nada intuitivo como otras cosas, Me hubiese resultado imposible deducirlo, de hecho llevo varios días tratando. Por lo general trato de investigar, antes de solicitar ayuda. Y de verdad No conseguí en ningún lado esa información,

Solo me queda la duda con la imagen. (del formulario anexo, no se si lo has visto). Es una imagen gif con áreas  transparentes ,si,, pero se supone que VFP requiere de archivos bmp con otro igual pero con extensión msk. (para lograr ese efecto de áreas transparentes). Según la documentación de todos lados Así lo he visto. Ahora una imagen PNG si tiene áreas transparente para otras aplicaciones.. Y con VFP, no funciona,, Donde me perdí?

Una vez mas. Muchas gracias..

Victor Espina

unread,
Mar 1, 2016, 4:52:00 AM3/1/16
to Comunidad de Visual Foxpro en Español
VFP6 solo permitia transparencias con archivos BMP / MSK,  pero a partir de cierta version (no se cual) se empezaron a permitir tambien archivos PNG y GIF con soporte para el alpha channel, lo cual les permite incluir transparencia sin necesidad de archivo MSK.

Victor Espina

Elides Paredes

unread,
Mar 1, 2016, 7:19:37 AM3/1/16
to Comunidad de Visual Foxpro en Español
Si,hice algunas pruebas y me quedé impresionado, ya ni recuerdo para que las quería pero en vista de que no se podía, busqué otras formas de hacerlo.

de nuevo gracias.. 

Luis Maria Guayan

unread,
Mar 1, 2016, 8:34:42 AM3/1/16
to publice...@googlegroups.com
Busca en el Blog que hay otros artículos con objetos Shape y la propiedad PolyPoints:

http://comunidadvfp.blogspot.com/search/?q=PolyPoints


Luis María Guayán
Tucumán, Argentina
_______________________________
Comunidad Visual FoxPro en Español
http://comunidadvfp.blogspot.com

El 29/02/16 a las 20:06, Victor Espina escribió:

Elides Paredes

unread,
Mar 1, 2016, 12:23:46 PM3/1/16
to Comunidad de Visual Foxpro en Español

Gracias Maestro (luis Ma) por participar también, y por la recomendación, de hecho, me refería a ese (único) ejemplo que encontré en ese foro. 
 
Y si las personas que participan en el foro son como mis "Ángeles de la Guarda", ese Blog y -este foro son mis biblias.

Sin embargo, en este caso en particular, con la explicación, (no se si da clases pero Víctor es para mí otro maestro) con esa explicación me quedó muy claro.

Ahora bien. Entendido, y luego releyendo la parte que dice literalmente "Las coordenadas especificadas son porcentajes relativos a las dimensiones del control Shape. "

Quisiera saber si es un error , o una mala interpretación de mi parte.Pero, dicho  así, no lo comprendo,,

Mi afectuoso saludo, mi reconocimiento y mi agradecimiento va por delante de todo, Gracias
Elides Paredes.
de Barquisimeto Venezuela

Luis Maria Guayan

unread,
Mar 2, 2016, 7:50:13 AM3/2/16
to publice...@googlegroups.com
Elides, con respecto a tu duda, los valores de las coordenadas son porcentajes relativos a las dimensiones del control Shape (como veras van del 0 al 100), quizás con el siguiente ejemplo que cambia las dimensiones de altura de los controles, veras que los porcentajes de las coordenadas cambian (PolyPoint), y las formas se acomodan a sus nuevos porcentajes

PUBLIC goForm
goForm = CREATEOBJECT("MiForm")
goForm.SHOW(1)
RETURN

DEFINE CLASS MiForm AS FORM

  DOCREATE = .T.
  AUTOCENTER = .T.
  CAPTION = "Dibujando polígonos con VFP 9.0"
  NAME = "MiForm"
  WIDTH = 800
  HEIGHT = 400

  *-- Triángulo
  ADD OBJECT shpTriangulo AS SHAPE WITH ;
    TOP = 36, ;
    LEFT = 24, ;
    HEIGHT = 144, ;
    WIDTH = 144, ;
    BACKCOLOR = RGB(255,0,0), ;
    POLYPOINTS = "This.aTri", ;
    NAME = "shpTriangulo"

  *-- Octógono
  ADD OBJECT shpOctogono AS SHAPE WITH ;
    TOP = 36, ;
    LEFT = 204, ;
    HEIGHT = 144, ;
    WIDTH = 144, ;
    BACKCOLOR = RGB(0,0,255), ;
    POLYPOINTS = "This.aOct", ;
    NAME = "shpOctogono"

  *-- Estrella
  ADD OBJECT shpStar AS SHAPE WITH ;
    TOP = 36, ;
    LEFT = 400, ;
    HEIGHT = 144, ;
    WIDTH = 144, ;
    BACKCOLOR = RGB(0,255,0), ;
    POLYPOINTS = "This.aStar", ;
    NAME = "shpStar"

  *-- Estrella
  ADD OBJECT SpnPorc AS SPINNER WITH ;
    TOP = 36, ;
    LEFT = 600, ;
    NAME = "SpnPorc", ;
    VALUE = 100, ;
    INCREMENT = 5, ;
    SPINNERHIGHVALUE = 200, ;
    SPINNERLOWVALUE = 10

  PROCEDURE shpTriangulo.INIT
    THIS.ADDPROPERTY("aTri[3,2]")
    THIS.aTri[1,1]= 50
    THIS.aTri[1,2]= 0
    THIS.aTri[2,1]= 100
    THIS.aTri[2,2]= 100
    THIS.aTri[3,1]= 0
    THIS.aTri[3,2]= 100
  ENDPROC

  PROCEDURE shpOctogono.INIT
    THIS.ADDPROPERTY("aOct[8,2]")
    THIS.aOct[1,1]= 33
    THIS.aOct[1,2]= 0
    THIS.aOct[2,1]= 67
    THIS.aOct[2,2]= 0
    THIS.aOct[3,1]= 100
    THIS.aOct[3,2]= 33
    THIS.aOct[4,1]= 100
    THIS.aOct[4,2]= 67
    THIS.aOct[5,1]= 67
    THIS.aOct[5,2]= 100
    THIS.aOct[6,1]= 33
    THIS.aOct[6,2]= 100
    THIS.aOct[7,1]= 0
    THIS.aOct[7,2]= 67
    THIS.aOct[8,1]= 0
    THIS.aOct[8,2]= 33
  ENDPROC

  PROCEDURE shpStar.INIT
    THIS.ADDPROPERTY("aStar[12,2]")
    THIS.aStar[1,1] = 50
    THIS.aStar[1,2] = 0
    THIS.aStar[2,1] = 66
    THIS.aStar[2,2] = 25
    THIS.aStar[3,1] = 100
    THIS.aStar[3,2] = 25
    THIS.aStar[4,1] = 84
    THIS.aStar[4,2] = 50
    THIS.aStar[5,1] = 100
    THIS.aStar[5,2] = 75
    THIS.aStar[6,1] = 66
    THIS.aStar[6,2] = 75
    THIS.aStar[7,1] = 50
    THIS.aStar[7,2] = 100
    THIS.aStar[8,1] = 33
    THIS.aStar[8,2] = 75
    THIS.aStar[9,1] = 0
    THIS.aStar[9,2] = 75
    THIS.aStar[10,1] = 16
    THIS.aStar[10,2] = 50
    THIS.aStar[11,1] = 0
    THIS.aStar[11,2] = 25
    THIS.aStar[12,1] = 33
    THIS.aStar[12,2] = 25
  ENDPROC

  PROCEDURE SpnPorc.INTERACTIVECHANGE
    THISFORM.shpTriangulo.HEIGHT = 144 * THIS.VALUE / 100
    THISFORM.shpOctogono.HEIGHT = 144 * THIS.VALUE / 100
    THISFORM.shpStar.HEIGHT = 144 * THIS.VALUE / 100
  ENDPROC

ENDDEFINE


Luis María Guayán
Tucumán, Argentina
_______________________________
Comunidad Visual FoxPro en Español
http://comunidadvfp.blogspot.com

El 01/03/16 a las 14:23, Elides Paredes escribió:

Victor Espina

unread,
Mar 2, 2016, 11:52:28 AM3/2/16
to Comunidad de Visual Foxpro en Español
Hum, entiendo. Entonces mi interpretacion era incorrecta.  Yo asumi que se trataba de desplazamientos sobre los dos ejes del shape a partir de su posicion real.  Entiendo entonces que si tienes una coordenada (0, 50), significa que el top queda igual pero el left corresponde al 50% del ancho del shape ?

Victor

Victor Espina

unread,
Mar 2, 2016, 11:53:23 AM3/2/16
to Comunidad de Visual Foxpro en Español
Di clases cuando era muy joven y, la verdad, no creo que lo haria de nuevo... Se necesita una cierta vocacion para eso que yo, definitivamente no tengo :)


Victor

Elides Paredes

unread,
Mar 2, 2016, 5:55:28 PM3/2/16
to Comunidad de Visual Foxpro en Español


Hablando como el chavo.

He visto personas pretenciosas, normales, modestas, muy modestas  y Víctor. Señor usted es todavía un maestro. Tienes pedagogía hasta por aquí, de forma presencial, con un profesor así yo también sería un maestro en meses. jajaja. Me da risa al recordar al chavo, pero es muy en serio. Eso pienso. Y de Luis Ma. pues.. exactamente igual. Eso lo reconoce mucha gente en el mundo entero.

He estado trabajando todo el día sobre tu teoría de funcionamiento  y no me dió ningún error, me sorprendió mucho la explicación de Luis porque también reconozco que si el dice que una gallina es negra, no le busco plumas blancas. Y mi duda es ¿qué no vi yo?

Así que estoy asimilando lo que me dice.  el sensei Luis. para afianzar mis conocimientos. Lo cual es lo que siempre obtengo en éste foro.

Mil gracias a ambos, ya les diré (quizás mañana mismo), como quede. o como quedaré, jajaja, ahorita quedé aturdido,,

Victor Espina

unread,
Mar 3, 2016, 1:35:40 PM3/3/16
to Comunidad de Visual Foxpro en Español
Ja ja, me hiciste recordar mi infancia con eso de El Chavo. Fue parte fundamental de mi niñez, y la de mis hijas  y sera tambien de mi nieto, si tengo algo que decir al respecto.  

Victor

Miguel A.

unread,
Mar 3, 2016, 3:23:18 PM3/3/16
to Comunidad de Visual Foxpro en Español
Jolines Víctor, ya eres abuelo también?

Creo que va siendo hora de montar un nuevo grupo de "abuelos del foxpro", puede ser divertido y cada día tendría nuevos adeptos y socios, porque haciendo un recuento facilón la media debe pisar ya los 50 (algunos los 60). 

Mi nieto tiene 3 semanas y flipo en colores con él, solo espero llegar a verlo recoger su título de ingeniero, aunque para entonces no sé de qué especialidad será... me conformo con que no se decante por la abogacía.

Que tengáis un buen finde,
Miguel A.

Victor Espina

unread,
Mar 4, 2016, 6:48:37 AM3/4/16
to Comunidad de Visual Foxpro en Español
Ja ja ja.... si, mi nieto ya tiene 4 años... somos los unicos hombres de la casa :D   Y yo creo que este va a ser musico mas bien. :)

Victor
Reply all
Reply to author
Forward
0 new messages