PDA

Ver la Versión Completa : Gráfica de curvas


lfidanza
14-07-2003, 19:19:16
Hola, soy muy nueva programando y tengo una duda que seguramente alguien me la podrá sacar.
Necesito graficar una curva de una señal a lo largo del tiempo. Yo siempre hice esto colocando puntos o lineas en un PaintBox, utilizando el Canvas. Pero el problema con este componente es que cada ves que se abre una venta y se cierra se me borra parte de la curva.
Lo otro que probé fué con una Image, pero los procesos son muy lentos. Y como tengo que ir desplazando la curva a medida que avanzan los puntos fuera del Image, eso me significa borrarlo y volver a graficar todos los puntos un pixel corrido hacia la izquieda. Lo cual me demora demasiado.
Alguien sabe cual es la herramienta mas apropiada para esta aplicación?? y cómo hago para que se vaya desplazando la curva hacia la izquierda de una manera mas sencilla??

Muchas gracias !!!

andres1569
14-07-2003, 19:45:15
Hola:

En cuanto a lo de dibujar la linea de forma rápida, la mejor manera es usando una operación XOR, aunque con ello pierdas la de ventaja de ver la línea dibujada de un color concreto. La técnica consiste en dibujar la línea, aplicando previamente a la propiedad Mode del objeto Pen, la operación raster pmNOTXOR. Esto hace que la línea se dibuje en el color inverso del que hay en el Canvas (por ello no se dibuja de un color concreto), con la ventaja de que cuando vuelves a dibujar encima, devuelve la imagen a su color inicial, así te ahorras el tiempo de redibujado del fondo. Si quieres que la línea se actualice con mucha frecuencia, seguramente ésta es la mejor opción. El algoritmo sería más o menos este:
Pen.Mode := pmNOTXOR;
DibujaLinea;

// aquí va el bucle que grafica las curvas
repeat
DibujaLinea; // se dibuja la línea anterior para borrarla
CambiaDatosCurva; // se obtienen los datos de la nueva curva
DibujaLinea; // dibjamos la nueva curva
end;

DibujaLinea; // por último borramos la curva de la pantalla

También hay componentes por ahí que hacen todo esto, normalmente de pago, dependiendo de la profesionalidad de lo que quieras obtener, quizás te interesen.

delphi.com.ar
14-07-2003, 20:09:39
Me parece que lo que tu necesitas es redibujar el componente cada ves que este lo requiera, o si el gráfico es demasiado lento de dibujar, hacerlo en un TBitmap y dibujar el bitmap sobre tu componente cuando este lo necesite.

Si lugar a dudas, tu clase tendría que ser algo como esta, y en el paint dibujar tus curvas: (con todo respeto :D)
TCurvas = TGraphicControl
protected
procedure Paint; override;
end;


Saludos!

Julià T.
14-07-2003, 23:00:27
Creo que lo que le pasa es que dibuja directamente sobre el canvas del formulario, por lo que al abrir una ventana encima de esta, una parte del dibujo canvas se pierde, por el que se redibuja por defecto.

Pienso que lo más práctico es poner un TImage i dibujar sobre el canvas que lleva (ej: image1.picture.bitmap.canvas), que este no se mantendrá aunque se abran ventanas encima.

hackcgm
09-09-2010, 05:42:05
Hola A Todos Como Puedo Dibujar Una Onda Senoidal Espero Q Me Puedan
Ayudar No Se Si Como Empezar