miércoles, 5 de octubre de 2016

Botones En Processing

REALIZACIÓN DE BOTONES EN PROCESSING

Processing no cuenta por defecto funciones o clases que permitan la realización de elementos gráficos como botones u otro tipo de control.
Hay varias opciones, entre ellas la herramienta G4P GUI Builder que se puede instalar desde el propio entorno de desarrollo de Processing.

 
Ejemplo de uso de G4P GUI Bulider

 Ejemplo de código:

Otra opción es la programación propia de los controles  como el caso de este ejemplo que incluye un botón tipo encendido y apagado junto con un botón deslizante

Código fuente en Processing

Boton botonUno, botonDos;
SliderH sliderUno,sliderDos;
void setup() {
  size(800, 600);
  botonUno=new Boton(0, 0, 100, 50);
  botonDos=new Boton(100, 0, 100, 50);
  sliderUno=new SliderH(0,200,0,200);
  sliderDos=new SliderH(0,200,200,300);
}
void draw() {
  if (botonUno.getEstado()) {
    background(0);
  } else {
    background(255);
  }
  sliderUno.dibujar();
  sliderDos.dibujar();
  botonUno.dibujar();
  botonDos.dibujar();
  if(mousePressed){
    sliderUno.moverSlider(mouseX,mouseY);
    sliderDos.moverSlider(mouseX,mouseY);
  }
  println("Valor = "+int(sliderUno.calcularValor(0,360)));
  println("Id Boton "+botonUno.getIdOnOff());
}
void mousePressed() {
  botonUno.toggleOver(mouseX, mouseY);
  botonDos.toggleOver(mouseX, mouseY);
}
//Clase para realizar botones on off y con numeracion
class Boton {
  int posX, posY, anchoBoton, altoBoton, idNumero;
  color colorON, colorOff;
  boolean banderaOnOff;
  Boton(int x, int y, int ancho, int alto) {
    posX=x;
    posY=y;
    anchoBoton=ancho;
    altoBoton=alto;
    colorON=color(0, 255, 0);
    colorOff=color(255, 0, 0);
    banderaOnOff=false;
    idNumero=1;
  }
  void dibujar() {
    if (banderaOnOff) {
      fill(colorON);
    } else {
      fill(colorOff);
    }
    rect(posX, posY, anchoBoton, altoBoton);
  }
  void setOn() {
    banderaOnOff=true;
  }
  void setOff() {
    banderaOnOff=false;
  }
  void toggle() {
    banderaOnOff=!banderaOnOff;
  }
  void setDimensiones(int x, int y, int ancho, int alto) {
    posX=x;
    posY=y;
    anchoBoton=ancho;
    altoBoton=alto;
  }
  void toggleOver(int x, int y) {
    if (x>posX && x<(posX+anchoBoton) && y>posY && y<(posY+altoBoton)) {
      banderaOnOff=!banderaOnOff;
    }
  }
  boolean getEstado() {
    return  banderaOnOff;
  }
  void setIdentificacion(int numero) {
    idNumero=numero;
    if (idNumero<=0)//las identificaciones no pueden ser menores o iguales a cero
      idNumero=1;//identificacion por defecto
  }
  int getIdentificacion() {
    return idNumero;
  }
  int getIdOnOff() {//retorna la identificacion se esta on y cero si esta off
    int id;
    if (banderaOnOff) {
      id=idNumero;
    } else {
      id=0;
    }
    return id;
  }
}
//Clase para realizar botones deslizantes
class SliderH {
  int orgX, finX, posX, posVer;
  float minVal, maxVal, resVal;
  color colorSlider;
  SliderH(int x0, int x1, int px, int posv) {
    orgX=x0;
    finX=x1;
    posX=px;
    posVer=posv;
    colorSlider=color(0, 0, 255);
    minVal=x0;
    maxVal=x1;
  }
  void dibujar() {
    line(orgX, posVer, finX, posVer);
    fill(colorSlider);
    rect(posX-5, posVer-10, 10, 20);
  }
  int moverSlider(int x, int y) {
    if (x>=orgX && x<= finX) {
      if (x>(posX-5) && x<(posX+10) && y>(posVer-10) && y<(posVer+20)) {
        posX=x;
      }
    }
    return posX;
  }
  int incSlider(int inc) {
    posX=posX+inc;
    if (posX>finX) {
      posX=finX;
    }
    return posX;
  }
  int decSlider(int dec) {
    posX=posX+dec;
    if (posX<orgX) {
      posX=orgX;
    }
    return posX;
  }
  int getPos() {
    return posX;
  }
  void setPos(int px) {
    posX=px;
    if (posX>finX) {
      posX=finX;
    } else if (posX<orgX) {
      posX=orgX;
    }
  }
  void setValores(float min, float max) {
    minVal=min;
    maxVal=max;
  }
  float calcularValor(float min, float max) {
    minVal=min;
    maxVal=max;
    resVal=map(posX, orgX, finX, minVal, maxVal);
    return resVal;
  }
}