Áreas de constraint (II)

En este ejemplo de programa HOST se pinta un círculo en el tabletop 1. La superficie del tabletop está dividida en 3 áreas. El color del círculo cambia a rojo, verde o azul, dependiendo de si el fiducial 1 se pone en el área de la izquierda, en el área del centro o en el área de la derecha, respectivamente. Además, dependiendo de la posición vertical del fiducial en el tabletop, el círculo tendrá más, o menos, intensidad.

Fichero displays.xml

<xml>
<virtualDisplay width="1600" height="1200"> 
 <display id="1" x="0" y="0" width="800" height="600" />
 <display id="2" x="800" y="0" width="800" height="600" />
 <display id="3" x="0" y="600" width="800" height="600" />
 <display id="4" x="800" y="600" width="800" height="600" />
</virtualDisplay>
</xml>

Fichero TUIML.xml
<juguemos>
 <token name="tabletop1">
  <constraint name="todo" type= "2D" list_vertex="0.0,0.0,1.0,0.0,1.0,1.0,0.0,1.0,0.0,0.0">
   <tac subtoken="1"/>
  </constraint>
  <constraint name="izquierda" type= "2D" list_vertex="0.0,0.0,0.33,0.0,0.33,1.0,0.0,1.0,0.0,0.0">
   <tac subtoken="1"/>
  </constraint>
  <constraint name="centro" type= "2D" list_vertex="0.33,0.0,0.66,0.0,0.66,1.0,0.33,1.0,0.33,0.0">
   <tac subtoken="1"/>
  </constraint>
  <constraint name="derecha" type= "2D" list_vertex="0.66,0.0,1.0,0.0,1.0,1.0,0.66,1.0,0.66,0.0">
   <tac subtoken="1"/>
  </constraint>
 <subtoken idG="1"/>
 </token>
 </juguemos>

Codigo Host en Proccessing

int ANCHO=1600;
int ALTO=1200;
int opcion = 0;
int intensidad = 255;
boolean verb = true;

TACAPI miAPI;
DisplaysHost displaysClient;

void setup() { 
 // Keystone will only work with P3D or OPENGL renderers, 
 // since it relies on texture mapping to deform
 //fullScreen( P3D);
 size(600, 400, P3D); 
 frameRate(16);
 miAPI = new TACAPI();
 
 //virtual screens
 displaysClient = new DisplaysHost("host"); 
}

void draw() {
 displaysClient.beginDraw();
 if(opcion == 1)
 displaysClient.elipse(400,300,200,200,255,0,0,intensidad);
 else { 
 if(opcion == 2)
 displaysClient.elipse(400,300,200,200,0,255,0,intensidad);
 else {
 if(opcion == 3)
 displaysClient.elipse(400,300,200,200,0,0,255,intensidad); 
 else
 displaysClient.elipse(400,300,200,200,255,255,255,intensidad);
 }
 }
 displaysClient.endDraw();
}

void eventoTAC(TAC ta) {
 ta.info();
 if(ta.getManipulacion().equals("move") && ta.getSubtokenName().equals("1")) {
 float valorY = ta.getValores().get(1); //0: coordenada x; 1: coordenada y
 intensidad = int(map(valorY,0.0,1.0,0.0,255.0));
 if(ta.getConstraintName().equals("izquierda"))
 opcion = 1;
 if(ta.getConstraintName().equals("centro"))
 opcion = 2;
 if(ta.getConstraintName().equals("derecha"))
 opcion = 3;
 }
}

void mensajeRecibido(OscMessage theOscMessage) {
}

void keyPressed() {
 switch(key) { 
 case ESC: 
 displaysClient.disconnect();
 super.stop();
 break;
 } 
}

Retos de aprendizaje


Documentación

  • elipse

Este método permite dibujar una elipse del color especificado, con o sin contorno ( del color que se indique) y del tamaño que se desee. Los parámetros que recibe son los siguientes:

float x: posición del centro de la elipse en el eje X (2D).

float y: posición del centro de la elipse en el eje Y (2D).

int ancho: anchura de la elipse que se va a dibujar.

int alto: altura de la elipse que se va a dibujar.

int rrell: valor de la componente rojo del color con el que se pintará el relleno de la elipse. Valores: 0-255.

int grell: valor de la componente verde del color con el que se pintará el relleno de la elipse. Valores: 0-255.

int brell: valor de la componente azul del color con el que se pintará el relleno de la elipse. Valores: 0-255.

int alpharell: opacidad del relleno de la elipse que se va a dibujar. Valores: 0 (transparente) – 255 (opaco)

int grosor (OPCIONAL): grosor del contorno de la elipse a dibujar.

int rcon (OPCIONAL): valor de la componente rojo del color con el que se pintará el contorno de la elipse. Valores: 0-255.

int gcon (OPCIONAL): valor de la componente verde del color con el que se pintará el contorno de la elipse. Valores: 0-255.

int bcon (OPCIONAL): valor de la componente azul del color con el que se pintará el contorno de la elipse. Valores: 0-255.

int alphacon (OPCIONAL): opacidad del contorno de la elipse a dibujar. Valores: 0 (transparente) – 255 (opaco).

  • Clase TAC

A continuación se presenta la clase TAC con sus diversas funciones:

ATRIBUTOS

String tokenName: Token al que pertenece el tac. Si el token es un sensor, <tokenName> es el nombre del sensor (tabletop, kinect…). Si el token es un objeto con áreas asociadas, <tokenName> = idG_Objeto + “_” + idS_Objeto

String consName: Nombre del constraint

String manipulación: Valores posibles= [“add”, “move”, “rotate”, “distance”, “orient”]

String idG: id general del subtoken

String idS: id de sesión del subtoken

String idSToken: id de sesión del Token. Si el Token es un sensor y no un objeto, su valor es “–”.

ArrayList<Float> valores: mínimo 1 valor, máximo 2

MÉTODOS

String getTokenName() // devuelve el nombre del token

String getManipulacion()  // devuelve la manipulacion

ArrayList<Float> getValores() //devuelve la lista de valores. Como mínimo la arraylist tiene 1 valor y como máximo 2: Add: 1 valor (0 = remove, 1 = add), Move:   1 o 2 valores (x e y),  Rotate: 1 valor, Distance: 1 valor, Orient: 1 valor

String getConstraintName() // devuelve el nombre del constraint

String getSubtokenName() // devuelve el ID general

String getSubtokenIDS() // devuelve el ID de sesión

String getIDSToken() // devuelve el ID de sesión del Token

void info()  // escribe por pantalla la información del TAC