// Este es el archivo AreaGrafica.h #ifndef AREAGRAFICA_H #define AREAGRAFICA_H // Includes... #include "GL/gl.h" // Incluye OpenGL por supuesto! #include "GL/glx.h" // glx para el doble bufferero. #include "General.h" #include "Punto.h" #include "Color.h" #include "Imagen.h" #include "Histograma.h" // No se deben incluir ninguna de las clases derivadas de la coleccion pues // esta ya incluye el AreaGrafica, de lo contrario hay problemas... class C_Volumen; // el include esta en el .cpp // --------------------------------------------------------------------- enum {DosDimensiones,TresDimensiones}; class C_AreaGrafica { protected: // Informacion del area. int Ancho; // Ancho del area grafica int Alto; // Alto del area grafica C_Color ColorDibujo; // COlor del dibujo (?) C_Color ColorFondo; // Color del fondo float Intensidad; // Intensidad 0.0 min 1.0 max (para las imagenes). bool DobleBuffer; // Usar doble buffer? bool DibujarMarco; // Dibujar marco alrededor de imagenes? bool Iluminar; // Iluminar objetos 3D? byte Tipo; // Es 2D o 3D ? Default:2D // Valores que afectan a objetos 3D //C_Punto PosObjeto; // Posicion del objeto 3D. C_Punto PosCamara; // Posicion de la camara. C_Punto PosLampara; // Posicion de la fuente de luz. //C_Punto AnguloObjeto; // Angulo del objeto. C_Punto VolumenVisual; // x=ancho. y=alto. z=profundidad. public: C_AreaGrafica(); // Constructor ~C_AreaGrafica(); // Destructor void Limpia(); // Limpia el area grafica void CambiaTamano(int x,int y); // Cambia el tamano del area grafica void DibujaPunto(int x,int y); // Pone un punto en la posicion x,y void DibujaLinea(int x1,int y1,int x2,int y2); // Pone una linea bool DibujaImagen(int x,int y,int factor,C_Imagen &Im); void DibujaMarco(int x,int y,int ancho,int alto); void DibujaHistograma(C_Histograma &,int factorX,int factorY,int LimIzq,int LimDer); // bool DibujaVolumen(byte PuntosPorFaceta,C_ListaPuntos *Puntos,C_ListaColores *Colores,C_ListaPuntos *Normales); bool DibujaVolumen(C_Volumen &); // Cambios void CambiaColorDibujo(C_Color &NuevoCol); void CambiaColorDibujo(float,float,float); void CambiaColorFondo(C_Color &NuevoCol) {ColorFondo.Copia(NuevoCol);} void CambiaIntensidad(float NuevaIntensidad) {Intensidad=NuevaIntensidad;} void CambiaDibujarMarco(bool NuevoValor) {DibujarMarco=NuevoValor;} void CambiaA2D(); // En 2D automaticamente es 1 pixel por entero. void CambiaA3D(); // void CambiaPosObjeto(C_Punto &NuevaPos); // void CambiaAnguloObjeto(C_Punto &NuevoAngulo); void CambiaPosCamara(C_Punto &NuevaPos); void CambiaPosLampara(C_Punto &NuevaPos); void CambiaVolumenVisualizacion(C_Punto &NuevoVolumen); // Consultas int LeeAncho() {return Ancho;} int LeeAlto() {return Alto;} // Extras void UsaDobleBuffer(bool NuevoValor); // Usa doble buffer. bool Activa(Display *,GLXDrawable,void *); // Activa el contexto. void MuestraBuffer(Display *,GLXDrawable); // Intercambia los buffers si hay doble buffer. void FiguraTest(); // Dibuja una figura de prueba. void Ilumina(); // Habilita las opciones de iluminacion. void MuestraEjes(); // Muestra los ejes. }; #endif