Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Ayuda con rotacion de graficas (https://www.clubdelphi.com/foros/showthread.php?t=16123)

jose_2057111 17-11-2004 00:27:44

Ayuda con rotacion de graficas
 
:p
Holasssssss a todos.
Delphianos no se si me puedan ayudar o entender
Estoy trabajando con canvas.poligon
Al programa se ingresa puntos y grafica la grafica uniendo estos puntos
Ahora esta figura tiene que rotar es decir tenemos que ingresar un angulo
hasta ahi bien.
Tambien se aplica escalamiento es decir disminuyes o aumentas el tamano de tu figura.

Imagencen que tengo un cuadrado y luedo lo minimiso a la mitad pero las lineas cruzan por los lados del cuadrado grande.
y ahora yo la misma figura tiene que rotar digamos 45 grados entonces tengo que limpiar la imagen de achicamiento a la mitad.
Lo que pasa es que la figura inicial debe quedar como muestra
y despues ir haciendo operaciones con este grafico.
Loque pretendo es crear una opcion limpiar la cree haciendo que los puntos anteriores se pinten de blanco pero el grafico anterior esta de rojo y este modifica al grafico anterior .

espero que me entiendan....

<Sergio> 17-11-2004 06:38:42

"Delphianos" no Delphinos, Delfinos o elfos está mejor :D.

Para borrar el gráfico anterior y evitar parpadear:

1.- Trabaja todo creando un Tbitmap "Mibitmap" que también tiene un Tcanvas. El bitmap debe tener la propiedad HandleType:=bmDIB (Independiente de dispositivo por lo tanto de resolución actual de pantalla) y los bits por pixel en la profundidad que más te paresca.
2.- Para mostrar en pantalla usa un TpaintBox y en su onpaint haz un bitblt(.....,SRCCOPY) del Mibitmap.canvas.handle para hacerlo un poco más rápido.

BOOL BitBlt(

HDC hdcDest, // handle of destination device context
int nXDest, // x-coordinate of destination rectangle's upper-left corner
int nYDest, // x-coordinate of destination rectangle's upper-left corner
int nWidth, // width of destination rectangle
int nHeight, // height of destination rectangle
HDC hdcSrc, // handle of source device context
int nXSrc, // x-coordinate of source rectangle's upper-left corner
int nYSrc, // y-coordinate of source rectangle's upper-left corner
DWORD dwRop // raster operation code
);

3.- En lugar de borrar simplemente haz un bitblt con la última opcion en blackness, whiteness o patcopy para usar el Tbrush (con esto "limpias" el bitmap en memoria) y luego vuelve a dibujar todos los objetos gráficos no borrados.

Para optimizar puedes hacer esto: Para cada gráfico definir un rectángulo que lo contenga. Así que cuando tengas que actualizar una parte de tu bitmap Preparas el pedazo que tiene que actualizarse primero limpiando esa parte (poniendo todo en blanco por ejemplo) y luego dibujando en esa parte sólo los gráficos cuyos rectángulos se intersectan con la figura que fue borrada.


La franja horaria es GMT +2. Ahora son las 12:12:56.

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