front_processing/extern/TUIO_JAVA/src/TuioDemoComponent.java
author bastiena
Tue, 20 Mar 2012 18:00:55 +0100
changeset 7 8a21bec5d45f
parent 3 92f19af39024
child 9 0f44b7360c8d
permissions -rw-r--r--
Middleware : No proximity bugs anymore. The skeleton disappear if a tracked person is too close or not tracked anymore. Processing : There are no laggs anymore when an user stay too long moving his hands and drawing tons of ellipses. (TUIO Cursors are not taken by their vectors, only the last position of the cursors are caught to be drawn).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     1
/*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     2
	TUIO Java Demo - part of the reacTIVision project
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     3
	http://reactivision.sourceforge.net/
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     4
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     5
	Copyright (c) 2005-2009 Martin Kaltenbrunner <mkalten@iua.upf.edu>
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     6
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     7
	This program is free software; you can redistribute it and/or modify
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     8
	it under the terms of the GNU General Public License as published by
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     9
	the Free Software Foundation; either version 2 of the License, or
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    10
	(at your option) any later version.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    11
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    12
	This program is distributed in the hope that it will be useful,
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    13
	but WITHOUT ANY WARRANTY; without even the implied warranty of
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    14
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    15
	GNU General Public License for more details.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    16
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    17
	You should have received a copy of the GNU General Public License
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    18
	along with this program; if not, write to the Free Software
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    19
	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    20
*/
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    21
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    22
import java.awt.*;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    23
import java.awt.geom.*;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    24
import java.awt.event.*;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    25
import java.awt.image.*;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    26
import java.util.*;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    27
import javax.swing.*;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    28
import TUIO.*;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    29
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    30
public class TuioDemoComponent extends JComponent implements TuioListener {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    31
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    32
	private Hashtable<Long,TuioDemoObject> objectList = new Hashtable<Long,TuioDemoObject>();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    33
	private Hashtable<Long,TuioCursor> cursorList = new Hashtable<Long,TuioCursor>();
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    34
	private Hashtable<Long,TuioString> stringList = new Hashtable<Long,TuioString>();
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    35
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    36
	public static final int finger_size = 15;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    37
	public static final int object_size = 60;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    38
	public static final int table_size = 760;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    39
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    40
	public static int width, height;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    41
	private float scale = 1.0f;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    42
	public boolean verbose = false;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    43
			
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    44
	public void setSize(int w, int h) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    45
		super.setSize(w,h);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    46
		width = w;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    47
		height = h;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    48
		scale  = height/(float)TuioDemoComponent.table_size;	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    49
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    50
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    51
	public void addTuioObject(TuioObject tobj) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    52
		TuioDemoObject demo = new TuioDemoObject(tobj);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    53
		objectList.put(tobj.getSessionID(),demo);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    54
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    55
		if (verbose) 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    56
			System.out.println("add obj "+tobj.getSymbolID()+" ("+tobj.getSessionID()+") "+tobj.getX()+" "+tobj.getY()+" "+tobj.getAngle());	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    57
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    58
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    59
	public void updateTuioObject(TuioObject tobj) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    60
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    61
		TuioDemoObject demo = (TuioDemoObject)objectList.get(tobj.getSessionID());
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    62
		demo.update(tobj);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    63
		
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    64
		if (verbose) 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    65
			System.out.println("set obj "+tobj.getSymbolID()+" ("+tobj.getSessionID()+") "+tobj.getX()+" "+tobj.getY()+" "+tobj.getAngle()+" "+tobj.getMotionSpeed()+" "+tobj.getRotationSpeed()+" "+tobj.getMotionAccel()+" "+tobj.getRotationAccel()); 	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    66
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    67
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    68
	public void removeTuioObject(TuioObject tobj) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    69
		objectList.remove(tobj.getSessionID());
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    70
		
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    71
		if (verbose) 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    72
			System.out.println("del obj "+tobj.getSymbolID()+" ("+tobj.getSessionID()+")");	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    73
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    74
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    75
	public void addTuioCursor(TuioCursor tcur) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    76
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    77
		if (!cursorList.containsKey(tcur.getSessionID())) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    78
			cursorList.put(tcur.getSessionID(), tcur);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    79
			repaint();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    80
		}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    81
		
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    82
		if (verbose) 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    83
			System.out.println("add cur "+tcur.getCursorID()+" ("+tcur.getSessionID()+") "+tcur.getX()+" "+tcur.getY());	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    84
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    85
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    86
	public void updateTuioCursor(TuioCursor tcur) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    87
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    88
		repaint();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    89
		
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    90
		if (verbose) 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    91
			System.out.println("set cur "+tcur.getCursorID()+" ("+tcur.getSessionID()+") "+tcur.getX()+" "+tcur.getY()+" "+tcur.getMotionSpeed()+" "+tcur.getMotionAccel()); 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    92
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    93
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    94
	public void removeTuioCursor(TuioCursor tcur) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    95
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    96
		cursorList.remove(tcur.getSessionID());	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    97
		repaint();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    98
		
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    99
		if (verbose) 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   100
			System.out.println("del cur "+tcur.getCursorID()+" ("+tcur.getSessionID()+")"); 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   101
	}
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   102
	
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   103
	public void addTuioString(TuioString tstr) {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   104
	
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   105
		if (!stringList.containsKey(tstr.getSessionID())) {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   106
			stringList.put(tstr.getSessionID(), tstr);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   107
			repaint();
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   108
		}
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   109
		
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   110
		if (verbose) 
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   111
			System.out.println("add str "+tstr.getStringID()+" ("+tstr.getSessionID()+") "+tstr.getMessage());	
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   112
	}
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   113
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   114
	public void updateTuioString(TuioString tstr) {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   115
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   116
		repaint();
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   117
		
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   118
		if (verbose) 
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   119
			System.out.println("set str "+tstr.getStringID()+" ("+tstr.getSessionID()+") "+tstr.getMessage()); 
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   120
	}
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   121
	
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   122
	public void removeTuioString(TuioString tstr) {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   123
	
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   124
		stringList.remove(tstr.getSessionID());	
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   125
		repaint();
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   126
		
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   127
		if (verbose) 
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   128
			System.out.println("del str "+tstr.getStringID()+" ("+tstr.getSessionID()+")"); 
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   129
	}
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   130
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   131
	public void refresh(TuioTime frameTime) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   132
		repaint();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   133
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   134
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   135
	public void paint(Graphics g) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   136
		update(g);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   137
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   138
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   139
	public void update(Graphics g) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   140
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   141
		Graphics2D g2 = (Graphics2D)g;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   142
		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   143
		g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   144
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   145
		g2.setColor(Color.white);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   146
		g2.fillRect(0,0,width,height);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   147
	
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   148
		int w = (int)Math.round(width-scale*finger_size/2.0f);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   149
		int h = (int)Math.round(height-scale*finger_size/2.0f);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   150
		
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   151
		Enumeration<TuioCursor> cursors = cursorList.elements();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   152
		while (cursors.hasMoreElements()) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   153
			TuioCursor tcur = cursors.nextElement();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   154
			if (tcur==null) continue;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   155
			Vector<TuioPoint> path = tcur.getPath();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   156
			TuioPoint current_point = path.elementAt(0);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   157
			if (current_point!=null) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   158
				// draw the cursor path
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   159
				g2.setPaint(Color.blue);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   160
				for (int i=0;i<path.size();i++) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   161
					TuioPoint next_point = path.elementAt(i);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   162
					g2.drawLine(current_point.getScreenX(w), current_point.getScreenY(h), next_point.getScreenX(w), next_point.getScreenY(h));
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   163
					current_point = next_point;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   164
				}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   165
			}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   166
			
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   167
			// draw the finger tip
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   168
			g2.setPaint(Color.lightGray);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   169
			int s = (int)(scale*finger_size);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   170
			g2.fillOval(current_point.getScreenX(w-s/2),current_point.getScreenY(h-s/2),s,s);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   171
			g2.setPaint(Color.black);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   172
			g2.drawString(tcur.getCursorID()+"",current_point.getScreenX(w),current_point.getScreenY(h));
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   173
		}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   174
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   175
		// draw the objects
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   176
		Enumeration<TuioDemoObject> objects = objectList.elements();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   177
		while (objects.hasMoreElements()) {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   178
			TuioDemoObject tobj = objects.nextElement();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   179
			if (tobj!=null) tobj.paint(g2, width,height);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   180
		}		
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   181
	}
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   182
}