Title: Les grands
1Les grands écrans,écrans multitactiles,interface
s avec stylet,menus et widgetsGTI 745
2Les grands écrans interactifs
3Al Gore
4De grands écrans
http//www.tacc.utexas.edu/resources/visualization
5Des grands écrans collaboratifs
http//cobweb.sfasu.edu/rball/large20display.jpg
6Des grands écrans collaboratifs
http//www.tacc.utexas.edu/resources/visualization
7perceptivepixel.com(Jeff Han acheté par
Microsoft)
- 27 pouces, 2560x1440, détecte la pression et le
survol des doigts, fonctionne avec stylet et
plusieurs doigts, 14000
8perceptivepixel.com
9Multitouchmedia.com / SmartPixel.tv
- Entreprise montréalaise
- Plusieurs modèles décranspeu chers
10Dautres entreprises à Montréal
- http//www.simbioz.com
- Numerix 3D (défunt?)
- Moment Factory http//www.momentfactory.com 150
employés (en 2015)
11SMART Technologies (à Calgary)http//smarttech.co
m
- SMART Board 8084i
- 84 pouces
- 38402160 pixels
- multitactile
- stylets
- 16 000 US (2015)
- Logiciel Meeting Pro pour partager le contenu
avec dautres dispositifs
12Microsoft Surface Hub (2015)https//www.youtube.c
om/watch?vFRLDRQePY1o
13VisMasterhttps//www.youtube.com/watch?vK9Pvskat
hGI http//www.vismaster.eu/
http//www.visual-analytics.eu/
14Les écrans multitactiles
15Surface multitactile au Laboratoire multimédia de
lÉTS, développée par Christophe Viau, étudiant
doctoral de Michael McGuffin.19202160 pixels,
11 mètre.
16Écrans multitactiles de 3M
- 3 modèles décrans 3M au labo
- 19 pouces, 1440900 pixels, 10 doigts
- 22 pouces, 16801050 pixels, 20 doigts
- 32 pouces, 19201080 pixels, 10 doigts
- Voir http//www.3m.com/multitouch pour les
modèles plus récents - NB Dell a sorti récemment un écran
multitactilede 23 pouces, 19201080 pixels, 10
doigts, pour lt 1000
modèle 19 pouces
17Quelques informations utiles pour votre travail
pratique concernant un tableau blanc électronique
multitactile multi-utilisateur
18TUIO (http//www.tuio.org/)
- Un protocol réseau pour les surfaces tangibles
multitactiles - Des libraries TUIO sont disponibles pour
plusieurs langages de programmation - En Java, libTUIO.jar permet dobtenir des
événements de toucher, mouvement, et relâchement
en définissant un listener (écouteur)
dévénements - Utilisé pour lire les événements de notre grande
surface multitactile - (Peut être aussi utilisé pour lire les événements
des écrans 3M sur Windows 7, si on se sert du
bridge W2TUIO qui traduit les événements
WM_TOUCH en événements TUIO, mais cela ne
fonctionne pas aussi bien que lire les événements
WM_TOUCH directement.)
19TUIO avec notregrande surface multitactile
Grande surface multitactile
Machine Cliente
Écrans LCD
Logiciel Client
Câble vidéo
TuioListener
Caméra IR
libTUIO.jar
Machine serveur qui fait le traitement dimage
Événements TUIO transmissur une connexion réseau
20TUIO avec un écran 3M
Machine tournant MS Windows 7
Logiciel Client
TuioListener
Câble vidéo
libTUIO.jar
Écran 3M
Câble USB
Événements TUIO
W2TUIO
Événements WM_TOUCH
21Événements WM_TOUCH de Windows 7
- Windows 7 reconnaît automatiquement les écrans de
3M comme un dispositif multitactile, sans
installer de pilote. Le toucher, mouvement,
relâchement sur lécran génère des événements
WM_TOUCH - On utilise une partie de la librarie MT4j
(http//www.mt4j.org/) pour lire les événements
WM_TOUCH dans Java - Malheureusement, au lieu dutiliser un
listener, on doit interroger (poller)
activement et fréquemment pour obtenir ces
événements
22Écran 3M et lecture des événements WM_TOUCH
Machine tournant MS Windows 7
Logiciel Client
Câble vidéo
interrogation
Écran 3M
MT4j
Câble USB
Événements WM_TOUCH
23Code pour interroger
while (true) if ( multitouchInterface.pollFor
InputEvent() ) client.processMultitouchInp
utEvent( ... ) multitouchPollingThread.sl
eep( ? // millisecondes ) Comment
choisir linterval de sommeil ? Quarrive-t-il si
linterval est trop court ? Et si cest trop long
?
24Interval de sommeil adaptatif
public void run() // adaptive sleep
interval int sleepInterval
0,0,0,1,1,1,2,2,2,3,3,3,5,5,5,10,10,10,20,25
int indexIntoSleepInterval 0 try
multitouchInterface.initialize( ) while
(true) if ( multitouchInterface.pollFor
InputEvent() ) indexIntoSleepInterva
l 0 ...
client.processMultitouchInputEvent( ... )
else // There was no
input event waiting for us, // so we
can sleep a little bit longer than last time.
if ( indexIntoSleepInterval lt
sleepInterval.length-1 )
indexIntoSleepInterval
if ( sleepInterval indexIntoSleepInterval
gt 0 ) multitouchPollingThread.sle
ep( sleepInterval
indexIntoSleepInterval // millisecondes
) catch
(InterruptedException e)
Ce code est tiré du framework qui vous sera
fourni.
25Quelques classes de base et routines qui vous
seront disponibles
26Point2D
public class Point2D public float p
new float2 public Point2D() p0
p1 0 public Point2D( float x, float
y ) p0 x p1 y
public Point2D( Vector2D V ) p0
V.v0 p1 V.v1 public void
copy( Point2D P ) p0 P.p0
p1 P.p1 public float x() return
p0 public float y() return p1
// used to pass coordinates directly to OpenGL
routines public float get() return p
// return the difference between two given
points static public Vector2D diff( Point2D a,
Point2D b ) return new Vector2D(
a.x()-b.x(), a.y()-b.y() )
// return the sum of the given point and
vector static public Point2D sum( Point2D a,
Vector2D b ) return new Point2D(
a.x()b.x(), a.y()b.y() ) // return
the difference between the given point and
vector static public Point2D diff( Point2D a,
Vector2D b ) return new Point2D(
a.x()-b.x(), a.y()-b.y() ) public float
distance( Point2D otherPoint ) return
diff( this, otherPoint ).length()
static Point2D average( Point2D a, Point2D b )
return new Point2D( (a.x()b.x())0.5f,
(a.y()b.y())0.5f )
27Vector2D
import java.lang.Math public class Vector2D
public float v new float2 public
Vector2D() v0 v1 0
public Vector2D( float x, float y ) v0
x v1 y public Vector2D(
Point2D P ) v0 P.p0 v1
P.p1 public void copy( Vector2D V )
v0 V.v0 v1 V.v1
public float x() return v0 public
float y() return v1 public float
lengthSquared() return x()x()
y()y() public float length()
return (float)Math.sqrt( lengthSquared() )
public Vector2D negated() return
new Vector2D(-x(),-y())
public Vector2D normalized() float l
length() if ( l gt 0 ) float k
1/l // scale factor return new
Vector2D(kx(),ky()) else return
new Vector2D(x(),y()) // returns the
dot-product of the given vectors // Notez
dot product veut dire produit scalaire
static public float dot( Vector2D a, Vector2D b )
return a.x()b.x() a.y()b.y()
// returns the sum of the given vectors
static public Vector2D sum( Vector2D a, Vector2D
b ) return new Vector2D( a.x()b.x(),
a.y()b.y() ) // returns the difference
of the given vectors static public Vector2D
diff( Vector2D a, Vector2D b ) return new
Vector2D( a.x()-b.x(), a.y()-b.y() ) //
returns the product of the given vector and
scalar static public Vector2D mult( Vector2D
a, float b ) return new Vector2D(
a.x()b, a.y()b )
28Point2DUtil
public class Point2DUtil static public
Point2D computeCentroidOfPoints(
ArrayListltPoint2Dgt points ) float x 0,
y 0 for ( Point2D p points )
x p.x() y p.y()
if ( points.size() gt 1 ) x /
points.size() y / points.size()
return new Point2D( x, y ) ...
29Point2DUtil
public class Point2DUtil ... static
public boolean isPointInsidePolygon(
ArrayListlt Point2D gt polygonPoints, Point2D
q ) ... ...
- Utile pour réaliser la sélection en lasso
- Aussi utile pour réaliser la sélection de
polygones
30Point2DUtil
public class Point2DUtil ... static
public ArrayListlt Point2D gt computeConvexHull(
ArrayListlt Point2D gt points ) ...
...
- Convex hull enveloppe convexe
- Utile pour générer un polygone à partir dun
ensemble de points
31Comment rajouter une marge autour dun polygone
convexe ?
Ensemble de points
Enveloppe convexe
Comment ?
Enveloppe convexe avec une marge rajoutée
Calcul de lenveloppe convexe
32Point2DUtil
public class Point2DUtil ... static
public ArrayListlt Point2D gt computeExpandedPolygon
( ArrayListlt Point2D gt points, // input
float marginThickness ) ...
...
33points initials
enveloppe convexe
marge rajoutée, méthode naïve
marge rajouté avecPoint2DUtil.computeExpandedPol
ygon()
ArrayListlt Point2D gt points points
Point2DUtil.computeConvexHull( points )points
Point2DUtil.computeExpandedPolygon( points,
marginThickness )
34Point2DUtil
public class Point2DUtil ... static
public void transformPointsBasedOnDisplacementOfOn
ePoint( ArrayListltPoint2Dgt points,
Point2D P_old, Point2D P_new )
Point2D centroid computeCentroidOfPoints(
points ) Vector2D v1 Point2D.diff(
P_old, centroid ) Vector2D v2
Point2D.diff( P_new, centroid ) float
rotationAngle Vector3D.computeSignedAngle(
new Vector3D(v1.x(),v1.y(),0), new
Vector3D(v2.x(),v2.y(),0), new
Vector3D(0,0,1) ) float
lengthToPreserve v1.length() Point2D
newCentroid Point2D.sum( P_new,
Vector2D.mult( v2.normalized(), -
lengthToPreserve ) ) Vector2D
translation Point2D.diff( newCentroid, centroid
) float cosine (float)Math.cos(
rotationAngle ) float sine
(float)Math.sin( rotationAngle ) for (
Point2D p points ) float relativeX
p.x() - centroid.x() float relativeY
p.y() - centroid.y() p.get()0
(cosinerelativeX - sinerelativeY)
translation.x() centroid.x()
p.get()1 (sinerelativeX cosinerelativeY)
translation.y() centroid.y()
...
35Transformation en fonction du déplacement de un
point
Michel Beaudouin-Lafon, Novel Interaction
Techniques for Overlapping Windows, UIST
2001http//scholar.google.ca/scholar?cluster1112
4751816710649387
36Transformation en fonction du déplacement de un
point
Pold
DoldPoldCold difference
Pnew
Dnew (Pnew-Cold)
Cold centroid
CnewPnew(Dold).length()(Dnew).normalized()
- Composantes de la transformation
- Translation Cnew Cold
- Rotation langle entre Dnew et Dold
37Point2DUtil
public class Point2DUtil ... static
public void transformPointsBasedOnDisplacementOfTw
oPoints( ArrayListltPoint2Dgt points,
Point2D A_old, Point2D B_old, Point2D
A_new, Point2D B_new ) ...
...
Bold
Bnew
Anew
Aold
38Transformation en fonction du déplacement de deux
points
Bold
Bnew
Mold
Dold
Mnew(1/2)(AnewBnew) midpoint
Aold
Dnew (Anew-Bnew) difference
Anew
- Composantes de la transformation
- Translation Mnew Mold
- Rotation langle entre Dnew et Dold
- Changement déchelle (scale) (Dnew).length() /
(Dold).length()
39Transformation en fonction du déplacement de deux
points
40Les interfaces avec stylet
41InkSeine (Ken Hinckley, Microsoft
Research)http//research.microsoft.com/en-us/um/r
edmond/projects/inkseine/ https//www.youtube.com
/watch?vDW1PGq4_7eI
42Pourquoi Apple ne propose pas de stylet pour le
iPad ?
- http//www.quora.com/Why-was-Steve-Jobs-against-th
e-tablet-pen
43Vignettehttp//www.shengdongzhao.com/publication/
vignette-interactive-texture-design-and-manipulati
on-with-freeform-gestures-for-pen-and-ink-illustra
tion/
44Kinematic Templates Fung et al.
2008http//hci.uwaterloo.ca/research/kinematic
45Kinematic Templates Fung et al. 2008
46SandCanvas http//www.shengdongzhao.com/publicatio
n/sandcanvas/
47Les interfaces multitactiles avec stylet(pen
touch)
48Manual Deskterity (Ken Hinckley)https//www.you
tube.com/watch?v9sTgLYH8qWs https//www.youtube.
com/watch?vaD6f6z8kDrM http//scholar.google.ca/
scholar?qhinckleyyatanipahudcoddingtonmanual
deskterity http//scholar.google.ca/scholar?qhin
ckleyyatanipahudcoddingtonpentouchnewtools
49Manual Deskterity (Ken Hinckley)https//www.you
tube.com/watch?v9sTgLYH8qWs https//www.youtube.
com/watch?vaD6f6z8kDrM http//scholar.google.ca/
scholar?qhinckleyyatanipahudcoddingtonmanual
deskterity http//scholar.google.ca/scholar?qhin
ckleyyatanipahudcoddingtonpentouchnewtools
50Jeu de stratégie en temps réel, stylet
multitactile http//scholar.google.ca/scholar?qha
miltonkernerobbinspentouch https//www.youtub
e.com/watch?vt4D8atZf2z4 https//www.youtube.com
/watch?vXbkM8jlhW9Yt52s
51Interface pen touch pour les
mathématiqueshttps//www.youtube.com/watch?vpYuD
TOqFmqc http//scholar.google.ca/scholar?qzelezn
ikhands-onmath
52Multitactile Stylet Souris Deux Souris
Précis Non Oui Oui Oui
Sans occlusion Non Presque Oui Oui
Bon pour écrire et dessiner Moyen Oui Non Non
Nombre de points dentrée 10 1 1 2
Chaque point dentrée se distinguee Non N/A N/A Oui
Entrées supplémentaires (survol, orientation) Boutons, efface, pression, survol, (orientation) Boutons, (orientation) Boutons, (orientation)
Entrée directe Oui Oui Non Non
Garde lécran proper Non Moyen Oui Oui
Permet plusieurs utilisateurs Oui (parfois) (parfois) (?)
Rien à tenir (donc pas de temps pris pour le prendre, et impossible à perdre) Oui Non Non Non
53Les menus et widgets contextuels
54Rappel de matière vue en GTI350 les widgets
contextuels pour lancer des commandes (menus
contextuels, menus radiaux, Marking Menus, etc.)
55Verbes(actions,commandes,outils,opérations)
Noms(objets,endroits)
56Verbes dans un menu déroulant
Noms(objets,endroits)
57Verbes dansun menu contextuel
Noms(objets,endroits)
58- Les modes créent la possibilité davoir des
erreurs de mode, où lutilisateur se croît en un
mode lorsquil est dans un autre - Un retour visuel indiquant le mode actuel est
bien, mais souvent nest pas assez pour empêcher
les erreurs de mode - Exemples de retours visuels indiquant le
modeicône doutil surligné, forme de curseur,
barre détat - Les menus contextuels aided
- À éviter les erreurs de mode, via des modes
temporaires et (parfois) un retour kinesthésique
(pression dans le doigt qui tient une touche
appuyée) - À augmenter lespace décran disponible pour
montrer le contenu/données (quoique ce
contenu/données seront cachés temporairement
pendant que le menu est affiché) - Diminuent la distance à traverser avec le curseur
- Peuvent fusionner la sélection de nom et verbe
(sélection plus rapide meilleur couplage mental
(mental chunking Buxton 1986))
59Étant donné tous ces avantages des menus
contextuels, pouvons-nous améliorer leur
conception?Y a t-il des widgets ou des
techniques dinteraction encore mieux?
60Menu radial(Radial Menu, Pie Menu)
61Menus radiaux versusmenus linéaires
- Les directions sont plus mémorables et plus
faciles à reproduire que les distances.
62Menu radial hiéarchique
63 Mouse Gestures pour Firefox
64Marking Menu
- Scale invariant recognition Reconnaissance des
gestes (marques) qui ne dépend pas de la longueur
des segments seule les angles des segments
importe. Donc, les marques peuvent être dessinées
en petit et donc rapidement, de façon balistique. - Un utilisateur qui sait quelle marque dessiner
na même pas besoin de voir le menu safficher.
65Ensemble de marques découvrables
(self-revealing), contrairement aux interfaces
gestuelles habituelles
66Présentation graphique améliorée
67Marking Menus
- Vidéo
- Démonstration (cobaye voluntaire s.v.p.?)
68Transition de néophyte en expert
Marking MenusTransition graduelleet naturelle !
Menus traditionelsPointage versus racourcis
69- Les Marking Menus
- Permettent une sélection plus rapidequavec les
menus linéaires(marques directionnelles et
ballistques) - Peuvent être utilisés sans regarder
lécran(eyes-free operation) - Ont un ensemble de gestes découvrables
- Permettent une transition graduelle et naturelle
de novice en expert - Peuvent être utilisés pour sélectionnernom et
verbe - Sont limités à environ 8 commandes par sous-menu,
et à une profondeur denviron 3 niveaux
70Dautres menus et widgets contextuels
- Control Menus (Pook et al., 2000)
- Flow Menus (Guimbretière et Winograd, 2000)
- ( FaST Sliders (McGuffin et al., 2002) )
- Menu radial dans Scriboli (Hinckley et al., 2005)
- Tracking Menus (Fitzmaurice et al., 2003)
- ( Trailing Widget (Forlines et al., 2006) )
- Hover Widgets (Grossman et al., 2006)
- PieCursor (Fitzmaurice et al., 2008)
- Hotbox (Kurtenbach et al., 1999)
- ToolGlass
- Ces widgets et techniques dinteraction sont
adaptés pour - Un grand nombre de commandes
- Le contrôle de variables continues
- Lentrée de texte et de nombres avec des gestes
- Lutilisation dun stylet (par exemple, sur un
tablet PC) - Travailler avec deux mains
71Exemple de Control Menu(dans SimplePaint)
72Exemple de Control Menu(dans BumpTop)
Anand Agarawala, Ravin Balakrishnan. (2006).
Keepin' it real Pushing the desktop metaphor
with physics, piles and the pen. Proceedings of
CHI 2006 - the ACM Conference on Human Factors in
Computing Systems. p. 1283-1292.
73BumpTop (Agarawala et Balakrishnan,
2006)http//scholar.google.ca/scholar?qagarawala
balakrishnankeepin22Pushingthedesktopmetaph
or22 http//bumptop.com
- Vidéos
- prototype http//www.youtube.com/watch?vM0ODskdE
PnQ - version hip-hop http//www.youtube.com/watch?voU
VpSY4eBCc - parodie http//www.youtube.com/watch?vkQL9V2dnKF
Y - présentation TED http//www.ted.com/talks/anand_a
garawala_demos_his_bumptop_desktop - version commerciale http//www.youtube.com/watch?
v6jhoWsHwU7w
74FlowMenus (Guimbretière et al.,
2000)http//www.acm.org/uist/archive/videos/2000/
p213-guimbretiere.mov
75FlowMenus (Guimbretière et al.,
2000)http//www.acm.org/uist/archive/videos/2000/
p213-guimbretiere.mov
76Scriboli (Hinckley et al., CHI 2005)https//www.y
outube.com/watch?v7YhJ2vGaftY http//www.patrick
baudisch.com/publications/2005-Hinckley-CHI05-Scri
boli.wmvhttp//research.microsoft.com/users/kenh/
papers/Scriboli.mov
77Tracking Menu (Fitzmaurice et al., UIST
2003)http//www.acm.org/uist/archive/videos/2003/
p71-fitzmaurice.mov http//www.autodeskresearch.c
om/publications/trackingmenus https//www.youtube
.com/watch?vG1jC6jQhcJI
78HoverWidgets (Grossman et al., CHI
2006)http//www.dgp.utoronto.ca/ravin/videos/chi
2006_hoverwidgets.mov https//www.youtube.com/wat
ch?vWPbiPn1b1zQ https//www.youtube.com/watch?v
KRXfaZ8nqZMhttp//www.dgp.toronto.edu/tovi/video
s/hoverwidgets.mov
79PieCursor (Fitzmaurice et al., CHI
2008)http//www.autodeskresearch.com/publications
/piecursor
80(No Transcript)
81Le hotbox un menu 2D dans Maya
82Le Hotbox dans Maya
Kurtenbach et al., 1999
83Le Hotbox dans Maya
Kurtenbach et al., 1999
84Le Hotbox dans Maya
Kurtenbach et al., 1999
85Toolglass entrée bimanuellehttps//www.youtube.c
om/watch?vfUwYCbhFj1U http//www.autodeskresearc
h.com/publications/t3
Clic-à-travers (click-through) sélection
simultanée dobjet et de commande !
86Comment analyser et comparer ces différentes
techniques pour lancer des commandes ?
87Modèle à trois états de Buxton (1990)
État 0 pas de coordonnées (x,y) États 1 et 2 la
position (x,y) est captée
- Exemples
- Tablette numérisante états 0, 1, 2
- Souris états 1, 2
- Écran tactile états 0, 1
88Modèle à trois états de Buxton (1990)
État 0hors de portéesans coordonnées
État 1 survol(x,y)
État 2 glissement(x,y)
État 0 pas de coordonnées (x,y) États 1 et 2 la
position (x,y) est captée
- Exemples
- Tablette graphique états 0, 1, 2
- Souris états 1, 2
- Écran tactile états 0, 1
89TouchMouse(Hinckley et Sinclair 1999)
États 0, 1, 2
90TouchMouse(Hinckley et Sinclair 1999)
91Taxonomie de menus
2 points dentrée 1 point dentrée 1 bouton sous lautre main 1 point dentrée
Distingue entre létat hors de portée (sans coordonnées) et au moins un état avec coordonnées (x,y)
Distingue entre 2 états avec coordonnées (x,y) (c.-à-d. distingue les états de survol et de glissement)
92Taxonomie de menus
2 points dentrée 1 point dentrée 1 bouton sous lautre main 1 point dentrée
Distingue entre létat hors de portée (sans coordonnées) et au moins un état avec coordonnées (x,y). Exemple écran tactile Toolglass Barre de menu fixe Palette flottante Marking Menus ControlMenus Flow Menus Menus de Scriboli
Distingue entre 2 états avec coordonnées (x,y) (c.-à-d. distingue les états de survol et de glissement). Exemple souris, tablette graphique. Hotbox Tracking Menus HoverWidget Pie Cursor
93(No Transcript)
94Question pour discussion
- Dans un logiciel de dessin, quelle technique de
menu choisir pour lancer des commandes ? - Pour un petit écran, grand écran ?
- Pour un utilisateur vs plusieurs ?
- Si chaque utilisateur
- Peut utiliser plusieurs doigts
- Peut utiliser un seul stylo