front_processing/extern/TUIO_JAVA/src/TuioDemoComponent.java
changeset 0 6fefd4afe506
child 3 92f19af39024
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/front_processing/extern/TUIO_JAVA/src/TuioDemoComponent.java	Fri Mar 09 14:52:11 2012 +0100
@@ -0,0 +1,153 @@
+/*
+	TUIO Java Demo - part of the reacTIVision project
+	http://reactivision.sourceforge.net/
+
+	Copyright (c) 2005-2009 Martin Kaltenbrunner <mkalten@iua.upf.edu>
+
+	This program is free software; you can redistribute it and/or modify
+	it under the terms of the GNU General Public License as published by
+	the Free Software Foundation; either version 2 of the License, or
+	(at your option) any later version.
+
+	This program is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+	GNU General Public License for more details.
+
+	You should have received a copy of the GNU General Public License
+	along with this program; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+import java.awt.*;
+import java.awt.geom.*;
+import java.awt.event.*;
+import java.awt.image.*;
+import java.util.*;
+import javax.swing.*;
+import TUIO.*;
+
+public class TuioDemoComponent extends JComponent implements TuioListener {
+
+	private Hashtable<Long,TuioDemoObject> objectList = new Hashtable<Long,TuioDemoObject>();
+	private Hashtable<Long,TuioCursor> cursorList = new Hashtable<Long,TuioCursor>();
+
+	public static final int finger_size = 15;
+	public static final int object_size = 60;
+	public static final int table_size = 760;
+	
+	public static int width, height;
+	private float scale = 1.0f;
+	public boolean verbose = false;
+			
+	public void setSize(int w, int h) {
+		super.setSize(w,h);
+		width = w;
+		height = h;
+		scale  = height/(float)TuioDemoComponent.table_size;	
+	}
+	
+	public void addTuioObject(TuioObject tobj) {
+		TuioDemoObject demo = new TuioDemoObject(tobj);
+		objectList.put(tobj.getSessionID(),demo);
+
+		if (verbose) 
+			System.out.println("add obj "+tobj.getSymbolID()+" ("+tobj.getSessionID()+") "+tobj.getX()+" "+tobj.getY()+" "+tobj.getAngle());	
+	}
+
+	public void updateTuioObject(TuioObject tobj) {
+
+		TuioDemoObject demo = (TuioDemoObject)objectList.get(tobj.getSessionID());
+		demo.update(tobj);
+		
+		if (verbose) 
+			System.out.println("set obj "+tobj.getSymbolID()+" ("+tobj.getSessionID()+") "+tobj.getX()+" "+tobj.getY()+" "+tobj.getAngle()+" "+tobj.getMotionSpeed()+" "+tobj.getRotationSpeed()+" "+tobj.getMotionAccel()+" "+tobj.getRotationAccel()); 	
+	}
+	
+	public void removeTuioObject(TuioObject tobj) {
+		objectList.remove(tobj.getSessionID());
+		
+		if (verbose) 
+			System.out.println("del obj "+tobj.getSymbolID()+" ("+tobj.getSessionID()+")");	
+	}
+
+	public void addTuioCursor(TuioCursor tcur) {
+	
+		if (!cursorList.containsKey(tcur.getSessionID())) {
+			cursorList.put(tcur.getSessionID(), tcur);
+			repaint();
+		}
+		
+		if (verbose) 
+			System.out.println("add cur "+tcur.getCursorID()+" ("+tcur.getSessionID()+") "+tcur.getX()+" "+tcur.getY());	
+	}
+
+	public void updateTuioCursor(TuioCursor tcur) {
+
+		repaint();
+		
+		if (verbose) 
+			System.out.println("set cur "+tcur.getCursorID()+" ("+tcur.getSessionID()+") "+tcur.getX()+" "+tcur.getY()+" "+tcur.getMotionSpeed()+" "+tcur.getMotionAccel()); 
+	}
+	
+	public void removeTuioCursor(TuioCursor tcur) {
+	
+		cursorList.remove(tcur.getSessionID());	
+		repaint();
+		
+		if (verbose) 
+			System.out.println("del cur "+tcur.getCursorID()+" ("+tcur.getSessionID()+")"); 
+	}
+
+	public void refresh(TuioTime frameTime) {
+		repaint();
+	}
+	
+	public void paint(Graphics g) {
+		update(g);
+	}
+
+	public void update(Graphics g) {
+	
+		Graphics2D g2 = (Graphics2D)g;
+		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+		g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
+	
+		g2.setColor(Color.white);
+		g2.fillRect(0,0,width,height);
+	
+		int w = (int)Math.round(width-scale*finger_size/2.0f);
+		int h = (int)Math.round(height-scale*finger_size/2.0f);
+		
+		Enumeration<TuioCursor> cursors = cursorList.elements();
+		while (cursors.hasMoreElements()) {
+			TuioCursor tcur = cursors.nextElement();
+			if (tcur==null) continue;
+			Vector<TuioPoint> path = tcur.getPath();
+			TuioPoint current_point = path.elementAt(0);
+			if (current_point!=null) {
+				// draw the cursor path
+				g2.setPaint(Color.blue);
+				for (int i=0;i<path.size();i++) {
+					TuioPoint next_point = path.elementAt(i);
+					g2.drawLine(current_point.getScreenX(w), current_point.getScreenY(h), next_point.getScreenX(w), next_point.getScreenY(h));
+					current_point = next_point;
+				}
+			}
+			
+			// draw the finger tip
+			g2.setPaint(Color.lightGray);
+			int s = (int)(scale*finger_size);
+			g2.fillOval(current_point.getScreenX(w-s/2),current_point.getScreenY(h-s/2),s,s);
+			g2.setPaint(Color.black);
+			g2.drawString(tcur.getCursorID()+"",current_point.getScreenX(w),current_point.getScreenY(h));
+		}
+
+		// draw the objects
+		Enumeration<TuioDemoObject> objects = objectList.elements();
+		while (objects.hasMoreElements()) {
+			TuioDemoObject tobj = objects.nextElement();
+			if (tobj!=null) tobj.paint(g2, width,height);
+		}		
+	}
+}