/*--------------------------------------------------------------------
 * FICHERO:  Vzon.c
 * OBJETIVO: Probar el objeto Zona
 * AUTOR:    Pedro Reina
 * FECHA:    L.17.4.1995
 *------------------------------------------------------------------*/

/*--------------------------------------------------------------------
 * Ficheros de cabecera
 *------------------------------------------------------------------*/

#include "Zona.h"

/*--------------------------------------------------------------------
 * Declaracin de funciones
 *------------------------------------------------------------------*/

void P_Zon_Crea();
void P_Zon_Pixel();
void P_Zon_Oxel();
void P_Zon_Punto();
void P_Zon_Bloque();
void P_Zon_BloqueR();
void P_Zon_Linea();

/*--------------------------------------------------------------------
 * Programa principal
 *------------------------------------------------------------------*/
void main()
  {
  int Opcion, Sigue=1;
  contador Fil, Col;

  Pan_Define (PAN_TEXTO);
  while ( Sigue )
    {
    Pan_Limpia();
    Pan_Color (NEGRO,BLANCO);
    Fil = 0, Col = 3;
    Pan_PonTexto (Fil++,Col,"Prueba del objeto Zona" );
    Pan_PonTexto (Fil++,Col,"======================" );
    Fil++;
    Pan_PonTexto (Fil++,Col,"0. Fin del programa" );
    Pan_PonTexto (Fil++,Col,"1. Paso a grfico" );
    Pan_PonTexto (Fil++,Col,"2. Paso a texto" );
    Pan_PonTexto (Fil++,Col,"3. Zon_Crea()" );
    Pan_PonTexto (Fil++,Col,"4. Zon_Pixel()" );
    Pan_PonTexto (Fil++,Col,"5. Zon_Oxel()" );
    Pan_PonTexto (Fil++,Col,"6. Zon_Punto()" );
    Pan_PonTexto (Fil++,Col,"7. Zon_Bloque()" );
    Pan_PonTexto (Fil++,Col,"8. Zon_BloqueR()" );
    Pan_PonTexto (Fil++,Col,"9. Zon_Linea()" );
    Fil++;
    Pan_PonTexto (Fil++,Col,"Introduce nmero de opcin: " );
    scanf ( "%d", &Opcion );
    getchar();

    switch ( Opcion )
      {
      case 0:   Sigue = 0;               break;
      case 1:   Pan_Cierra();
                Pan_Define (PAN_GRAFICO);
                break;
      case 2:   Pan_Cierra();
                Pan_Define (PAN_TEXTO);
                break;
      case 3:   P_Zon_Crea();       break;
      case 4:   P_Zon_Pixel();      break;
      case 5:   P_Zon_Oxel();       break;
      case 6:   P_Zon_Punto();      break;
      case 7:   P_Zon_Bloque();     break;
      case 8:   P_Zon_BloqueR();    break;
      case 9:   P_Zon_Linea();      break;
      }
    }
  Pan_Cierra();
  }

/*--------------------------------------------------------------------
 * Funcin P_Zon_Crea()
 *------------------------------------------------------------------*/
void P_Zon_Crea()
  {
  zona Zona;

  Pan_Limpia();
  Pan_Color (NEGRO,BLANCO);
  Pan_PonTexto (0,0,"Prueba de Zon_Crea()");

  if ( Zona = Zon_Crea (2,2,6,20) )
    {
    Zon_Borra (Zona,VERDE);

    Pan_PonTexto (8,2,"Ancho en pixels: ");
    Pan_Entero (Zon_AnchoFisico(Zona),3);

    Pan_PonTexto (9,2,"Ancho en oxels: ");
    Pan_Entero (Zon_AnchoEnOxel(Zona),3);

    Pan_PonTexto (10,2,"Alto en pixels: ");
    Pan_Entero (Zon_AltoFisico(Zona),3);

    Zon_Destruye (Zona);
    }

  else
    { Pan_PonTexto (2,2,"No se puede crear zona"); }

  Pan_PonTexto (23,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Zon_Pixel()
 *------------------------------------------------------------------*/
void P_Zon_Pixel()
  {
  zona     Zona;
  contador MaxX, MaxY;

  Pan_Limpia();
  Pan_Color (NEGRO,BLANCO);
  Pan_PonTexto (0,0,"Prueba de Zon_Pixel()");

  if ( Zona = Zon_Crea (2,2,6,20) )
    {
    Zon_Borra (Zona,VERDE);

    MaxX = Zon_AnchoFisico(Zona);
    MaxY = Zon_AltoFisico(Zona);

    Zon_Pixel (Zona, 0,      0,      BLANCO);
    Zon_Pixel (Zona, MaxX-1, 0,      BLANCO);
    Zon_Pixel (Zona, 0,      MaxY-1, BLANCO);
    Zon_Pixel (Zona, MaxX-1, MaxY-1, BLANCO);

    Zon_Pixel (Zona, MaxX/2, MaxY/2, BLANCO);

    Zon_Pixel (Zona, 1,      1,      ROJO);
    Zon_Pixel (Zona, MaxX-2, 1,      ROJO);
    Zon_Pixel (Zona, 1,      MaxY-2, ROJO);
    Zon_Pixel (Zona, MaxX-2, MaxY-2, ROJO);

    Zon_Pixel (Zona, 2,      2,      NEGRO);
    Zon_Pixel (Zona, MaxX-3, 2,      NEGRO);
    Zon_Pixel (Zona, 2,      MaxY-3, NEGRO);
    Zon_Pixel (Zona, MaxX-3, MaxY-3, NEGRO);

    if ( ! Zon_Pixel (Zona, 1000, 1000, BLANCO) )
      { Pan_PonTexto (8,2,"El pixel (1000,1000) no existe en esta zona"); }

    Zon_Destruye (Zona);
    }

  else
    { Pan_PonTexto (2,2,"No se puede crear zona"); }

  if ( Zona = Zon_Crea (10,2,14,30) )
    {
    Zon_Borra (Zona,ROJO);

    MaxX = Zon_AnchoFisico(Zona);
    MaxY = Zon_AltoFisico(Zona);

    Zon_Pixel (Zona, 0,      0,      BLANCO);
    Zon_Pixel (Zona, MaxX-1, 0,      BLANCO);
    Zon_Pixel (Zona, 0,      MaxY-1, BLANCO);
    Zon_Pixel (Zona, MaxX-1, MaxY-1, BLANCO);

    Zon_Pixel (Zona, MaxX/2, MaxY/2, BLANCO);

    Zon_Pixel (Zona, 1,      1,      VERDE);
    Zon_Pixel (Zona, MaxX-2, 1,      VERDE);
    Zon_Pixel (Zona, 1,      MaxY-2, VERDE);
    Zon_Pixel (Zona, MaxX-2, MaxY-2, VERDE);

    Zon_Pixel (Zona, 2,      2,      NEGRO);
    Zon_Pixel (Zona, MaxX-3, 2,      NEGRO);
    Zon_Pixel (Zona, 2,      MaxY-3, NEGRO);
    Zon_Pixel (Zona, MaxX-3, MaxY-3, NEGRO);

    Zon_Destruye (Zona);
    }

  else
    { Pan_PonTexto (10,2,"No se puede crear zona"); }

  Pan_PonTexto (23,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Zon_Oxel()
 *------------------------------------------------------------------*/
void P_Zon_Oxel()
  {
  zona     Zona;
  contador MaxX, MaxY;

  Pan_Limpia();
  Pan_Color (NEGRO,BLANCO);
  Pan_PonTexto (0,0,"Prueba de Zon_Oxel()");

  if ( Zona = Zon_Crea (2,2,6,20) )
    {
    Zon_Borra (Zona,VERDE);

    MaxX = Zon_AnchoEnOxel(Zona);
    MaxY = Zon_AltoFisico(Zona);

    Zon_Oxel (Zona, 0,      0,      0xFF, BLANCO);
    Zon_Oxel (Zona, MaxX-1, 0,      0xF1, BLANCO);
    Zon_Oxel (Zona, 0,      MaxY-1, 0x8F, BLANCO);
    Zon_Oxel (Zona, MaxX-1, MaxY-1, 0x81, BLANCO);

    if ( ! Zon_Oxel (Zona, 25, 10, 0xFF, BLANCO) )
      { Pan_PonTexto (8,2,"El oxel (25,10) no existe en esta zona"); }

    Zon_Destruye (Zona);
    }

  else
    { Pan_PonTexto (2,2,"No se puede crear zona"); }

  Pan_PonTexto (23,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Zon_Punto()
 *------------------------------------------------------------------*/
void P_Zon_Punto()
  {
  zona Zona;

  Pan_Limpia();
  Pan_Color (NEGRO,BLANCO);
  Pan_PonTexto (0,0,"Prueba de Zon_Punto()");

  if ( Zona = Zon_Crea (2,2,6,20) )
    {
    Zon_Borra (Zona,VERDE);

    Zon_PuntoSeguro (Zona, 0.0,  0.0,  BLANCO);
    Zon_PuntoSeguro (Zona, 80.0, 0.0,  BLANCO);
    Zon_PuntoSeguro (Zona, 0.0,  80.0, BLANCO);
    Zon_PuntoSeguro (Zona, 80.0, 80.0, BLANCO);

    Zon_Escala (Zona, -100.0, -100.0, 0.0, 0.0);

    Zon_PuntoSeguro (Zona,  0.0,  0.0, BLANCO);
    Zon_PuntoSeguro (Zona,  0.0, 10.0, BLANCO);
    Zon_PuntoSeguro (Zona, 10.0,  0.0, BLANCO);
    Zon_PuntoSeguro (Zona, 10.0, 10.0, BLANCO);

    if ( ! Zon_Punto (Zona, 200.0, 200.0, BLANCO) )
      { Pan_PonTexto (8,2,"El punto (200.0,200.0) no existe en esta zona"); }

    Zon_Destruye (Zona);
    }

  else
    { Pan_PonTexto (2,2,"No se puede crear zona"); }

  Pan_PonTexto (23,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Zon_Bloque()
 *------------------------------------------------------------------*/
void P_Zon_Bloque()
  {
  zona Zona;

  Pan_Limpia();
  Pan_Color (NEGRO,BLANCO);
  Pan_PonTexto (0,0,"Prueba de Zon_Bloque()");

  if ( Zona = Zon_Crea (2,2,16,35) )
    {
    Zon_Borra (Zona,VERDE);

    Zon_Bloque (Zona,  0.0, 0.0, 25.0, 25.0, BLANCO);
    Zon_Bloque (Zona, 25.0, 0.0, 50.0, 25.0, NEGRO);

    Zon_Escala (Zona, -100.0, -100.0, 0.0, 0.0);

    Zon_Bloque (Zona,  0.0, 0.0, 25.0, 25.0, ROJO);
    Zon_Bloque (Zona, 25.0, 0.0, 50.0, 25.0, NEGRO);

    Zon_Destruye (Zona);
    }

  else
    { Pan_PonTexto (2,2,"No se puede crear zona"); }

  Pan_PonTexto (23,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Zon_BloqueR()
 *------------------------------------------------------------------*/
void P_Zon_BloqueR()
  {
  zona Zona;

  Pan_Limpia();
  Pan_Color (NEGRO,BLANCO);
  Pan_PonTexto (0,0,"Prueba de rendimiento de Zon_Bloque()");

  if ( Zona = Zon_Crea (2,2,21,77) )
    {
    Zon_Borra (Zona,ROJO);
    Zon_Bloque (Zona,  5.0, 5.0, 95.0, 95.0, BLANCO);
    Zon_Destruye (Zona);
    }

  else
    { Pan_PonTexto (2,2,"No se puede crear zona"); }

  Pan_PonTexto (23,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Zon_Linea()
 *------------------------------------------------------------------*/
void P_Zon_Linea()
  {
  zona Zona;

  Pan_Limpia();
  Pan_Color (NEGRO,BLANCO);
  Pan_PonTexto (0,0,"Prueba de Zon_Linea()");

  if ( Zona = Zon_Crea (2,2,21,77) )
    {
    Zon_Borra (Zona,ROJO);
    Zon_Linea (Zona,  5.0, 5.0, 95.0, 95.0, NEGRO);
    Zon_Linea (Zona, -5.0, 5.0, 95.0,110.0, BLANCO);
    Zon_Linea (Zona, 25.0,15.0, 85.0, 32.0, VERDE);
    Zon_Linea (Zona,  5.0, 5.0, 20.0, 90.0, BLANCO);
    Zon_Destruye (Zona);
    }

  else
    { Pan_PonTexto (2,2,"No se puede crear zona"); }

  Pan_PonTexto (23,0,"Pulsa ENTER para seguir: ");
  getchar();
  }
