Sistema coordenadas en PictureBox

30/05/2005 - 07:35 por Maria Agustina Paz | Informe spam
Hola. Necesito saber como modificar el sistema de coordenadas por defecto que
tienen los PictureBox del framework .NET para dibujar lineas, puntos,
elipses, etc.
Por defecto el punto 0,0 donde se cruzan los ejes x,y esta en el vertice
arriba a la izquierda del control PictureBox, y el eje Y es positivo hacia
abajo.
Necesito que mi sistema de coordenadas tenga el punto 0,0 en el centro del
PictureBox y el eje Y sea positivo hacia arriba.

En versiones anteriores esto se hacia FACILMENTE con el metodo Scale o con
las
propiedades ScaleTop, ScaleLeft, ScaleHeigh, ScaleWidht, pero no se como
hacer lo mismo en .NET

He intentado hacerlo manipulando el objeto Graphics que se obtiene con el
metodo CreateGraphics del PictureBox, pero no he conseguido hacerlo. Creo que
debe ser muy facil hacerlo pero no consigo darme cuenta.

Saludo y gracias si alguien puede dar una respuesta
 

Leer las respuestas

#1 Tristan
30/05/2005 - 11:02 | Informe spam
En versiones anteriores esto se hacia FACILMENTE con el metodo Scale o con
las
propiedades ScaleTop, ScaleLeft, ScaleHeigh, ScaleWidht, pero no se como
hacer lo mismo en .NET



En realidad, puesto que tu pregunta está en un foro de C#, ten en cuenta que
no hay versiones anteriores de este lenguaje. En todo caso, a lo único a lo
que podriamos llamar versión anterior sería al api win32, o a las MFC. En el
api del GDI de win32 no existen esas propiedades. La forma de trabajo es muy
similar a la del GDI+ de .net.

En .net lo que quieres se haría así:

En el Paint del PictureBox:

e.Graphics.TranslateTransform(PictureBox1.Width / 2, PictureBox1.Height / 2);
e.Graphics.ScaleTransform(1, -1);
e.Graphics.DrawLine(Pens.Red, 0, 0, 0, 100);
e.Graphics.DrawLine(Pens.Blue, 0, 0, 100, 0);

Pero ten en cuenta que al realizar una transformación, todo lo que dibujes
queda afectado. Por ejemplo tras el TransformScale(), todo el texto que
dibujes posteriormente se escribirá volteado hacia abajo.

Por cierto, un detalle importante. Has hablado de CreateGraphics. Este
método tiene poca utilidad en tu caso. Si dibujas un control fuera del evento
de Paint, el dibujo no será persistente. Se borrará en cuanto pongas una
ventana sobre él, o simplemente al minimizar y restaurar. El evento de Paint
te ofrece un graphics en su parámetro "e". Lo que dibujes en Paint si será
persistente.

Es posible dibujar de forma persistente si necesidad de hacer uso del evento
de Paint, pero no es mediante CreateGraphics().

Juan Carlos Badiola Saiz
MVP - C#

Preguntas similares