MIRIA now supports multitouch devices through standard SL3/W7 multitouch API.
By using MIRIA for developing your multitouch Silverlight 3 applications you can:
- control your applications by multiple input devices at the same time (standard Windows 7 multitouch, mouse, TUIO mt)
- design your application to handle multitouch events and still make it capable to be controlled by mouse with no extra event handling / coding
- accurate gestures recognition engine (hold, tap, rotate, translate, slide up/east/west/north/nw/ne/sw/se, scale)
- easily track fingers its coordinates, angle, length and acceleration
For a complete list of features and explaination of how it work you can check MIRIA homepage at http://www.generoso.info/miria . The homepage is still to be updated so no infos about new features ia available yet.
All online examples from MIRIA home page have been rebuilt with the new release and now work both with TUIO devices and/or any Windows 7 PC with multitouch display (i.e. HP TouchSmart IQ 500 and IQ 800 series).
You can download MIRIA 0.9.1 beta from : http://miria.codeplex.com
Brief examples of MIRIA usage:
using MIRIA.MultiTouch;
using MIRIA.Gestures;
[...]
private TouchListener _touchlistener;
private Interpreter _gestureinterpreter;
[...]
public MainPage()
{
InitializeComponent();
[...]
_touchlistener = new TouchListener(LayoutRoot);
_touchlistener.CursorAdd += new TouchListener.CursorAddHandler(_touchlistener_CursorAdd);
_touchlistener.CursorRemove += new TouchListener.CursorRemoveHandler(_touchlistener_CursorRemove);
_touchlistener.CursorUpdate += new TouchListener.CursorUpdateHandler(_touchlistener_CursorUpdate);
_gestureinterpreter = new Interpreter(LayoutRoot);
_gestureinterpreter.Hold += new Interpreter.GestureHold(_gestureinterpreter_Hold);
_gestureinterpreter.Release += new Interpreter.GestureRelease(_gestureinterpreter_Release);
_gestureinterpreter.Rotate += new Interpreter.GestureRotateHandler(_gestureinterpreter_Rotate);
_gestureinterpreter.Translate += new Interpreter.GestureTranslateHandler(_gestureinterpreter_Translate);
_gestureinterpreter.Tap += new Interpreter.GestureTapHandler(_gestureinterpreter_Tap);
_gestureinterpreter.Scale += new Interpreter.GestureScaleHandler(_gestureinterpreter_Scale);
_gestureinterpreter.GestureDetected += new Interpreter.GestureDetectedHandler(_gestureinterpreter_GestureDetected);
}
[...]
void _gestureinterpreter_Scale(double scale)
{
// scale > 1 => zoom in
// scale < 1 => zoom out
[...]
}
void _gestureinterpreter_Tap(Point p)
{
// p => coordinates where tapped
}
void _gestureinterpreter_GestureDetected(Interpreter.Gestures gesture, object parameter)
{
switch (gesture)
{
case Interpreter.Gestures.SLIDE_WEST:
[...]
break;
case Interpreter.Gestures.SLIDE_EAST:
[...]
break;
case Interpreter.Gestures.SLIDE_NORTH:
[...]
break;
case Interpreter.Gestures.SLIDE_SOUTH:
[...]
break;
[...]
}
}
[...]
Enjoy,
Gene.
