Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Clase Paint, Empalmar Arcos Con Segmentos Y Rellenar Con Fill
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Clase Paint, Empalmar Arcos Con Segmentos Y Rellenar Con Fill 
 
Hola amigos,

después de un tiempo sin escribir en el foro, de nuevo estoy por aquí con una duda. En un drawing area estoy dibujando una serie de segmentos de línea y de arcos concatenados, de modo que forman un path o ruta. Después hago Paint.Stroke o Paint.Fill. El problema es que cuando dibujo un arco, el punto inicial de ese arco no queda soldado con el segmento o arco que se hubiera dibujado previamente. Si hacéis zoom dinámico y os aproximás a los vértices del ejemplo que adjunto, veréis lo que digo. Sólo el vértice 2 empalma correctamente, porque sale de arco y entra en segmento. El resto no están soldados. Incluso si os acercáis mucho mucho se empieza a ver que los extremos de las dos líneas cambian de posición relativa de un paso de zoom al siguiente.

Si se trata de Paint.Fill el problema tiene aun más consecuencias. Podéis alternar con los radio button para verlo.

Gracias.

Pablo

Empalmararcosconlineas-0.0.tar.gz
Descripción:  
Descargar
Nombre del archivo: Empalmararcosconlineas-0.0.tar.gz
Tamaño: 6.12 KB
Descargado: 62 veces
Empalmararcosconlineas-0.0.tar.gz
Descripción:  
Descargar
Nombre del archivo: Empalmararcosconlineas-0.0.tar.gz
Tamaño: 6.12 KB
Descargado: 62 veces
Empalmararcosconlineas-0.0.tar.gz
Descripción:  
Descargar
Nombre del archivo: Empalmararcosconlineas-0.0.tar.gz
Tamaño: 6.12 KB
Descargado: 62 veces

 



 
Alaplancha - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Clase Paint, Empalmar Arcos Con Segmentos Y Rellenar Con Fill 
 
Hola Alaplancha.

Si lo dibujases a mano, ¿ como explicarías el problema ?.
¿ El segmento es más corto ?.
¿ El arco no ha comenzado donde debía comenzar ?.
¿ Es realmente el final del segmento el comienzo del ángulo?
¿ Puedes ver esos valores de alguna forma si son los que tu quieres para comprobar el correcto funcionamiento ?.

Lamento no ser de mucha ayuda. Es un tema que me gusta.

Puede que sea un problema de precisión. El que peor queda es el 1º.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Clase Paint, Empalmar Arcos Con Segmentos Y Rellenar Con Fill 
 
He probado una cosa, produce un efecto raro.

¿ Cómo es que tienes tanto al final del primer bucle como del segundo bucle las opciones de Fill o Stroke ?.

Esto es lo que he probado.
Deja al final del ultimo bucle esto activo:

  If rdbStroke.Value Then Paint.Stroke
 

Comenta los otros.

Ahora haz un zoom dinámico al  punto 0, hasta que llegues bien cerca, los segmentos no están unidos y además se mueven al hacer el zoom,
quedando peor la unión.


Aclaro. Es el mismo efecto, si se tienen descomentadas las lineas que dije antes. ¿ Puede ser un problema del zoom ?
Ya nos dirás como es que tienes varias lineas repes para el Fill o Sroke
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Domingo, 22 Febrero 2015, 01:24; editado 4 veces 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Clase Paint, Empalmar Arcos Con Segmentos Y Rellenar Con Fill 
 
Hola Shell,

muchas gracias por tu respuesta. Creo que puede ser un problema de precisión interna de gambas. Adjunto un croquis de la figura del ejemplo que quiero dibujar:

 03

Tenemos a la izquierda un arco de 180º y radio 5, y a la derecha un arco de 140º y radio 3. Los dos segmentos no son tangentes a los arcos, y esto está pensado a propósito en el ejemplo para que se vea más fácilmente el punto de unión. Que la unión entre arco y segmento sea quebrada no influye para nada en el problema, sólo quiere decir que la tangente a la izquierda y la tangente a la derecha del punto de union no son la misma tangente. Pero quebrado o no, el caso es que segmento y arco están soldados, pues las coordenadas de sus extremos corresponden al mismo punto. Pero gambas no los representa soldados. Adjunto también dos imágenes con zooms consecutivos. Las coordenadas almacenadas en la matriz no han cambiado, y sin embargo la posición relativa de los extremos de arco y segmento cambia.

 01
 02

Me preguntabas por qué están duplicados los Paint.Stroke y Paint.Fill, y tienes totalmente razón. Hay una primera parte en la que pinto la figura geométrica (con su path, Stroke/Fill) y una segunda parte en la que pinto los números (con sus paths, Stroke/Fill). En realidad puedo suprimir los primeros.

Hace ya unas semanas que ando con este problema y no le encuentro solución. Como decías, debe de ser un problema de precisión. De hecho, si cambio la línea 104 que dice:

If Contorno[Cont, 0] = 2 Then Paint.Arc(x1, y1, r, ang1, arco)
 


Por las siguientes lineas:

If Contorno[Cont, 0] = 2 Then
          Paint.Arc(x1, y1, r, ang1, arco)      
          Print Paint.X / Escala + OrigenSx, OrigenSy - Paint.Y / Escala ' Cambio del sistema del coordenadas D (dot) al sistema U (universal)
Endif
 


 vemos que los valores que imprime son ligeramente distintos a los de la matriz Contorno, y no sólo distintos sino que además son variables, lo cual explicaría las imágenes 01 y 02 que adjunto).

¿Posible solución? No querría llegar a utilizar Paint.CurveTo del ejemplo 8 que viene con el ejemplo Paint de gambas. Recurrir a una curva bezier para pintar un arco me parece exagerado

Saludos
 



 
Alaplancha - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Clase Paint, Empalmar Arcos Con Segmentos Y Rellenar Con Fill 
 
Hola Alaplancha.

Es una buena pregunta. Esperemos un poco a los compañeros a ver si pueden orientarte y en caso que no podamos,
ayudarte a que puedas preguntar esto en el foro de la comunidad internacional de gambas. Merece la pena.

Todo depende de la prisa que tengas con esta pregunta.

Nuestro administrador estuvo en su día haciendo unos ejemplos de animaciones básicas, usando valores enteros y reales y los resultados,
eran distintos. Lo que demuestra que puede haber cierto problema de precisión.  No creo que podamos llegar a tanta usando Paint.  

Aun así. Se supone que tu le dices a gambas. Comienzas desde un punto. Traza un segmento. Comienza desde el origen y tiene un final.
Si, vuelves a dibujar otro segmento, debe comenzar donde acabo el primer segmento. No debería partirse. Puede que ocurran efectos
raros con la precisión.

Uno de los problemas que vemos en tu ejemplo solo al iniciar, es que ya el punto 1, esta quebrada la recta.
No es necesario ni hacer zoom para poder verlo.

No se hasta que nivel le podemos exigir al DrawingArea y sus valores.  

¿ Probaste a hacer algo parecido con números enteros ?      


Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Clase Paint, Empalmar Arcos Con Segmentos Y Rellenar Con Fill 
 
Hola de nuevo Shell, y de nuevo gracias por tu tiempo e interés,

espero que esto no llegue a ser un problema internacional   ya tiene el mundo muchos problemas.

No tengo urgencias de tiempo, es sólo que estaba haciendo un programilla para mí mismo y me encontré con este problemilla.

La clase Paint utiliza precisión Float, creo, ya que miré en la documentación y Paint.X, Paint.Y, Paint.LineTo, Paint.Arc, etc. manejan parámetros de tipo Float. De todos modos he probado a dibujar por si acaso haciendo Int() en los argumentos de cualquier llamada a Paint.LineTo o Paint.Arc y nada, el problema continúa.

El asunto es que si sólo fuese una poligonal de segmentos de línea todo saldría bien, ya que Paint.MoveTo ( X As Float, Y As Float ) añade un segmento tomando como origen las coordenadas donde nos quedamos anteriormente (Paint.X, Paint.Y) y como destino los argumentos que le pasamos X, Y. En cambio el procedimiento Paint.Arc no es algo así como Paint.ArcTo, es decir, que no comienza en donde nos quedamos anteriormente (Paint.X, Paint.Y). El arco no sabemos nunca dónde comienza, aunque sí sabemos donde termina, ya que al hacer Paint.Arc las coordenadas del final del arco quedan almacenadas en Paint.X y Paint.Y. Lo cual quiere decir que si después de un arco dibujamos un segmento, sí que quedan bien soldados (punto 2 del dibujo ejemplo).

Segmento --> Segmento   Bien, se sueldan
Segmento --> Arco           Mal, no se sueldan (Punto 1)
Arco --> Segmento           Bien, se sueldan (Punto 2)
Arco --> Arco                   Mal, no se sueldan

Si meto un Paint.Closepath al final, otro desastre, me une los dos extremos del último arco.

En fin, ya empiezo a ver arcos y flechas por todas partes, y no es un ataque de hiperactividad de Cupido, cielos.

Saludos
 



 
última edición por Alaplancha el Domingo, 22 Febrero 2015, 17:35; editado 1 vez 
Alaplancha - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Clase Paint, Empalmar Arcos Con Segmentos Y Rellenar Con Fill 
 
Hola de nuevo, amigos,

sigo sin encontrar solución para este problema. Adjunto una nueva versión en la que trazo cuatro pequeñas líneas de segmento de recta (segmentos) para cerrar arcos con segmentos en los cuatro vértices. Para hallar las coordenadas del punto de inicio de cada arco, hago una primera pasada "dibujando" los arcos a la inversa, y obteniendo las coordenadas Paint.X, Paint.Y.

También he añadido por consola unos Print para saber las coordenadas de esas pequeñas cuatro líneas de sutura.

Todo ha sido inútil. Cuando activo el radiobutton de Fill sigue pintando mal el relleno.

  no sé si hacer alguna ofrenda o encomendarme a los dioses, pero esa es otra, tengo mis dudas entre Apolo, Ra o Ea  

Saludos

Empalmararcosconlineas-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: Empalmararcosconlineas-0.0.1.tar.gz
Tamaño: 127.94 KB
Descargado: 63 veces
Empalmararcosconlineas-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: Empalmararcosconlineas-0.0.1.tar.gz
Tamaño: 127.94 KB
Descargado: 63 veces
Empalmararcosconlineas-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: Empalmararcosconlineas-0.0.1.tar.gz
Tamaño: 127.94 KB
Descargado: 63 veces

 



 
Alaplancha - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Clase Paint, Empalmar Arcos Con Segmentos Y Rellenar Con Fill 
 
Hola Alaplancha

Creo que tiene que ser un bug, pero desconozco si es provocado por gambas o directamente en Cairo, que es la librería que usa gambas para la clase Paint.

Posiblemente puedas recibir más ayuda de Benoit si planteas la pregunta en la lista de correo de gambas, es posible que entre los usuarios de este foro no haya nadie que pueda ofrecer una solución, ni tan siquiera una explicación. El ejemplo que has subido es válido para demostrar el fallo y será de gran ayuda a los desarrolladores para una posible solución.

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Clase Paint, Empalmar Arcos Con Segmentos Y Rellenar Con Fill 
 
Hola Jesús,

gracias a ti también por la respuesta. Voy a intentar escribir en la lista de correo de gambas y con lo que contesten volveré después aquí y os cuento.

Saludos
 



 
Alaplancha - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes La Clase Paint Es Lenta Alaplancha General 8 Viernes, 10 May 2013, 08:30 Ver último mensaje
shordi
No hay nuevos mensajes Futuro De La Clase Paint Shell General 9 Martes, 03 Diciembre 2013, 13:17 Ver último mensaje
Shell
No hay nuevos mensajes ¿ Es Posible Hacer Un Relleno En Imágene... Shell General 13 Jueves, 01 Octobre 2015, 00:08 Ver último mensaje
Shell
No hay nuevos mensajes Ejemplos De La Clase Paint. Painting Shell General 0 Jueves, 17 Diciembre 2015, 21:59 Ver último mensaje
Shell
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron