Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Gráfica de curvas (https://www.clubdelphi.com/foros/showthread.php?t=2215)

lfidanza 14-07-2003 18:19:16

Gráfica de curvas
 
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 18: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:
Código:

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 19: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)
Código:

  TCurvas = TGraphicControl
  protected
    procedure Paint; override;
  end;

Saludos!

Julià T. 14-07-2003 22: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 04:42:05

Hola A Todos Como Puedo Dibujar Una Onda Senoidal Espero Q Me Puedan
Ayudar No Se Si Como Empezar


La franja horaria es GMT +2. Ahora son las 01:14:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi