|
Página 1 de 1
|
Rotar Un Rectangulo Dibujado En Un DrawingArea
Autor |
Mensaje |
xmuno
Usuario
Registrado: Febrero 2015
Mensajes: 49
Edad: 51
|
Rotar Un Rectangulo Dibujado En Un DrawingArea
Hola a todos,
Dibujo un texto en un drawing area:
Paint.Font = Font[tx.fn & "," & tx.fs]
Paint.DrawText(tx.tx, (tx.x * x), (tx.y * y), (tx.w * x), (tx.h * y))
Paint.Rotate(Rad(graus))
Paint.Stroke
El texto se dibuja pero no consigo la rotación.
He probado con un rectangulo:
Paint.LineWidth = 2
Paint.Rectangle((tx.x * x), (tx.y * y), (tx.w * x), (tx.h * y))
Paint.Rotate(Rad(graus))
Paint.stroke
Con el rectangulo si consigo la rotación, pero con desplazamiento(no sobre su eje)
He leido en el foro y fuera de el este tipo de cosas con imágenes, utilizando Paint.translate. He hecho algunas pruebas sin éxito.
Que hago mal?
Gracias a todos.
última edición por xmuno el Viernes, 02 Octobre 2015, 18:49; editado 6 veces
|
#1 Viernes, 02 Octobre 2015, 18:44 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Rotar Un Rectangulo Dibujado En Un DrawingArea
Hola
Echa un vistazo al artículo que escribí en el blog (hace ya 2 años!! que barbaridad, y no he escrito nada desde entonces )
Ve a la sección que dice "Dibujando la nave" donde explico cómo encarar el problema de la rotación y el desplazamiento sobre el eje.
http://blog.gambas-es.org/aceleracion-y-friccion/
Espero que te sirva de ayuda, 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"
|
#2 Viernes, 02 Octobre 2015, 19:09 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Rotar Un Rectangulo Dibujado En Un DrawingArea
Hola xmuno,
el miembro del foro italiano, Gianluigi, me pidió de ponerte a disposición este su código, aquì agregado.
http://www.gambas-it.org/smf/index....g37099#msg37099
Descripción: |
|
Descargar |
Nombre del archivo: |
RuotaRettangolo-0.0.1.tar.gz |
Tamaño: |
6.24 KB |
Descargado: |
43 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
RuotaRettangolo-0.0.1.tar.gz |
Tamaño: |
6.24 KB |
Descargado: |
43 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
RuotaRettangolo-0.0.1.tar.gz |
Tamaño: |
6.24 KB |
Descargado: |
43 veces |
última edición por vuott el Viernes, 08 Abril 2016, 09:20; editado 2 veces
|
#3 Sabado, 03 Octobre 2015, 00:19 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Rotar Un Rectangulo Dibujado En Un DrawingArea
Hola Vuott.
He cambiado esto en el código de rotación del rectángulo.
Public Sub btLeft_Click()
' Ogni volta che si agisce sul tasto incrementa il valore di un ottavo di giro:
'' (positivo = senso antiorario)
fAngolo += 45
If fAngolo = 405 Then fAngolo = 45
'No se necesita
' bOk = True
'da.Refresh
attivaDisegno()
End
Public Sub btRight_Click()
' Ogni volta che si agisce sul tasto decrementa il valore di un ottavo di giro:
'' (negativo = senso orario)
fAngolo -= 45
If fAngolo = -405 Then fAngolo = -45
'No se necesita
'bOk = True
'da.Refresh
attivaDisegno()
End
Y otra cosa más. Sé que el tamaño del formulario no se ha tenido en cuenta.
Pero imaginar que por un motivo, queréis cambiar el tamaño del formulario, maximizarlo por ejemplo
Si lo hacéis el dibujo desaparecerá!.
Entonces hay que modificar el evento Resize y actualizar el contenido del DrawingArea, de esta forma:
'He añadido esto para que cuando se cambia de tamaño el formulario, no se pierda el dibujo
Public Sub Form_Resize()
attivaDisegno()
End
Quizás es un ejemplo complejo.
Nunca olvidéis ver el ejemplo Painting del propio gambas. Podéis bajarlo de la granja, lo tenéis en la sección ejemplos.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#4 Sabado, 03 Octobre 2015, 09:49 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Rotar Un Rectangulo Dibujado En Un DrawingArea
Vuott:
Mejor usar el componente gb.qt4 y no usar gb.gtk.
Puede tener comportamientos extraños.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Sabado, 03 Octobre 2015, 10:02; editado 1 vez
|
#5 Sabado, 03 Octobre 2015, 09:58 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Rotar Un Rectangulo Dibujado En Un DrawingArea
Si creamos un array de controles para los botones de rotación podemos agruparlo todo en un procedimiento:
He llamado al grupo de los dos botones, rotación.
Public Sub Rotacion_Click()
Select Case Last.tag
Case 0
' Ogni volta che si agisce sul tasto incrementa il valore di un ottavo di giro:
' positivo = senso antiorario
fAngolo += 45
If fAngolo = 405 Then fAngolo = 45
Case 1
' Ogni volta che si agisce sul tasto decrementa il valore di un ottavo di giro:
' negativo = senso orario
fAngolo -= 45
If fAngolo = -405 Then fAngolo = -45
End Select
attivaDisegno()
End
Observación:
Supongo que la intención del autor del código fue más para destacar algo que documentar.
Ejemplo:
Public Sub btLeft_Click()
' Ogni volta che si agisce sul tasto incrementa il valore di un ottavo di giro:
'' (positivo = senso antiorario)
fAngolo += 45
If fAngolo = 405 Then fAngolo = 45
attivaDisegno()
End
Como documentación (comentario con comillas dobles), creo que debería ser encima del procedimiento o función.
Dentro no hace nada.
Ah, los comentarios siempre son constructivos.
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#6 Sabado, 03 Octobre 2015, 13:28 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Rotar Un Rectangulo Dibujado En Un DrawingArea
Al igual nos ocurre con el tipo de rotación, tambien se puede crear un array de controles:
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#7 Sabado, 03 Octobre 2015, 13:42 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Rotar Un Rectangulo Dibujado En Un DrawingArea
Gracias, Shell, le referiré estas tus modificaciones allí en el foro.
|
#8 Sabado, 03 Octobre 2015, 13:58 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Rotar Un Rectangulo Dibujado En Un DrawingArea
Hola Shell,
el nuestro amigo, Gianluigi, te da las gracias por tus sugerencias, y me pide de decirte que, tras haber aportado los tus cambios sugeridos, si él no pone sPos = "Center" en el Sub Form_Open la ventana se presenta como puedes ver en el file imagen adjunto.
El te pregunta si este problema ocurre a ti tambien.
Descripción: |
|
Tamaño: |
20.04 KB |
Visto: |
28 veces |
|
Descripción: |
|
Tamaño: |
20.04 KB |
Visto: |
28 veces |
|
Descripción: |
|
Tamaño: |
20.04 KB |
Visto: |
28 veces |
|
última edición por vuott el Domingo, 04 Octobre 2015, 16:58; editado 1 vez
|
#9 Domingo, 04 Octobre 2015, 15:22 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Rotar Un Rectangulo Dibujado En Un DrawingArea
Hola Vuott.
Citar:
el nuestro amigo, Gianluigi, te da las gracias por tus sugerencias, y me pide de decirte que, tras haber aportado los tus cambios sugeridos,
si él no pone sPos = "Center" en el Sub Form_Open la ventana se presenta como puedes ver en el file imagen adjunto.
No tiene importancia. Lo hubiera hecho igual por cualquier programador de gambas de cualquier país.
El único problema es la barrera del idioma. (gran problema)
El efecto:
No, no creo que el problema sea de la variable sPos.
Cuando inicio el ejemplo el ordenador del trabajo, en cuestión de "segundos" desaparece el rectángulo
rápidamente.
En cambio si lo hago en el de casa, el rectángulo permanece, al igual que la imagen que me muestras.
Creo que tiene que ver un poco la configuración del escritorio (Qt 4 Settings).
Dile que pruebe a comentar todo el código (para probar) de Form_Resize()
Si ejecutamos el ejemplo paso a paso, Primero hace _New, Form_Open y luego Form_Resize()
Y eso incluye ejecutar acttivaDisegno(), cosa que al principio no queremos.
Las mejoras están bien, pero no están optimizadas.
Reparar:
Se muestre o no, al principio el rectángulo:
- Si usamos los botones rotar a la izquierda o a la derecha, aparece el rectángulo. (Quizás necesitemos una variable booleana mas o cambiar algo )
Vuott una cuestión. En la comunidad Italiana, ¿ habéis hecho más ejemplos de dibujos ?. Me gustaría conocerlos.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#10 Lunes, 05 Octobre 2015, 00:14 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|