Entwicklung eines virtuellen Eingabegeräts für Multitouch Screens

Größe: px
Ab Seite anzeigen:

Download "Entwicklung eines virtuellen Eingabegeräts für Multitouch Screens"

Transkript

1 Bachelor Thesis zum Thema Entwicklung eines virtuellen Eingabegeräts für Multitouch Screens zur Erlangung des akademischen Grades Bachelor der Medieninformatik vorgelegt dem Fachbereich Druck und Medien der Hochschule der Medien, Stuttgart Patrick Bader 7. August 2008 Erstkorrektor: Zweitkorrektor: Prof. Dr. Jens-Uwe Hahn M.Sc. Uwe Laufs

2

3 Abstract Diese Arbeit beschäftigt sich mit der Entwicklung eines Eingabegeräts für Multitouch Screens mit großen Bilddiagonalen. Das Ziel ist, eine möglichst effiziente Art der Texteingabe ohne Tastatur zu finden, da bisherige Bildschirmtastaturen in diesem Bereich mühselig zu bedienen sind. Aus diesem Grund ist das Eingabegerät zwar vom Tastenschema an bestehende Tastaturen angelehnt, jedoch auf die Anatomie einer Hand angepasst. Zunächst werden anhand einiger Beispiele mögliche Anwendungsgebiete für die Multitouch-Technologie aufgezeigt. Anschließend folgt eine kurze Erklärung der eingesetzten Verfahren, Bewegungen auf dem Bildschirm festzustellen, und des Einsatzgebiets der jeweiligen Technik. Vor der Implementierung muss ein Konzept für die zu entwickelnde Tastatur erstellt werden. Dieses wird vorgestellt und die entscheidenden Faktoren, wie beispielsweise die Unabhängigkeit der Handpositionen, erklärt. Auf Grund dieses Konzepts und den gegebenen Rahmenbedingungen kann das Eingabegerät implementiert werden. Für den Einsatz von Multitouch-Technologien wird entsprechend angepasste Software benötigt. Da für die Entwicklung von multitouchfähigen Komponenten bisherige Frameworks nicht kompatibel sind, werden Möglichkeiten zur Erstellung eigener graphischer Benutzeroberflächen beschrieben. Diese unterscheiden sich im Wesentlichen anhand der möglichen Komplexität ihrer Komponenten. Im Speziellen wird dabei auf Anforderungen der Multitouch-Technologie eingegangen. Das entwickelte virtuelle Eingabegerät dient dabei als konkretes Implementierungsbeispiel. Im Anschluss erfolgt eine Evaluation der Anwendung. Darauf basierend werden Verbesserungsmöglichkeiten des Konzepts erläutert. Abschließend wird ein kurzer Ausblick in die Zukunft der Multitouch-Technologie gegeben. iii

4

5 Danksagung Ganz herzlich möchte ich mich bei meinen Eltern, Robert und Marianne Bader, und meinem Bruder Holger, bedanken, die mich stets unterstützt und Korrektur gelesen haben. Besonderer Dank geht an dieser Stelle auch an Benjamin Thaut. Er stand mir für Fragen bezüglich OpenGL immer mit einem guten Rat zur Verfügung. Vielen Dank auch an meine Freundin, Maritta Weiß, die sich auch bei der Korrektur beteiligt hat. Für die zur Verfügung Stellung des Multitouch-Tisches möchte ich mich beim Fraunhofer-Institut Stuttgart, insbesondere bei Herrn M.Sc. Uwe Laufs bedanken. Ohne den Tisch wäre diese Arbeit nicht möglich gewesen. Last but not least einen herzlichen Dank an Herrn Prof. Dr. Jens-Uwe Hahn für die Betreuung des Projekts und dieser Arbeit. v

6

7 Inhaltsverzeichnis 1 Einleitung Motivation Ziel der Arbeit Beispiele von Multitouch-Geräten Apple iphone Multitouch Screen von Jeff Han Microsoft Surface CUBIT Grundlagen Multitouch-Technologien DI - Diffused Illumination FTIR - Frustrated Total Internal Reflection Kapazitive Verfahren LED Matrix Vergleich der Verfahren Processing Einführung Libraries Muito Entwicklung in Eclipse Java OpenGL Binding: JOGL Design Patterns Composite Adapter Observer Singleton Virtuelle Tastatur Verwendete Hardware Anforderungsanalyse Entwurf vii

8 INHALTSVERZEICHNIS 5 Implementierung Überblick Komponentenstruktur Projektspezifische Implementierung Rendern Rendern einer einfachen GUI Vollständige Transparenz Verdeckung Halbtransparenz Rotation Rendern der Tastatur Picking Implementierung in einfachen GUIs Implementierung mit modifiziertem Renderer Picking im Tastatur-Projekt Eventsystem Implementierung eines Eventsystems Gesten Tippen Ziehen Verbinden Rotieren Skalieren Basiskomponenten Implementierte Komponenten Aufbau der Tastatur Tastenkodierung Evaluierung 55 7 Fazit Trends A Erklärung 59 Abbildungsverzeichnis 61 Listings 63 Literaturverzeichnis 65 viii

9 Kapitel 1 Einleitung Wenn man auf die letzten 15 Jahre der Mensch-Maschine Kommunikation zurückblickt hat sich nicht sehr viel verändert, die primären Eingabegeräte, Maus und Tastatur, dominieren weiterhin den Markt. Alternativen wie Trackballs sind inzwischen praktisch komplett verschwunden. Zwar gibt es schon seit vielen Jahren Touchscreens, jedoch führen diese ein Schattendasein und werden nur in speziellen Bereichen, wie zum Beispiel Automaten oder Industrie- Maschinen, eingesetzt. In diesen Fällen finden Mäuse und Tastaturen auf Grund der Umgebungsbedingungen kaum Verwendung. Touchscreens richten sich folglich an eine andere Zielgruppe. Hier steht oft das Verlangen möglichst viel Funktionalität auf wenig Raum abzubilden. Oder aber die Anfälligkeit für verschmutzungsbedingte Ausfälle zu minimieren. Zum Beispiel wäre es nicht denkbar eine konventionelle Maus neben einer Drehbank einzusetzen. Diese würde innerhalb kürzester Zeit durch Öle und Fette oder auch Späne verschmutzt werden. Im Umfeld von Büro-PCs bieten Touchscreens kaum Vorteile, alle Eingaben lassen sich ebenso gut, und meist präziser mit einer Maus durchführen. Für die Texteingabe wird die Tastatur verwendet, da diese weitaus schnelleres Tippen ermöglicht. In einer abgewandelten Form finden Touchscreens als Grafiktabletts ihren Einsatz. Im Unterschied zu gewöhnlichen Sensorbildschirmen kann nur mit speziellen Stiften gezeichnet werden, die Abtastung ist jedoch sehr präzise. Tablets finden überwiegend bei professionellen Designern Zuspruch. Ein Wandel in der Mensch-Maschine Kommunikation bahnt sich durch die zunehmende Verbreitung von Multitouch Screens an. Die Idee der Technik ist, mehrere Berührpunkte gleichzeitig verarbeiten zu können. Auf diese Weise können Gesten realisiert werden, die dem Benutzer bereits aus der physikalischen Welt bekannt sind. Gesten sind in diesem Fall Bewegungsabläufe der Finger, die sich auf dem Bildschirm abspielen. Technisch sind Multitouch Screens nichts Neues, die Idee wurde bereits 1982 von Nimish Mehta an der University of Toronto in der Master Thesis A Flexible Machine Interface realisiert. Die Tatsache, Gesten zu nutzen und mit mehreren Fingern oder Händen gleichzeitig agieren zu können, erweitert das Einsatzgebiet der Touchscreen-Technik. Sie punktet vor allem im Bereich der Smartphones und wenn Präsentation und Kooperation an einem Bildschirm im Vordergrund stehen. 1

10 1. Einleitung Warum diese Technik erst jetzt an die breite Öffentlichkeit dringt, hat mehrere Gründe: Bisherige GUI 1 unterstützen keine Gesten. Sie gehen von einer Maus und einer Tastatur als primäre Eingabegeräte aus und sind deshalb auf die Verwendung mit diesen optimiert. In den letzten Jahren konnte man kaum Veränderungen sehen. Grundsätzlich entsprechen zum Beispiel die Fenster von Windows Vista denen von Windows 3.1. Sie sind nach wie vor auf die Bedienung mit der Maus optimiert. Der Durchbruch wurde in einer jüngeren Gerätesparte, den Smartphones, erzielt. In diesem Bereich gab es bereits einen Markt für Touchscreens und der Umstieg auf Multitouch- Bedienung stellte eine geringere Hürde dar. Am Erfolg des iphones und den Reaktionen anderer Handyhersteller lässt sich dies belegen. Dieser Hype wird voraussichtlich auf den PC-Markt überspringen, da bereits erste positive Erfahrungen mit der Technologie gemacht wurden und den Kunden nicht mehr fremd ist. Jüngst wurde von Microsoft angekündigt, Windows 7 werde Multitouch unterstützen. Multitouch wird dabei Maus und Tastatur nicht vollständig ersetzen, sondern um zusätzliche Funktionalität bereichern. Microsoft sammelt mit Hilfe des Multitouch-Tisches Surface Erfahrungen in einem ganz anderen Segment, als dies Apple tut. Multitouch-Technologie soll Einzug in Konferenzräume, Läden und schlussendlich in das Wohnzimmer finden. Ähnliche Lösungen zeigt Jeff Han bei Vorführungen seines FTIR 2 Tisches. In diesem Umfeld wird versucht sowohl Maus als auch Tastatur vollständig zu ersetzen, da diese auf einem Wohnzimmertisch eher negativ wahrgenommen werden. Diese Arbeit wird ihren Fokus im Wesentlichen auf Multitouch-Flächen mit großen Bilddiagonalen richten. 1.1 Motivation Wenn nun keine Tastatur mehr verwendet werden soll, so muss eine Möglichkeit gefunden werden effizient auf der Multitouch-Oberfläche tippen zu können. Prinzipiell gibt es zwei Möglichkeiten eine Eingabe zu realisieren, zum einen kann Text handschriftlich geschrieben und dann durch entsprechende Schrifterkennungssysteme in Text umgewandelt werden. Da von Hand geschrieben werden muss, wird ein Stift benötigt und die Schreibgeschwindigkeit deutlich reduziert. Deshalb ist, für Geräte mit großen Bilddiagonalen, die Abbildung einer Art Tastatur auf den Bildschirm die bessere Variante. Diese kann sich z.b. der Anatomie der Hände des Nutzers dynamisch anpassen und ermöglicht deutlich schnelleres Schreiben. Im zur Thesis gehörenden Projekt wurde solch ein Eingabegerät implementiert. Im Folgenden werden die Grundlagen verschiedener Multitouch-Techniken erläutert, die Rahmenbedingungen für die Entwicklung beschrieben und auf die Realisierung, den aufgetretenen Problemen und deren Lösungen im Detail eingegangen. 1 Graphical User Interface. 2 Frustrated Total Internal Reflection. 2

11 1.2 Ziel der Arbeit 1.2 Ziel der Arbeit Ziel der Arbeit ist die Entwicklung eines virtuellen Texteingabegeräts in Form einer menschlichen Hand. Die Position der Tasten und Größe der Tastatur kann auf die Hand des Benutzers angepasst werden. Mehrere Eingabegeräte sollen kombinierbar und gleichzeitig auf dem selben Display nutzbar sein. Der Tastaturersatz soll nach Möglichkeit mit der Schreibgeschwindigkeit einer echten Tastatur mithalten können. 3

12

13 Kapitel 2 Beispiele von Multitouch-Geräten Um eine bessere Vorstellung von den Einsatzgebieten zu bekommen werden hier verschiedene Multitouch-Geräte mit deren Eigenarten vorgestellt. Das Spektrum reicht von Kleingeräten bis hin zu Tischen. 2.1 Apple iphone Das iphone von Apple ist das bisher bekannteste Multitouch-Gerät. Wie schon eingangs erwähnt, wurde mit diesem eine breite Masse auf die Vorteile der Multitouch-Technik aufmerksam. Die Vorderseite des Smartphones besteht lediglich aus einem Multitouch- Display. Die Bedienung erfolgt primär durch Interaktion mit dem Display. Gesten, wie das Bewegen zweier Finger voneinander weg, bzw. aufeinander zu, welche zum Zoomen genutzt wird, verbessern den Bedienkomfort an Stellen, an denen einfache Touchscreens bisher Defizite hatten. Durch das bereits veröffentlichte SDK 1 lassen sich eigene Anwendungen für das iphone programmieren. Die Auswertung der Berührpunkte steht dem Programmierer offen. Dies kann genutzt werden, um z.b. eigene Gesten zu entwickeln. Weitere Informationen finden sich in (app 2007). Auch im Bereich mobiler Spiele verbessert Multitouch die Interaktion mit dem Gerät. Selbst einfache Spiele der Rubrik Jump and Run 2 benötigen für die Steuerung mehrere (virtuelle) Tasten zur selben Zeit. Mit klassischen Touchflächen kann immer nur eine einzige Taste gedrückt werden. Auch brachte die unterschiedliche Anordnung der Tasten bei verschiedenen Handys und Smartphones hohen Anpassungsaufwand bei der Implementierung mit sich. Das iphone lässt den Anwendungsentwicklern die Freiheit, Position, Form und Funktionalität der Bedienelemente frei zu wählen. 1 Software Development Kit. 2 Spiele, die den Helden von seitlicher Perspektive zeigen, z.b. Super Mario Bros. 5

14 2. Beispiele von Multitouch-Geräten 2.2 Multitouch Screen von Jeff Han Jeff Han ist Referent an der New York University im Courant Institute of Mathematical Sciences im Bereich Computer Science. Bereits 2005 stellte er die FTIR Multitouch-Technik vor. Zwischenzeitlich wurden eine Vielzahl an Videos, wie z.b. der Bildschirm als eine virtuelle Lavalampe, veröffentlicht und es werden unterschiedliche Interaktionsmöglichkeiten gezeigt gründete er die Firma Perceptive Pixel 3, um seine Multitouch-Technologie weiter zu entwickeln und zu vermarkten. Das Ziel von Jeff Han ist die Bedienung eines Computers möglichst ohne User Interface. Mit Hilfe natürlicher Gesten soll eine Interaktion zustande kommen. In seinen Demonstrationen zeigt er einige Anwendungen die dies realisieren, wie z.b. eine Globusanwendung, in der auf einfache Weise die Ansicht vergrößert oder der Globus rotiert werden kann. Wie bereits eingangs erwähnt, wird zur Erfassung der Bewegungen die FTIR Technik genutzt, diese wird im Kapitel genauer beschrieben. 2.3 Microsoft Surface Microsoft verfolgt mit Surface andere Ziele. Der Tisch mit einer Bilddiagonalen von ca. 30 Zoll erlaubt mehreren Nutzern die Bedienung zur gleichen Zeit. Die virtuelle Welt soll anfassbar gemacht werden, indem man virtuelle Gegenstände auf dem Bildschirm quasi mit den Händen berühren kann. So lassen sich z.b. Bilder durch Drehen der Hand auf einem Bild rotieren. Es entsteht der Eindruck, dass die Hand ein echtes Blatt dreht. Microsoft selbst bezeichnet die Technik als Surface Computing Durch die horizontale Bauweise können sich leicht viele Personen, um den Tisch versammeln und ihn gleichzeitig bedienen. Ein Anwendungsgebiet wäre ein Verkaufsgespräch zum Beispiel für eine Einbauküche, bei dem der Kunde die Komponenten der Küche ansehen kann und durch die Interaktivität im Gegensatz zu gedruckten Unterlagen einfach die Anordnung der Schränke durch Verschieben ändern kann, während der Verkäufer nach verfügbaren Farbkombinationen für Arbeitsplatte und Schränke sucht. Surface ist in der Lage, Gegenstände zu erkennen. Um zum Beispiel Fotos einer Digitalkamera zu betrachten, genügt es, die Kamera auf die Surface zu legen. Die Kamera wird erkannt und Fotos können ohne Umwege angezeigt und sortiert werden. Durch direkte Interaktion zwischen Gegenständen und Geräten aus dem alltäglichen Leben und dem Tisch verbindet sich die reale mit der virtuellen Welt. Bisher wird der Tisch lediglich an Großkunden in der Freizeit- und Unterhaltungbranche und im Einzelhandel in den USA vertrieben. Mit weiterer Verbreitung, auch außerhalb der Vereinigten Staaten und mit einem Verkauf an den Endkunden ist in drei bis fünf Jahren zu rechnen. Es ist zu erwarten, dass der Tisch dann mit Windows 7 ausgeliefert wird, bisher nutzt Microsoft eine modifizierte Version von Windows Vista. Weitere Informationen zur Surface finden sich in (mic 2008). 3 6

15 2.4 CUBIT Die Technik hinter Microsoft Surface ist ein Rückprojektions-Display für die Anzeige und mehrere Infrarot Strahler und Kameras zur Objekt Erkennung. Der Tisch ist eine hochwertige Umsetzung des DI 4 Verfahrens, welches im Kapitel Grundlagen ausführlich beschrieben wird. 2.4 CUBIT CUBIT ist ein Open Source Projekt ähnlich der Microsoft Surface und einer Diagonalen von ca. 33 Zoll. Preislich liegt die Hardware zwischen 1500 und 2500 Euro inklusive Projektor und ordnet sich preislich deutlich unter der Microsoft Surface ein. Hervorzuheben ist die Leichtbauweise des CUBITs, es besteht im Wesentlichen aus dünnen Kunststoffwänden und einer halbtransparenten Kunststofffläche zur Projektion des Bildes. Eine Bildergalerie und weitere Informationen finden sich unter: 4 Direct Illumination. 7

16

17 Kapitel 3 Grundlagen 3.1 Multitouch-Technologien Es existieren auf dem Markt bereits verschiedenste Technologien, um Multitouch zu realisieren. Diese haben in der Regel ein beschränktes Einsatzgebiet, vor allem im Bezug auf die realisierbare Größe des Displays. Ein weiteres Unterscheidungskriterium ist der Preis, beginnend bei low-cost der Marke Eigenbau, bis hin zu professionellen, technisch aufwendigen Lösungen. Im Rahmen dieser Arbeit können lediglich einige ausgewählte Verfahren vorgestellt werden, die sich jedoch in ihren Prinzipien grundlegend unterscheiden. Zu Beginn werden FTIR und ID als günstige Lösungen vorgestellt, die selbst gebaut werden können, jedoch auch erheblich Platz in Anspruch nehmen. Die dritte Technologie wird im iphone zur Erkennung von Berührpunkten eingesetzt. Das letzte vorgestellte Verfahren ist in experimentellem Stadium, ob dieses Verfahren tatsächlich praktikabel ist, ist noch nicht abzusehen DI - Diffused Illumination Diffused Illumination ist eine der einfachsten und kostengünstigsten Lösungen, um einen Multitouch-Tisch zu bauen. Die teuersten Bestandteile sind ein Beamer zur Projektion des Bildes und eine Webcam zur Aufnahme von Berührungspunkten. Aufbau Das Bild des Beamers wird, wie in Abbildung 3.1 dargestellt, auf eine matte Acrylplatte projiziert. Optional kann ein Spiegel verwendet werden, um die Bauhöhe des Tisches zu verringern. Desweiteren werden im Bild rot gekennzeichnete, Infrarotstrahler eingesetzt, die die Platte möglichst gleichmäßig bestrahlen. Eine Webcam filmt die Acrylplatte aus der Sicht des Beamers. Diese soll jedoch nicht das sichtbare Licht filmen, sonder ausschließlich das reflektierte infrarote Licht, das durch Annäherung und Berührung der Platte reflektiert wird. 9

18 3. Grundlagen Abbildung 3.1: Schematische Darstellung eines DI Aufbaus Die meisten Webcams besitzen einen eingebauten IR-Filter, der verhindert, dass infrarote Strahlung in den Sensor der Kamera gelangt. Dieser Filter wird ausgebaut und durch einen ersetzt, der das sichtbare Licht filtert und ausschließlich infrarotes Licht durchlässt. Es gibt verschiedene Möglichkeiten, einen derartigen Filter zu realisieren. Die einfachste ist die Verwendung eines schwarzen, belichteten Foto Films, der über die Linse geklebt wird. Mit Hilfe von schwarzen Permanentmarkern und transparenter Klebefolie kann der gleiche Effekt erzielt werden. Wenn bessere Ergebnisse erzielt werden sollen, so kann auch ein Bandpassfilter gekauft werden. Der Vorteil ist, dass die Strahler und der Filter bezüglich der Wellenlänge des infraroten Lichts aufeinander abgestimmt werden können und somit optimale Ergebnisse bei der Aufnahme erzielt werden. Eine ausführliche Bauanleitung findet sich in der Page Ausgabe vom Januar 2008, (Franke 2008). 10

19 3.1 Multitouch-Technologien Funktionsweise Bei Annäherung an die Platte wird zunehmend infrarotes Licht reflektiert und von der Kamera aufgenommen. Berührungspunkte erscheinen nun als helle Flecken auf dem Bild der Kamera. Da im Sonnenlicht sehr hohe Anteile infraroter Strahlung enthalten sind, ist dadurch ein Betrieb im Freien nicht möglich. Optimal ist ein möglichst dunkler oder mit künstlichem Licht (ohne infrarote Anteile) bestrahlter Raum. Die Schwierigkeit in der Erkennung von Berührungen liegt in der Kalibrierung der Strahler. Das abgestrahlte Licht muss möglichst gleichmäßig auf die gesamte Fläche des Schirms verteilt werden, sodass keine hellen Flecken im, von der Webcam aufgenommenen, Bild entstehen, da in der anschließenden Bildverarbeitung zum Tracking 1 nach hellen Punkten gesucht wird. Die Qualität der Berührungserkennung hängt maßgeblich von der eingesetzten Kamera ab. Diese hat eine beschränkte Auflösung, was das Zuordnen der exakten Koordinaten einer Berührung erschwert. Wenn eine hohe Auflösung gewählt wird, so sinkt bei vielen Kameras die Bildwiederholrate und es steigt die Latenz 2 der Bildübertragung. Latenz und Bildwiederholrate sind entscheidende Faktoren des Trackings. Hohe Latenz lässt Bewegungen unnatürlich wirken, der Effekt ist vergleichbar mit dem der VoIP 3 Telefonie, wenn die Verzögerung zu groß wird, geraten Gespräche ins stocken. Man fällt seinem Gesprächspartner oft unabsichtlich ins Wort. Die Bildwiederholrate ist der zweite entscheidende Faktor, da eine Kamera lediglich Einzelbilder und keine Bewegungen liefert. Ist ein Punkt auf dem ersten Bild sichtbar und auf dem nächsten Bild an einer anderen Stelle ein Punkt, muss entschieden werden, ob es sich um den selben Punkt handelt, oder ob dies ein neuer Punkt, also eine neue Berührung, ist. In der Regel wird dies über den Abstand der beiden Punkte geschätzt. Ab einem bestimmten Schwellenwert wird Abbildung 3.2: Abstand der Punkte bei gleicher Bewegungsgeschwindigkeit der Punkt im neuen Bild als neue Berührung gewertet. Bei hoher Bildwiederholrate kann somit ein niedrigerer Schwellenwert gewählt werden, da die Bilder in zeitlich geringerem Abstand aufeinander folgen. Der zurückgelegte Weg bei einer Bewegung zwischen zwei aufeinander folgenden Bildern ist bei gleicher Bewegungsgeschwindigkeit geringer. Fiducial-Erkennung Unter diesem Begriff versteht man die Erkennung von bestimmten Markern die sich auf oder über dem Tisch befinden. Diese sind aus blankem Metall oder einem anderen reflektierenden 1 Erkennung von Berührungen und Verfolgung von Bewegungen. 2 Zeitversatz der durch die Signalübertragung von der Kamera zum PC entsteht. 3 Voice over IP. 11

20 3. Grundlagen Material. Mit Hilfe dieser können Objekte eindeutig identifiziert werden, so kann z.b. ein Handy das sich auf dem Tisch befindet erkannt werden und die graphische Oberfläche darauf angepasst werden. Es ist denkbar eine Verbindung zum Handy aufzubauen und Bilder die sich auf dem Handy befinden auf dem Tisch anzuzeigen FTIR - Frustrated Total Internal Reflection Aufbau Der FTIR Aufbau ist dem DI Aufbau sehr ähnlich. Der einzige Unterschied im Aufbau besteht im Beleuchtungsverfahren. Während bei DI die Projektionsfläche aus der Richtung des Beamers mit infraroter Strahlung beleuchtet wird, wird mit dieser Technik die Projektionsfläche seitlich beleuchtet. Um die komplette Projektionsfläche sind IR-LEDs montiert, die, wie in Abbildung 3.3 dargestellt, direkt in die Projektionsfläche strahlen. Die LEDs werden sowohl von oben, als auch unten abgedeckt, sodass keine infrarote Strahlung direkt zur Kamera gelangt. Die FTIR Technik basiert auf dem physikalischen Effekt der Total- Abbildung 3.3: Schematische Darstellung eines FTIR Aufbaus 12

21 3.1 Multitouch-Technologien reflexion. Dieser tritt auf, wenn Licht unter einem bestimmten Winkel auf die Grenzfläche zweier Medien trifft und dabei an dieser vollständig reflektiert wird. In der Natur treten zahlreiche Beispiele für Totalreflexion auf. Beim Blick auf einen See spiegeln sich, ab einem bestimmten Betrachtungswinkel, Objekte die sich über der Wasseroberfläche befinden, auf dem Wasserspiegel wieder. Eine Spiegelung tritt erst auf, wenn der Winkel zwischen Wasserspiegel und der Sichtlinie des Betrachters gering wird. Selbiger Effekt ist für Fata Morganas verantwortlich. In diesem Fall führen unterschiedliche Lufttemperaturen in den Luftschichten und somit unterschiedliche optische Eigenschaften der Luft zur Brechung des Lichts. Allgemein lässt sich sagen, dass der Effekt beim Übergang eines Lichtstrahls von einem optisch dichten Medium zu einem optisch dünneren Medium auftritt. Funktionsweise Abbildung 3.4 zeigt einen Querschnitt durch die Projektionsfläche und einer LED, die seitlich in die Scheibe strahlt. Im obigen Bild werden die Lichtstrahlen (rot gekennzeichnet) an den Grenzflächen der Scheibe vollständig reflektiert. Das infrarote Licht verlässt die Scheibe nicht. Im unteren Bild berührt ein Finger (durch den orangen Block dargestellt) die Projektionsfläche. In diesem Bereich findet keine Totalreflexion an der Scheibe statt und das Licht trifft auf den Finger. Dieser reflektiert einen Teil des Lichtes senkrecht durch die Scheibe hindurch zur Kamera. Der Grund für die Verhinderung der Totalreflexion ist, dass sich zwischen der Acrylplatte und dem Finger keine Luft mehr befindet. Somit existiert an dieser Stelle kein Übergang zu einem optisch dünneren Medium mehr. Abbildung 3.4: Schematische Darstellung des FTIR Effekts Entdecker der Technik für Multitouch Screens ist Jeff Han, der mit seinen Demonstrationen bereits eine breite Masse anspricht. In anderen Bereichen ist das Ausnutzen des Effekts der Totalreflexion bereits etabliert, wie die Glasfaser-Übertragungstechnik. Hierbei 13

22 3. Grundlagen werden Lichtwellen innerhalb einer transparenten Faser über lange Strecken fast verlustfrei übertragen. Die Technik ist bereits etabliert und bildet z.b. das Backbone des heutigen Internets. Lange Glasfaser-Leitungen verbinden die Kontinente untereinander. FTIR erkennt keine Objekte die sich über der Projektionsfläche befinden, sondern lediglich tatsächliche Berührpunkte. Diese sind, wie im DI Verfahren beschrieben, mit Hilfe von Bildverarbeitung auswertbar. Die Filterung kann einfacher durchgeführt werden, da sich Berührpunkte stark von der Umgebung abheben Kapazitive Verfahren In mobilen Geräten werden meist kapazitive Verfahren eingesetzt. Die Anforderungen sind sowohl eine kompakte Bauform, sowie zuverlässige Erkennung. Über das eigentliche Display werden verschiedene transparente Schichten mit Sende- und Empfangsantennen gelegt. Gemessen werden Spannungen in den Empfangsantennen, die auf Grund der kapazitiven Kopplung zwischen Sender und Empfänger auftreten. Abbildung 3.5 veranschaulicht den Abbildung 3.5: Schematische Darstellung eines kapazitiven Multitouch Screens Aufbau und die Funktionsweise des Screens. Die unterste Schicht besteht aus einem regulären LC 4 Display. Darüber in vertikaler Richtung die transparenten Empfangsantennen. 4 Liquid Crystal. 14

23 3.1 Multitouch-Technologien An diesen Antennen werden Spannungsveränderungen gemessen. Die Antennen sind vom darunter liegenden Display isoliert. Ebenso die Sendeantennen, an ihnen liegen Spannungen an, die ein elektrisches Feld erzeugen. Es entsteht eine kapazitive Kopplung zwischen Sender und Empfänger. Die oberste Schicht dient zum Schutz der Antennen und kann zum Entspiegeln des Bildschirms genutzt werden. Durch Berührung mit einem Finger lässt die kapazitive Kopplung in den umgebenden Bereichen des Bildschirms nach. Anhand des Spannungsabfalls können exakte Druckpunkte ermittelt werden. Die Auflösung beschränkt sich nicht, wie erwartet, auf die Anzahl der Sende- und Empfangsantennen pro Flächeneinheit, sondern ist genauer: Da die gemessenen Spannungen genau bestimmt werden können, kann mit Hilfe bikubischer Interpolation der genaue Aufenthaltsort des Fingers berechnet werden. Beschreibungen der Funktionsweise von kapazitiven Verfahren finden sich in (Trümper 2007) und (Wilson 2008) LED Matrix Mit Hilfe einer Matrix aus LEDs 5 werden Berührungen wahrgenommen. Aufgebaut wird eine beliebig große Matrix bestehend aus LEDs. Diese müssen separat angesteuert werden können. Da jede LED gleichzeitig auch als Fotodiode genutzt werden kann, ist es nicht nur möglich Bilder auszugeben, sondern auch die Einstrahlung von Licht zu messen. Da LEDs gepulst betrieben werden können, ist schnelles Umschalten der Betriebsarten möglich. Zur Messung der Helligkeit wird die Zeit gemessen, bis die zuvor angelegte Spannung auf einen bestimmten Minimalwert fällt. Je heller die Umgebung, desto schneller fällt die Spannung ab. Wenn die einzelnen LEDs der Matrix unterschiedlich gepulst werden, z.b. jede zweite LED Licht aussendet und die restlichen die Lichteinstrahlung messen, kann die Entfernung eines Objekts anhand der reflektierten Strahlung bestimmt werden. Wie sich diese Technik sinnvoll auch außerhalb eines Labors nutzen lässt, ist fraglich. Die Auflösung ist bedingt durch die Größe der LEDs sehr gering, gerade wenn farbige Bilder dargestellt werden. Dunkle Bereiche im Bild sind von einer Erkennung ausgeschlossen, da unzureichend Licht reflektiert wird. Als kostengünstiges Eingabegerät sind LED Matrizen denkbar Vergleich der Verfahren Die vorgestellten Verfahren unterscheiden sich in vielen Bereichen sehr stark voneinander. Die wichtigsten Unterschiede werden im Folgenden näher erläutert. Während die beiden Rückprojektionsverfahren FTIR und DI, ausschließlich für große und statische Bildschirme ausgelegt sind, richten sich kapazitive Verfahren primär an kleine, mobile Geräte. Bedingt durch den Minimalabstand zwischen Beamer und Projektionsfläche ist bei der FTIR und DI Technik ausreichend Platz in der Tiefe notwendig. Ein Transport ist deshalb in aufgebauter Form mühselig. Da die Erkennung von Bewegungen mit Hilfe 5 Light Emitting Diode. 15

24 3. Grundlagen von IR-Strahlung erfolgt ist ein Betrieb im Freien oder hell beleuchteten Räumen ausgeschlossen, da Sonnenlicht intensives IR Licht aussendet und Berührpunkte nicht mehr von der Umgebung unterscheidbar sind. Kapazitive Verfahren sind hingegen unempfindlich gegenüber externen Lichtquellen und deshalb auch im Freien ohne Beeinträchtigung des Trackings 6 nutzbar. In Sachen Skalierbarkeit im Bezug zum Preis punkten Rückprojektionsverfahren. Mit Hilfe eines höher auflösenden Projektors und besseren Kameras oder auch mehreren Projektoren können nahezu beliebige Bilddiagonalen erzielt werden. Kapazitive Verfahren in vergleichbarer Größe sind deutlich kostspieliger. Während kapazitive Multitouch Screens meist nur in fertigen Produkten gekauft werden können und somit die Entwicklung eigener Produkte stark eingeschränkt ist, können FTIR und DI Schirme selbst gebaut werden. Im Internet finden sich zahlreiche Anleitungen und Erfahrungsberichte. Auch FTIR und DI unterscheiden sich in manchen Punkten. Mit DI können nicht nur Berührpunkte festgestellt werden, sondern auch Objekte, die sich unmittelbar über der Projektionsfläche befinden, erkannt werden. Somit kann z.b. eine Hand erkannt werden und die Berührpunkte den einzelnen Fingern zugeordnet werden und abgestützte Arme können von der Bewegungserkennung ausgeschlossen werden. Die Interpretation von Gesten ist ohne zusätzliche Informationen deutlich schwieriger, da prinzipiell jeder Punkt mit jedem anderen eine Geste bilden kann und die Punkte in einem Multiuser-System keinem Benutzer eindeutig zugeordnet werden können. Dieser Nachteil ist zugleich ein Vorteil beim Erkennen der Berührpunkte und Bewegungen. Der Helligkeitsunterschied zwischen Berührpunkten und der Umgebung ist bei Verwendung von FTIR größer. Da Objekte, die den Tisch nicht berühren auch nicht erkannt werden können, kann keine Fiducial-Erkennung durchgeführt werden. Ob dies in zukünftigen Systemen eine Rolle spielen wird, bleibt bislang offen. Die Erkennungsmarken müssen erst auf diversen Produkten angebracht werden, was den Produzenten Geld kostet und zunächst nicht viel Mehrwert bietet. 3.2 Processing Zur Entwicklung des virtuellen Eingabegerätes wurde Processing verwendet, welches von Ben Fry und Casey Reas, am MIT Media Labratory 7 ins Leben gerufen wurde. Sowohl Quellcode als auch binäre Dateien stehen kostenlos zum Download 8 bereit. Processing befindet sich noch im Betastadium, ist deshalb an manchen Stellen noch nicht ausgereift, wird jedoch stetig weiterentwickelt. Im folgenden Abschnitt wird eine kurze Einführung in Processing gegeben und verwendete Erweiterungen vorgestellt. 6 Erkennung von Bewegungen. 7 Fakultät der Universität Massachusetts Institute of Technology in Cambridge(Massachusetts)

25 3.2 Processing Einführung Processing ist eine minimalistische Entwicklungsumgebung, die auf Java aufsetzt. Processing verbindet Gestaltung am Computer mit klassischer Programmierung und richtet sich primär an Künstler die wenig oder noch keine Erfahrung in der Programmierung haben. Zwar basiert Processing auf Java und erzeugt bei der Kompilierung in einem Zwischenschritt Java Code, jedoch werden für Programmieranfänger einige Hürden aus dem Weg geräumt: Ein Programm, in Processing Sketch genannt, kann rein prozedural geschrieben werden, die Einbettung in eine entsprechende Klasse wird automatisch vorgenommen. Die Sichtbarkeit von Methoden kann, ebenso wie das Einbinden der benötigten Packages, weggelassen werden. Auf das Einbinden externer Pakete wird jedoch nicht komplett verzichtet, Processing erlaubt eine GUI gestützte Importierung von Bibliotheken. Diese können ohne Modifikation des Quellcodes eingebunden und direkt verwendet werden. Verschiedenste Bibliotheken finden sich auf der Processing Internetseite. Für die Konvertierung des Processing Codes in Java Code sorgt ein Präprozessor. Im Wesentlichen fügt er Sichtbarkeiten ein, importiert Pakete und bettet den geschriebenen Code in ein Applet ein. In einem weiteren Schritt wird HTML Code zur Einbindung des Applets in Internetseiten generiert. Sketches können somit auf sehr einfache Weise publiziert werden. Im Wesentlichen besteht ein Sketch aus zwei Funktionen: setup und draw. Erstere wird einmalig beim Start eines Sketches aufgerufen, in ihr können Initialisierungen, wie z.b. die Fenstergröße festgelegt werden. Die zweite Funktion wird, sofern nicht anderst festgelegt, in einer Endlosschleife aufgerufen. Wie aus dem Namen hervorgeht werden in dieser Funktion Zeichenbefehle durchgeführt. Soll ein Programm interaktiv vom Benutzer beeinflussbar sein, so kann entweder der Status von Maus und Tastatur in der draw Funktion bei jedem Durchlauf abgefragt werden oder es können bereitgestellte Funktionen genutzt werden. Empfohlen wird, die separaten Funktionen zu nutzen, um die Darstellung von der Interaktion zu trennen. Hierauf wird später eingegangen. Im Folgenden wird anhand eines einfachen Beispiels die Programmierung mit Processing erklärt. Es wird eine Szene mit einem Strichmännchen bei Nacht erstellt, die mit Hilfe einer Taschenlampe angeschaut werden kann. Der Benutzer kann diese mit Hilfe der Maus bewegen. Zeichnen Wie zuvor erwähnt, werden zum Zeichnen zwei Funktionen genutzt. Zu Beginn werden allgemeine Einstellungen für das Programm vorgenommen. Dies geschieht in der setup Funktion. 1 void setup () { 2 size (320, 240); 17

26 3. Grundlagen 3 smooth (); 4 framerate (25); 5 } Listing 3.1: Globale Einstellungen mit Hilfe der setup Funktion. Der Befehl size setzt die Fenstergröße. Die Beispielszene hat eine Breite von 320 und eine Höhe von 240 Pixel. Als nächstes wird Kantenglättung eingeschaltet. Vor allem Kurven, insbesondere im Beispiel verwendete Ellipsen, wirken dadurch runder. Die letzte Einstellung ist die Framerate, sie gibt an, wie viele Bilder pro Sekunde gezeichnet werden. Pro Sekunde wird in unserem Beispiel die draw Funktion 30 mal aufgerufen. Zeichenfunktionen werden in der draw Funktion aufgerufen. Im Anschluss folgt der Beispielcode zum Zeichnen des Strichmännchens und des Lichtkegels mit anschließender Erläuterung der wichtigsten Funktionselemente. 1 // globale variablen 2 int x = 200; 3 int y = 100; 4 boolean flashlighton = true ; 5 6 void draw () { 7 background (0); 8 ellipsemode ( CENTER ); 9 10 // male Licht wenn Taschenlampe an ist. 11 if( flashlighton ) { 12 nostroke (); 13 fill (255, 255, 0); 14 ellipse (x, y, 150, 150); 15 } // male Strichmännchen 18 fill (0); 19 ellipse (100, 40, 50, 50); strokeweight ( 10); 22 stroke (0); 23 line (100, 50, 100, 150); 24 line (100, 95, 140, 70); 25 line (100, 95, 60, 70); 26 line (100, 150, 140, 200); 27 line (100, 150, 60, 200); 28 } Listing 3.2: Zeichnen in der draw() Funktion. 18

27 3.2 Processing Zunächst wird das komplette Fenster schwarz initialisiert. Die Funktion background setzt alle Pixel auf einen bestimmten Farbwert. Wenn nur ein einziger Wert übergeben wird, steht dieser für die Graustufe, beginnend mit 0 für schwarz und endend mit 255 für weiß. Mit ellipsemode wird festgelegt, wie Ellipsen gezeichnet werden. CENTER gibt an, dass eine Ellipse durch die Koordinaten des Zentrums, die Breite und Höhe definiert wird. Der Lichtkegel der Taschenlampe wird nur gezeichnet, wenn diese eingeschaltet ist. Um die Taschenlampe ein- und ausschalten zu können, wird eine globale Variable mit dem Zustand der Taschenlampe angelegt und bei jedem Zeichenvorgang überprüft. Mit nostroke wird festgelegt, dass keine Striche/Umrisse gezeichnet werden und fill legt die Farbe fest, mit der Ellipsen, Rechtecke und andere Flächen ausgefüllt werden. Die Farbe Gelb für den Lichtkegel wird im RGB 9 Format übergeben. Anschließend wird die Ellipse gezeichnet, die ersten beiden Parameter bestimmen die Position des Zentrums. Die Werte wurden wieder in globale Variablen ausgelagert, damit die Position des Lichtkegels während der Laufzeit geändert werden kann. Die letzten beiden Parameter bestimmen Breite und Höhe des Lichtkegels. Das Strichmännchen selbst besteht aus einer schwarz ausgefüllten Ellipse für den Kopf und mehreren Linien. Das Zeichnen von Strichen wurde zuvor deaktiviert, deshalb muss die Breite und Farbe für Striche gesetzt werden, damit diese wieder gezeichnet werden. strokeweight setzt die Breite einer Linie in Pixel, stroke ändert die Linienfarbe, im Beispiel durch den Wert 0 auf schwarz. Danach werden alle Linien mit Angabe von Start- und Endpunkt gezeichnet. Mausereignisse Zur Interaktion mit der Maus stehen vier Funktionen zur Verfügung: mousemoved wird ausgelöst, wenn der Mauszeiger auf dem Fenster der Applikation bewegt wird. mousedragged wird immer dann aufgerufen, wenn die Maus mit gedrückter Taste bewegt wird. mousepressed und mousereleased werden immer dann aufgerufen, wenn eine Maustaste gedrückt, bzw. im Fall von mousereleased losgelassen wird. Im Beispiel wird zur Bewegung des Lichtkegels der Taschenlampe mousemoved verwendet und zum Ein- und Ausschalten mousereleased. 1 void mousemoved () { 2 // bewege Licht der Taschenlampe zur Mausposition 3 x = mousex ; 4 y = mousey ; 5 } 6 7 void mousereleased () { 8 // schalte Taschenlampe aus und ein 9 if( flashlighton ) 10 flashlighton = false ; 9 RGB ist ein Farbraum bestehend aus einem rot, grün und blau Wert für jede Farbe. 19

28 3. Grundlagen 11 else 12 flashlighton = true ; 13 } Listing 3.3: Reaktion auf Mausereignisse. Der Code für Mausbewegungen ändert die Werte der zuvor festgelegten globalen Variablen x und y. Dabei werden die Werte mousex und mousey, die bei jeder Bewegung neu gesetzt werden, ausgelesen. Durch Setzen der Variable flashlighton in der Funktion mousereleased wird das Zeichnen des Lichtkegels, abhängig vom aktuellen Zustand, einbzw. ausgeschaltet. Das Ereignis zum Loslassen einer Taste wurde gewählt, da dies das Verhalten eines echten Druckknopfes am besten simuliert. Tastaturereignisse Ähnlich der Behandlung von Mausereignissen existieren entsprechende Funktionen für Tasten. Diese heißen keypressed und keyreleased und verhalten sich ähnlich. Der einzige Unterschied besteht darin, dass keypressed wiederholt aufgerufen wird, wenn eine Taste über einen längeren Zeitraum gedrückt bleibt. Im Beispiel werden die Pfeiltasten verwendet, um den Lichtkegel mit Hilfe der Tastatur steuern zu können. 1 void keypressed () { 2 // bewegt den Lichtkegel 3 switch ( keycode ) { 4 case 37: // pfeil links 5 x -= 3; 6 break ; 7 case 38: // pfeil oben 8 y -= 3; 9 break ; 10 case 39: // pfeil rechts 11 x += 3; 12 break ; 13 case 40: // pfeil unten 14 y += 3; 15 break ; 16 } 17 } Listing 3.4: Reaktion auf Tastaturereignisse. Bei der Verarbeitung der Tastaturevents muss erst festgestellt werden, welche Taste gedrückt worden ist. Dies kann entweder über die Variable key für druckbare Zeichen geschehen, oder wie im Beispiel über keycode. Letztere beinhaltet den Tastencode der aktuell gedrückten Taste und muss für nicht druckbare Zeichen, zu denen auch die Pfeiltasten 20

29 3.2 Processing gehören, genutzt werden. Jedes Event ändert im Beispiel die Position, entweder in x oder y-richtung um drei Pixel. Erstelltes Beispielprogramm Abbildung 3.6: Zwei Screenshots des Beispielprogramms In Darstellung 3.6 sind zwei Screenshots des Programms abgebildet. Je nach Position der Maus und folglich auch des Lichtkegels ist das Strichmännchen sichtbar oder nicht sichtbar. Der vollständige Quellcode und das ausführbare Programm findet sich auf der beigelegten CD Libraries Processing unterstützt, wie bereits erwähnt Erweiterungen, die auf einfache Art und Weise eingebunden werden können. Darunter befinden sich alternative Renderer, wie ein OpenGL- Renderer. Dieser wurde bei der Umsetzung des virtuellen Eingabegerätes genutzt, da er einige Vorteile gegenüber dem Java2D-Renderer besitzt. Unter anderem stehen Bibliotheken zur XML-Verarbeitung, sowie für diverse IO 10 -Schnittstellen zur Verfügung. Bibliotheken werden in jar 11 -Dateien zur Verfügung gestellt. Zum Einbinden wird im Ordner libraries im Processing-Ordner ein Unterordner mit dem Namen der Bibliothek erstellt. In diesem Ordner muss wiederum ein Verzeichnis mit Namen library erstellt werden und dort die jar-datei abgelegt werden. Beim nächsten Start von Processing erscheint die neu eingebundene Bibliothek im Menü Sketch unter Import Library Muito Eine für die Entwicklung des Eingabegeräts erforderliche Bibliothek ist Muito. Diese wird am Fraunhofer-Institut Stuttgart entwickelt. Sie beinhaltet Komponenten zum Auslesen 10 Input Output. 11 Java Archive. 21

30 3. Grundlagen von Daten, die der Motion Tracker 12 erzeugt. Die Kommunikation der Programme läuft über das TUIO Protokoll, das auf UDP aufsetzt. Somit ist ein Austausch des Trackers ohne Änderungen an Muito möglich. Ebenfalls vorstellbar wäre das Tracking auf einen separaten Computer auszulagern, um Rechenleistung auf dem Applikationsrechner zu sparen. Bei der Auslagerung muss jedoch abgewogen werden, ob sich der Gewinn an Rechenleistung trotz höherer Latenz auf Grund der Übertragung über ein Netzwerk, lohnt. Muito teilt sich im Wesentlichen in vier Aspekte auf: Verarbeitung der eingehenden TUIO Pakete Erzeugung von Berührungsevents aus den Informationen vom Tracker Bereitstellung diverser GUI Komponenten Auswertung von Gesten und Zuteilung zu den Komponenten Da Muito für die Entwicklung einer Tastatur keine Komponenten zur Verfügung stellt und die Gesten eng an das Framework gekoppelt sind, wurde lediglich ein Teil der Bibliothek genutzt Entwicklung in Eclipse Zur Entwicklung größerer Processing-Anwendungen bietet sich derzeit Eclipse 13 als Entwicklungsumgebung für fortgeschrittene Anwender an. Folgend werden einige Vor- und Nachteile gegenüber der Processing Umgebung geschildert. Vorteile Eclipse bietet zur Entwicklung einige Unterstützungen, die in Processing bisher nicht vorhanden sind: Code Vervollständigung Code Templates Debugger Übersicht über die Klassenhierarchie 12 Programm, das die Bewegungen auf dem Touchscreen erfasst. 13 Zum kostenlosen Download bei 22

31 3.3 Java OpenGL Binding: JOGL Nachteile Bei der Entwicklung von Processing-Applikationen ist jedoch auf einige Punkte, unter anderem wegen des fehlenden Präprozessors, zu achten: Eine von PApplet abgeleitete Klasse muss selbst angelegt werden. Sichtbarkeiten sind im Code anzugeben. Der in vielen Beispielen verwendete Datentyp color existiert nicht und muss durch int ersetzt werden. Libraries müssen manuell dem Projekt hinzugefügt werden und entsprechende Pakete inkludiert werden. Die Auslieferung der Anwendung bzw. Einbettung in eine HTML Seite ist deutlich aufwendiger. 3.3 Java OpenGL Binding: JOGL JOGL ist ein Java Binding für OpenGL 14, d.h. es bildet das OpenGL API auf Java ab. Dabei werden Java-Methodenaufrufe mittels des JNI 15 in API Funktionen von OpenGL umgesetzt. Da der OpenGL-Code direkt mit der Hardware kommuniziert, können nicht alle Funktionen direkt in Java nachgebildet werden. Daraus ergibt sich ein Overhead durch die nativen Aufrufe, welcher wiederum stark von der eingesetzten Java Virtual Machine abhängt. Vom OpenGL-Renderer für Processing, der als Library verfügbar ist, wird intern JOGL zum Rendern der Primitiven eingesetzt. Der OpenGL-Renderer bietet so die Möglichkeit, OpenGL-Befehle direkt auszuführen. Dadurch können Funktionen genutzt werden, die durch den hohen Abstraktionsgrad von Processing verloren gegangen sind. Mit der Anwendung müssen bei der Verwendung dieses Renderers jedoch die entsprechenden Laufzeitbibliotheken mitgeliefert werden und der Code ist nicht mehr Plattform unabhängig. 3.4 Design Patterns Bei der Entwicklung und Erweiterung grafischer Oberflächen können verschiedene Design Patterns 16 eingesetzt werden. Vier im Laufe der Entwicklung eingesetzte Patterns werden an dieser Stelle kurz vorgestellt, für ausführliche Beschreibungen und weitere Patterns wird auf das Buch Design Patterns der Gang of Four verwiesen. 14 OpenGL ist eine von der Hardware unterstützte Grafikbibliothek. 15 Java Native Interface - Schnittstelle zum Aufruf nativen Codes, z.b. aus DLLs. 16 Entwurfsmuster, Lösungsansätze für bekannte Probleme. 23

32 3. Grundlagen Das erste Pattern trägt den Namen Composite und eignet sich zur Darstellung von Baumstrukturen. Dies ist insbesondere für die Abbildung einer Komponentenhierarchie von Bedeutung. Wenn verschiedene Komponenten in ein System integriert werden müssen, wird das Adapter Pattern genutzt, um die Verbindung zwischen Komponenten mit unterschiedlichen Schnittstellen herzustellen. Mit Hilfe des Observer Patterns kann eine ereignisgetriebene Kommunikation, wie sie bei der Verarbeitung von Berührungen auf einem Touchscreen vorkommt, realisiert werden. Singleton stellt sicher, dass von einer Klasse maximal ein Objekt instanziert wird. Ein Einsatzgebiet ist die zentrale Verwaltung bestimmter Ressourcen Composite Mit Hilfe des Composite Pattern lassen sich wie eingangs erwähnt Baumstrukturen und Hierarchien abbilden. Dabei soll der Nutzer keinen Unterschied zwischen zusammengesetzten Componenten und einfachen Componenten sehen. Dies ist gerade dann ein Vorteil, wenn beide meistens auf dieselbe Art und Weise verwendet werden und nur selten spezifisches Verhalten verlangt wird. Im Bereich grafischer Oberflächen wird dieses Pattern daher sehr häufig eingesetzt. Beispielsweise werden Methoden zum Verschieben, Skalieren oder Zeichnen sowohl für zusammengesetzte, als auch für einfache Komponenten äquivalent genutzt. Dem Aufrufer ist in der Regel egal, welche Art von Komponente er manipuliert. Es wird ein einheitliches Interface für beide Arten zur Verfügung gestellt. Abbildung 3.7: Klassendiagramm des Composite Patterns Diese Abstraktion wird im Composite Pattern durch die abstrakte Klasse Component realisiert. Wie im Klassendiagramm in Abbildung 3.7 zu sehen ist, erben sowohl einfache, im Diagramm Leaf genannte, als auch zusammengesetzte, Composite genannte, Komponenten 24

33 3.4 Design Patterns von der abstrakten Klasse. Immer dann, wenn eine Methode keine Unterscheidung zwischen Composite und Leaf fordert, sollte sie in der abstrakten Komponente definiert werden. Auffällig ist, dass bedingt durch die Vererbung auch Leafs die Methoden add, remove und getchild besitzen, obwohl diese für sie keinen Sinn machen. Dies ist eine Verletzung des Prinzips der Klassenhierarchie, das besagt, dass jede Klasse ausschließlich Methoden definieren sollte, die Bedeutung für ihre Subklassen haben, vgl. (Erich Gamma 2005). Im Fall des Composite Patterns wird dieser Verstoß durch den Gewinn an Transparenz in Kauf genommen Adapter Das Adapter Pattern stellt eine Verbindung zwischen verschiedenen Klassen, die auf Grund unterschiedlicher Interfaces nicht miteinander kommunizieren können, her. Dieser Fall tritt sehr oft ein, wenn bestehende Klassen wiederverwendet werden sollen, deren Interface jedoch nicht übernommen werden kann. Das Prinzip des Adapters existiert nicht nur in der Informatik, Adapter werden im Alltag oft verwendet, so z.b. Adapter für Steckdosen im Ausland. Dem Gerät, das in ihn eingesteckt ist, ist nicht bekannt, ob es an einer kompatiblen Steckdose angeschlossen ist oder ob es in einen Adapter eingesteckt wurde. So auch die Funktionsweise des Adapter Patterns in der Softwareentwicklung. Wie auf dem Klassendiagramm in Abbildung 3.8 zu sehen ist, implementiert der Adapter das vom Klienten geforderte Interface. Intern werden Methodenaufrufe auf das Interface der adaptierten Klasse (im Diagramm als Adaptee bezeichnet) umgesetzt. Die Komplexität von Adaptern kann, abhängig von der Ähnlichkeit der beteiligten Interfaces, sehr hoch sein. Abbildung 3.8: Klassendiagramm des Adapter Patterns Zur Implementierung stehen grundsätzlich zwei Möglichkeiten zur Verfügung. Im Klassendiagramm, Abbildung 3.8, dargestellt und auch bei der Implementierung des Eingabegeräts eingesetzt, wurde ein Objekt-Adapter. Ein Objekt der adaptierten Klasse wird mit dem 25

34 3. Grundlagen Adapter assoziiert. Die andere Möglichkeit ist der Klassen-Adapter, der Vererbung nutzt. Auf diesen wird im Rahmen der Arbeit nicht näher eingegangen, eine ausführliche Beschreibung beider Adapter findet sich im Design Patterns Buch von (Erich Gamma 2005) Observer Dieses Pattern gehört zu den Verhaltensmustern. Mit Hilfe von Observer können Änderungen an einem Objekt beliebig vielen anderen Objekten mitgeteilt werden. Dabei wird das Hollywood Prinzip 17 genutzt. Mit Hilfe einer einheitlichen Methode hierfür bleiben die Objekte weitestgehend unabhängig voneinander. Der Ansatz steht in direktem Kontrast zum Polling, bei dem permanent nachgefragt wird, ob Änderungen aufgetreten sind. Wie aus dem Klassendiagramm in Abbildung 3.9 hervorgeht, können sich beliebig viele Observer bei einem Subject, mit Hilfe der attach Methode registrieren. Dieser Vorgang ist mit der Registrierung bei einem Newsletter vergleichbar. Wenn man in die Liste der Empfänger aufgenommen wurde, wird man über Änderungen automatisch informiert. Werden keine weiteren Nachrichten mehr benötigt, kann man seine Registrierung beenden. Hierfür steht beim Observer Pattern die detach Methode zur Verfügung. Tritt eine Änderung im Subject auf und wird dies über notify bekannt gegeben, so wird die update Methode aller zugehörigen Observer aufgerufen. Die Observer aktualisieren daraufhin ihren Zustand mit dem des Subjects. Es stehen wiederum zwei unterschiedliche Modelle zur Verfügung, entweder werden die Daten mit der update Methode übergeben, oder jeder Observer holt sich, wie im Klassendiagramm dargestellt, die benötigten Daten selbst. Abbildung 3.9: Klassendiagramm des Observer Patterns Das Observer Pattern beschreibt lediglich den Ansatz der Kommunikation zwischen 17 Don t call us, we call you. 26

35 3.4 Design Patterns Subject und Observer. Implementierungen können sehr komplex werden, wenn z.b. Caching eingesetzt werden muss, die Nachrichten synchron übertragen werden sollen oder das Pattern in einem verteilten System eingesetzt wird, bei dem Ausfallsicherheit eine Rolle spielt Singleton Singleton ist auf den ersten Blick das einfachste Pattern, es besteht aus genau einer Klasse und maximal einem instanzierten Objekt. Dieses Objekt kann beispielsweise zum Verwalten bestimmter Resourcen, wie Datenbankverbindungen, eingesetzt werden. Eine weitere Anforderung ist, einen globalen Weg des Zugriffs auf dieses Objekt zu schaffen, damit dieses im gesamten System verfügbar ist. Abbildung 3.10: Klassendiagramm des Singleton Patterns Der Singleton besitzt eine statische Methode getinstance, die das Objekt, falls erforderlich, instanziert und die Instanz dem Aufrufenden zurück gibt. Auf diese Art und Weise wird der globale Zugriff zum Objekt gewährleistet. Die zweite Bedingung, die Existenz von maximal einem Objekt zu garantieren ist, wie nachfolgend beschrieben, schwieriger umzusetzen. Wie dem Klassendiagramm in Abbildung 3.10 zu entnehmen ist, besitzt der Singleton einen Konstruktor, der mindestens als protected deklariert wird. Dieser soll verhindern, dass von außerhalb der Klasse eine Objektinstanz erzeugt wird. Für die Erzeugung der Instanz gibt es unterschiedliche Möglichkeiten. Eine ist die Instanzierung durch die Methode getinstance, sie überprüft, ob bereits eine Instanz existiert, indem sie den Wert des Feldes uniqueinstance abfragt, ist keine Instanz vorhanden, wird der Konstruktor aufgerufen und ein Objekt erzeugt. Anschließend referenziert uniqueinstance dieses Objekt. Die einfachste Variante in Java ist, dem statischen Feld uniqueinstance direkt ein Objekt zuzuweisen, eine Instanz wird dann beim Laden der Klasse automatisch erzeugt. Trotz des einfachen Aufbaus hat dieses Pattern Tücken, die nicht offensichtlich sind. In multithreaded Umgebungen muss garantiert werden, dass nicht mehrere Threads gleichzeitig die Methode getinstance aufrufen. Falls in Java entwickelt wird und verschiedene Classloader eingesetzt werden, steigt der Aufwand die Existenz maximal eines Objekts zu garantieren enorm. Detailiertere Informationen zu diesen Problemen und Lösungen finden sich im Buch Head First Design Patterns von (Eric Freeman 2006). 27

36

37 Kapitel 4 Virtuelle Tastatur 4.1 Verwendete Hardware Zum Test der Tastatur wurde der Multitouch-Tisch des Fraunhofer-Instituts in Stuttgart genutzt, der während der Projektdurchführung auf der FTIR Technik basierte. Für die Erkennung der Bewegungen wurde ein vom Fraunhofer-Institut entwickelter Tracker eingesetzt. Die zuerst vorgesehene Open Source Software Touchlib verursachte oft Programmabstürze. Der Tisch besitzt eine Bilddiagonale von ca. 150 cm bei 1024 zu 768 Bildpunkten. Als Quelle für das Tracking dient eine Webcam, die zwar Bilder mit einer Auflösung von 640x480 Pixel aufnehmen kann, genutzt werden jedoch nur 320x240 Pixel, da sonst die Latenz der Bildübertragung zu groß wäre, um eine natürlich wirkende Interaktion gewährleisten zu können. Da eine Erkennung mit Hilfe der Webcam auf Dauer inakzeptabel ist und der Tisch sehr viel Platz einnimmt, ist eine Lösung ohne Webcam wünschenswert. Hier existieren kommerzielle Lösungen, die lediglich aus einem Rahmen bestehen, der die Bildfläche umgibt. Der Vorteil ist, dass anstatt des Beamers ein LC oder Plasma Display verwendet und die Bauform bei gleichbleibender Diagonale schlank gehalten werden kann. Ein Transport und der Betrieb in hellen Räumen ist somit möglich. Die Präzision ist im Fall dieser Lösung deutlich höher als mit der Webcam. Eine Anpassung an die Lichtverhältnisse im Raum entfällt auch. 4.2 Anforderungsanalyse Die Bedienung eines Multitouch Screens erscheint auf den ersten Blick intuitiv. Anstatt mit einer Maus Objekte auszuwählen, werden diese einfach mit dem Finger berührt. Dabei ist zur Bedienung der Anwendungen keine sehr hohe Präzission erforderlich und deshalb keine zusätzliche Maus erforderlich. Für die Eingabe von Texten stehen bisher jedoch noch keine effizienten Lösungen zur Verfügung. Zwar könnte man eine gewöhnliche Tastatur nutzen, jedoch ist dies gerade im Multiuser-Umfeld problematisch. Eine andere Möglichkeit wäre, mehrere Tastaturen zu 29

38 4. Virtuelle Tastatur verwenden. Dabei würde sehr viel Platz verschwendet und die Lösung ist somit inakzeptabel. Eine Alternative ist die Abbildung der Tastaturen direkt auf dem Bildschirm. Dank der Multitouch-Fähigkeit können auf diese Weise mehrere Tasten gleichzeitig gedrückt werden, was bei einfachen Touchscreens nicht möglich war. Die Umschalt Taste konnte z.b. nicht zusammen mit einem Buchstaben gedrückt werden und Tastenkombinationen waren nicht effektiv realisierbar. Die Abbildung auf den Bildschirm bringt jedoch auch Nachteile gegenüber einer physikalischen Tastatur: Da die Oberfäche des Multitouch Screens glatt sein muss, um möglichst wenig Widerstand bei einer Eingabe mittels Gesten zu erzeugen, ist das Fühlen von Tasten für fließendes und auch blindes Schreiben erforderlich. In einfachen Umsetzungen, die das Layout einer echten Tastatur abbilden ist schnelles Schreiben folglich nicht möglich. Dies ist auch auf Videos der Microsoft Surface oder Jeff Han s Vorführungen zu sehen. Bisherige Bildschirmtastaturen lösen auch das Multiuser-Problem nicht. Wenn mehrere Benutzer an einem Multitouch Screen arbeiten, sollte jeder eine eigene Tastatur betreiben können, sonst ist kein echtes paralleles Arbeiten möglich. Bei der Verwendung nur einer Tastatur und einem Benutzer ist zu jeder Zeit bekannt, welches Eingabefeld ausgewählt ist und somit auch an welches Eingabefeld Tastaturereignisse gesendet werden. Wird im Multiuser Umfeld ein Element ausgewählt, ist nicht bekannt, ob dieses das Ziel einer Tastatureingabe werden soll. Beispielsweise könnte ein Benutzer in einem Textverarbeitungsprogramm einen Text eingeben, während ein anderer Benutzer Fotos sortiert. Wählt der Foto sortierende Benutzer ein Kommentarfeld das auf Texteingaben reagiert aus, kann das System nicht feststellen, ob die Texteingaben des ersten Benutzers weiterhin zur Textverarbeitung geleitet werden, oder von selbigem das Kommentarfeld als neues Ziel erwünscht ist. Werden mehrere Tastaturen eingesetzt, muss genau definiert sein, welche Tastatur welchem Textfeld 1 zugeordnet ist. Diese Anforderungen stellen das Grundgerüst für die Entwicklung einer angepassten und optimierten Texteingabe dar und sollten daher im Hinterkopf behalten werden. 4.3 Entwurf Um eine effektive Texteingabe zu gewährleisten entstand das Konzept einer Tastatur, die sich der Form und Lage der Hände des Nutzers anpassen kann. Jede Hand bedient eine von der anderen unabhängigen Teil der Tastatur. Ein Benutzer kann auf diese Weise beide Hände an einer für ihn angenehmen Position auf dem Bildschirm ablegen und muss nicht beide Hände mit geringem Abstand nebeneinander auf die Bildfläche legen. Hierdurch wird der Bereich direkt vor dem Benutzer, zusätzlich zum gestiegenen Bedienkomfort, für den Anwender anderweitig nutzbar. 1 Der Begriff Textfeld steht repräsentativ für jede Art von Komponenten oder Programmen, die auf Tastaturereignisse reagieren. 30

39 4.3 Entwurf Abbildung 4.1 veranschaulicht den Gewinn nutzbarer Arbeitsfläche. Im ersten Bild ist die Lage der konventionellen Tastatur durch ein rotes Rechteck abgebildet, sie belegt jedoch einen großen Teil des für den Anwender zum Arbeiten optimalen Bereichs, da andere Objekte mit relativ großer Entfernung zum Benutzer platziert werden müssen. Im zweiten Bild wird das Konzept der geteilten Tastatur veranschaulicht. Der für eine Interaktion nicht nutzbare Bereich beschränkt sich auf die zwei, mit rot markierten, Kreise. Abbildung 4.1: Vergleich zwischen verbundenem und geteiltem Tastenfeld. Im Folgenden wird auf den konzeptionellen Aufbau der Tastatur eingegangen und die Anpassungsmöglichkeiten erläutert. Beide Teile der Tastatur, sowohl für die linke, als auch die rechte Seite sind bis auf die Spiegelung identisch. Falls nicht explizit angegeben gelten die Beschreibungen für beide Seiten. Die Hauptkomponente ist die Abbildung einer Handfläche, sie soll als Ablage und zur Änderung der Tastenausrichtung dienen. Die Tastatur selbst sieht einer menschlichen Hand sehr ähnlich. Dadurch wird sichergestellt, dass alle Tasten mit möglichst wenig Bewegung der Finger und insbesondere der Hände erreichbar sind. Dies garantiert, dass die richtigen Tasten zuverlässig auch ohne Blickkontakt erreicht werden und ermöglicht schnelles Schreiben. Abbildung 4.2 ist ein Konzept des Eingabegeräts. Rote und weiße Kreise symbolisieren die verfügbaren Tasten, wobei sich die roten Tasten unterhalb der Hand in Ausgangsstellung befinden. Sie können durch Ziehen auf dem Tisch einzeln verschoben werden. Die Positionen aller anderen Tasten werden automatisch gesetzt. Die Positionen der Tasten über- und unterhalb der roten Tasten werden durch Strecken und Zusammenziehen eines Fingers erreicht und müssen deshalb ungefähr dem Verlauf des Fingers folgen. Hierzu wird eine Art Gelenk auf der virtuellen Handfläche für jeden Finger erzeugt. Es ermöglicht die automatische Platzierung der Tasten in einer Linie zur roten Taste und dem Gelenk. Die Ausrichtung des Textes erfolgt ebenfalls über die Lage dieser Linie. Der Zeigefinger und der kleine Finger ist, vergleichbar zum 10-Finger System, für die doppelte Anzahl Tasten zuständig. Dies ist ohne Probleme möglich, da seitlich ausreichend Platz zur Verfügung steht. Die auf einer gewöhnlichen Tastatur vorhandene Ziffernreihe ist nicht vorhanden. Um diese Tasten erreichen zu können müsste sich die Hand zu weit von ihrer Ausgangslage entfernen, sodass anschließend deren Position kontrolliert werden muss. 31

40 4. Virtuelle Tastatur Im Gegensatz zur konventionellen Tastatur wird aus diesem Grund der Daumen doppelt belegt. Die zweite Taste, in der Abbildung als Second bezeichnet, ändert die Funktion aller anderen Tasten. Bei gedrückter Second Taste zeigen die Tasten der rechten Hand einen Ziffernblock und die der linken diverse Sonderzeichen. Die Zweitbelegung ist auf den jeweiligen Tasten exemplarisch gekennzeichnet. Tastenbelegungen können beliebig angepasst werden. Das Eingabegerät soll von einer Vielzahl unterschiedlicher Benutzer genutzt werden können, aus diesem Grund wird sowohl der Tastendurchmesser als auch die Größe der abgebildeten Handfläche auf den Benutzer angepasst. Dabei sollen sowohl Hände von Kindern, als auch von erwachsenen Menschen unterstützt werden. Für die Anpassung stehen verschiedene Möglichkeiten zur Verfügung. Abbildung 4.2: Konzept der rechten Tastaturhälfte Sie kann automatisch anhand des Abstands der Finger zur Handfläche durchgeführt werden. Der Benutzer muss keine manuelle Anpassung vornehmen. Dies erfordert jedoch eine sehr gute Erkennung der Handfläche durch den Tracker und komplexe Algorithmen, die 32

41 4.3 Entwurf die gewonnenen Daten auswerten. Auf Grund dieser Anforderungen scheidet das Verfahren für Tische, die beispielsweise auf FTIR Technik basieren aus. Eine andere Möglichkeit ist, die Größe der Handfläche manuell anzupassen, was je Benutzer einmal durchgeführt werden muss. Die Größe der Tasten wird dann mittels der Größe der Handfläche berechnet. Das Verfahren ist in der Konfiguration aufwendiger, für den FTIR Einsatz jedoch erfolgsversprechend. Als Gesten werden Ziehen, Drehen und Skalieren genutzt. Ziehen der Tastatur erfolgt durch Verschieben eines, die abgebildete Handfläche berührenden, Fingers. Die Tastatur folgt den Bewegungen des Benutzers. Rotation wird durch Drehen von zwei berührenden Fingern um einen Punkt realisiert. Die Komponente wird dann im selben Winkel, wie sich die Lage der Punkte zueinander verändert, gedreht. Durch Ziehen von zwei berührenden Fingern voneinander weg, wird die Tastatur vergrößert. Durch Bewegung zueinander, wird sie verkleinert. Bei allen Gesten muss darauf geachtet werden, dass die blaue Taste nicht berührt wird, da sonst die erwünschten Gesten nicht zustandekommen. Das Problem der Auswahl einer Zielkomponente, wenn mehrere Nutzer am selben Tisch arbeiten, wird mit Hilfe der in der Abbildung blauen Schaltfläche gelöst. Bei normalem Tippen auf eine Komponente weiß diese nicht, wer die Komponente ausgewählt hat. Dieses Problem wird gelöst indem, ausgehend von der Schaltfläche, der Finger auf das Ziel verschoben wird. Die Tastatur bewegt sich bei diesem Vorgang nicht. Wird direkt auf der Handfläche gezogen, bewegt sich die Tastatur entsprechend mit. Mit der blauen Schaltfläche können auch mehrere Tastaturteile mittels Ziehen mit einander verbunden werden, so z.b. die linke mit der rechten Hand. Durch das Verbinden wirken sich auch Tasten die das Verhalten anderer beeinflussen auf alle verbundenen Teile aus. Trotz räumlicher Unabhängigkeit funktionieren die Tastaturen als wäre es eine einzige. Der Tastaturteil, an den der andere angeheftet 2 wurde, wird zur primären Tastatur. Das heißt dieser Teil kann Ziele für die Tastenevents auswählen, ohne dass die Verbindung zwischen den beteiligten Tastaturteilen aufgelöst wird. 2 mit Hilfe der Ziehen-Geste verbunden. 33

42

43 Kapitel 5 Implementierung Zur Implementierung des Eingabegerätes wurde Processing verwendet, da bereits andere Komponenten, die Processing nutzen, vom Fraunhofer-Institut eingesetzt werden. Eine kurze Einführung ist in Kapitel 3.2 zu finden. Der Fokus von Processing liegt primär im Bereich Gestaltung, deshalb werden nativ keine Komponenten für eine grafische Benutzeroberfläche mitgeliefert. Wäre Processing z.b. mit Swing kompatibel, könnte dies dennoch nicht genutzt werden. Swing ist nicht für die Interaktion mit mehreren Benutzern gleichzeitig ausgelegt. Auch besteht keine Unterstützung für Multitouch-Eingaben wie zum Beispiel Rotation der Komponenten. Gerade diese Eingaben verändern die Anforderungen an die grafische Oberfläche, sodass manche Komponenten überflüssig werden. Beispielsweise kann mit Hilfe geeigneter Gesten auch ohne Bildlaufleiste gescrollt werden. Aus diesem Grund musste vor der Implementierung des Eingabegerätes ein geeignetes Framework für GUI-Komponenten entwickelt werden. Im Folgenden wird die Entwicklung grafischer Oberflächen für Multitouch Screens im allgemeinen und im speziellen, bei der Realisierung des virtuellen Eingabegeräts, beschrieben. 5.1 Überblick Im Laufe der Zeit haben sich grafische Oberflächen im Wesentlichen in zwei Aspekten verändert. Einerseits sind neue Komponenten hinzu gekommen, andererseits wurden bestehende Komponenten optisch verbessert. Begrenzender Faktor war und ist auch heute noch die Leistungsfähigkeit der Hardware. So wäre Transparenz in grafischen Oberflächen in den 90er Jahren undenkbar gewesen, heute jedoch ein Muss für moderne Benutzeroberflächen. Beim Vergleich von Windows 3.11 und Windows Vista wird die Ähnlichkeit der Benutzeroberflächen deutlich, siehe hierzu die Screenshots in Abbildung 5.1. Wird ein GUI Framework für Multitouch ausgelegt, ändern sich die Anforderungen. Rechteckige Fenster mit Knöpfen zur Anpassung der Größe müssen Gesten zur Skalierung weichen. Die oben beschriebene Rotation muss unterstützt werden, was signifikante Auswirkungen auf die Performance und die erforderlichen Cachingalgorithmen, zur Senkung 35

44 5. Implementierung Abbildung 5.1: Windows 3.11 und Windows Vista im Vergleich des Rechenaufwands beim Zeichnen, hat. Einige wichtige Punkte bei der Entwicklung eines Frameworks sind dabei die Struktur der Komponenten, das Rendern auf den Bildschirm, die Auswahl von Objekten die auf dem Bildschirm angezeigt werden, auf welche Art GUI Komponenten miteinander kommunizieren können und wie Gesten unterstützt werden. Diese Punkte werden in den folgenden Abschnitten erklärt. Anschließend werden notwendige Basiskomponenten und der Aufbau der Tastatur vorgestellt. Da die Tastatur kein gewöhnliches Tastenlayout besitzt, wird in einem separaten Kapitel die Tastenkodierung beschrieben. Eine Beschreibung zur Bedienung ist in der Projektdokumentation enthalten, auf die an dieser Stelle verwiesen 1 wird. 5.2 Komponentenstruktur Grafische Benutzeroberflächen sind im Allgemeinen eine zur Konsole alternative Interaktionsart zwischen dem Menschen und einem Computer. Mit Hilfe visueller Grafiken werden Bedienelemente strukturiert dargestellt. Dieses Kapitel beschäftigt sich mit der Art und Weise, wie diese strukturiert werden. Der gesamte Bildschirm wird zum Beispiel in Fenster unterteilt, die wiederum verschiedene einfache Bedienelemente enthalten können. Klassisch lässt sich dies als Baumstruktur abbilden, wobei der Bildschirm im Beispiel die Wurzel ist, die Fenster die Äste und einfache Bedienelemente jeweils Blätter sind. Ziel der Unterteilung ist, die Abhängigkeiten zwischen Komponenten zu minimieren und gleichzeitig zusammengehörige Elemente zusammenfassen zu können. Grundsätzlich existieren zwei unterschiedliche Arten von Komponenten. Zum einen sind dies einfache Bedienelemente, wie Knöpfe oder Auswahlfelder. Zum andern gibt es so genannte Container, wie zum Beispiel Fenster oder Panels. Container können beliebig 1 Zu finden auf der beiliegenden CD unter /doc/projektdokumentation.pdf. 36

45 5.2 Komponentenstruktur viele andere Komponenten enthalten. Die enthaltenen Komponenten werden im Folgenden Kinder 2 genannt. Für jede Komponente ist die Position, an der sie gezeichnet wird, durch ihren übergeordneten Container bestimmt. Die Position wird relativ zu diesem angegeben, dadurch ändern sich die Koordinaten bei einer Verschiebung ihres übergeordneten Containers nicht. Würden alle Positionen absolut angegeben werden, so müssten bei der Verschiebung einer Komponente mit 100 Kindern die Koordinaten für jedes Kind korrigiert werden. Derartige Korrekturen wären zum einen sehr rechenintensiv und zum andern ein großer Verwaltungsaufwand Projektspezifische Implementierung In der im Projekt entwickelten GUI wurde der Komponentenbaum, mit Hilfe des Composite Design Patterns, das in Kapitel vorgestellt wurde, implementiert. Die operation Methode ist im konkreten Fall die draw Methode, die zum Zeichnen einer Komponente dient. Sollen alle Komponenten gezeichnet werden, genügt das Aufrufen dieser Methode für das in der Hierarchie oberste Element. Die Reihenfolge in der die Zeichenmethoden der Kinder aufgerufen werden ist hierbei entscheidend, das zuletzt gezeichnete Kind ist am weitesten im Vordergrund. Abbildung 5.2: Struktur der Basiskomponenten des entwickelten Frameworks Da in Processing die von PApplet abgeleitete Klasse den Zeichenkontext des Bildschirms bereitstellt und eine Verbindung über Vererbung unerwünscht ist, wurde zur Verbindung der GUI und des Processing Applets ein Adapter 3 eingesetzt. Dieser nutzt den 2 Begriff aus der Graphentheorie für in einem Baum untergeordnete Knoten. 3 Das Adapter Pattern wird in Kapitel beschrieben. 37

46 5. Implementierung Zeichenkontext des Applets und stellt ihn anderen GUI Komponenten zur Verfügung. Abbildung 5.2 zeigt die Basisstruktur des entwickelten Frameworks und die Verbindung zwischen diesem und dem Processing Applet. AComponent und ALeafComponent sind zudem in GL Versionen vorhanden. Diese ermöglichen in ihrer paint Methode JOGL Code direkt zu schreiben. 5.3 Rendern Ziel des Renderns ist das Zeichnen aller Komponenten an der korrekten Position. Dabei muss darauf geachtet werden, dass für die Darstellung möglichst wenig Rechenaufwand benötigt wird, und dennoch das dargestellte Bild immer den aktuellen Zustand der GUI Komponenten widerspiegelt. Effektives Rendering ist mit der aufwendigste Bereich bei der Entwicklung einer grafischen Benutzeroberfläche. Um Rechenzeit zu sparen, sollte nur dann etwas neu gezeichnet werden, wenn tatsächlich eine Änderung aufgetreten ist. Im Falle einer Änderung sollte bestmöglich nur der Bereich neu gezeichnet werden, der sich geändert hat. Entscheidende Faktoren sind hier Transparenz und die Form der Komponenten ebenso wie deren Rotation. Letztere ist im Bereich von Multitouch Screens wünschenswert. Je nachdem, welche dieser Features implementiert werden sollen, steigt die Komplexität der Algorithmen, um den Rechenaufwand gering zu halten. Vor der Implementierung des Renderns sollte geprüft werden, welche dieser Features unterstützt werden müssen und welche weniger wichtig sind. Nachdem dies feststeht kann der Zeitaufwand und die Kosten für die Entwicklung abgeschätzt werden. Im Folgenden werden für die einzelnen Fälle mögliche Lösungsansätze aufgezeigt Rendern einer einfachen GUI Im günstigsten Fall genügt die Implementierung einer GUI mit rechteckigen Komponenten und ohne Transparenz. Zunächst werden alle Komponenten gezeichnet und das Ergebnis in einem Puffer abgelegt. Nach dem Zeichnen einer Komponente wird deren Zustand auf valide gesetzt. Dies bedeutet, dass sich die aktuelle Darstellung der Komponente im Puffer befindet. Jeder Frame 4 wird direkt aus dem Puffer gerendert, falls ein Mauszeiger angezeigt werden muss, kann dieser nachträglich auf den Bildschirm gerendert werden. Verändert sich die Darstellung einer Komponente, z.b. eine Schaltfläche wird gedrückt, wird ihr Zustand auf invalide gesetzt. Da sowohl Position, als auch Größe der Komponente gleich geblieben sind, kann garantiert werden, dass sich am restlichen Bild nichts verändert hat. Handelt es sich um eine Container-Komponente, werden all ihre Kinder ebenfalls invalidiert 5. 4 Einzelnes Bild einer Bildersequenz, wie sie ein Monitor anzeigt. 5 Der Zustand wird ebenfalls auf invalide gesetzt. 38

47 5.3 Rendern Wird eine Komponente verschoben oder vergrößert, bzw. verkleinert, wird die Berechnung aufwendiger, da sich der von ihr abgedeckte Bereich ändert und somit auch unbeteiligte Komponenten neu gezeichnet werden müssen. Beim Verschieben werden alle Komponenten invalidiert, die den Bereich, den die Komponente vor der Verschiebung abgedeckt hat, schneiden. Die Pixel im Bildpuffer, die zuvor von der Komponente abgedeckt wurden, werden auf ihre neue Position kopiert. Vor dem Neuzeichnen wird der Zeichenbereich eingeschränkt, damit keine unnötigen Änderungen am Puffer vorgenommen werden. Dies kann entweder in Software implementiert werden oder mit Hilfe entsprechender Hardware. Im Falle einer Nutzung von OpenGL als Renderer ist dies mit Hilfe des Scissor Buffers möglich. Die Vergrößerung einer Komponente ist relativ unkompliziert, sie wird einfach mit allen ihren Kindern neu gezeichnet. Eine Verkleinerung erfordert die oben beschriebene Invalidierung des zuvor bedeckten Bereichs. Die Komponente selbst muss ebenfalls neu gezeichnet werden. Eine Überprüfung, welche Komponenten in einem bestimmten Bereich liegen, ist recht einfach feststellbar. Es müssen lediglich die x- und y-koordinaten der Eckpunkte verglichen werden. Anstatt in einem separaten Schritt diese Überprüfung durchzuführen, können auch alle Komponenten invalidiert werden und beim Rendervorgang jeder Komponente überprüft werden, ob sie im relevanten Bereich liegt. Falls dies nicht der Fall ist, wird sie nicht gezeichnet und ihr Zustand und der ihrer Kinder auf valide gesetzt. Sollte das Verschieben und Skalieren dennoch zu rechenintensiv sein, kann ein einfacher Mechanismus angewandt werden. Es wird lediglich andeutungsweise der Rahmen der Komponente verändert und erst die Änderung am Puffer vorgenommen, wenn die Verschiebung, bzw. Skalierung abgeschlossen ist. Dieser wird, wie die Maus, in einem separaten Schritt gezeichnet. Der Rahmen besteht im einfachsten Fall lediglich aus einem farbigen Rechteckumriss der Komponente. Die Technik kann prinzipiell immer eingesetzt werden, jedoch schadet sie dem Look and Feel der grafischen Oberfläche. Frühe Windows Versionen nutzten die Optimierung, in späteren wurde sie jedoch standardgemäß deaktiviert Vollständige Transparenz Eine eingeschränkte Möglichkeit Transparenz zu implementieren ist in Komponenten vollständig transparente Flächen zuzulassen. Das bedeutet, dass ein Pixel bei der Darstellung einer Komponente entweder den Hintergrund vollständig abdeckt oder nicht gezeichnet wird. Somit können Komponenten mit beliebigen Formen, wie beispielsweise runde Knöpfe erzeugt werden. Die Ränder dieser Komponenten wirken, vor allem bei Bögen, sehr rau, da für jedes Pixel entschieden werden muss, ob es gezeichnet wird oder nicht und keine Zwischenschritte möglich sind. Der Zeichenvorgang erfolgt ähnlich dem oben beschriebenen, jedoch wird die Invalidierung aufwendiger. Falls sich die Darstellung einer Komponente, wie zum Beispiel durch Druck einer Schaltfläche geändert hat, ist das Vorgehen von der Implementierung abhängig. Zwei verschiedene Implementierungen sind denkbar. Zum einen kann eine separate Maske erzeugt werden, die die Transparenzinformation für jedes Pixel der Komponente 39

48 5. Implementierung speichert. Zum andern kann eine Farbe bestimmt werden, die als transparent interpretiert wird, häufig wird hierfür Lila 6 verwendet. Beide Verfahren haben Vor- und Nachteile. Eine separate Maske benötigt zusätzlichen Speicherplatz, ermöglicht jedoch diverse Optimierungen, die nachfolgend beschrieben werden. Eine spezielle Farbe zu verwenden spart Speicher, schränkt jedoch den verfügbaren Farbraum ein. Ändert sich die Darstellungsart einer Komponente, können auch Bereiche unterhalb der Komponente sichtbar werden, die zuvor verdeckt waren. Folglich muss der Zeichenbereich auf die Position und Größe der Komponente beschränkt und alle Komponenten die sich unterhalb dieser befinden auch gezeichnet werden. Wird für transparente Bereiche eine separate Maske verwendet, sind bestimmte Optimierungen des Vorgangs möglich. Werden ausschließlich Farbwerte verändert und die Transparenz-Maske bleibt unverändert, genügt es, wie im vorigen Abschnitt beschrieben, die Komponente mit ihren Subkomponenten zu zeichnen. Bei Verschiebungen können die Werte im Puffer nicht wie zuvor von der vorherigen Position zur neuen kopiert werden, da sonst Pixel von darunter liegenden Komponenten unter Umständen mit kopiert würden. In diesem Fall muss die Komponente an ihrer neuen Position neu gezeichnet werden. Im Folgenden bezieht sich das neu Zeichnen einer Komponente, falls nicht anderst angegeben, auf alle ihr untergeordneten Komponenten. Wird eine Maske für die Transparenzinformation verwendet, wäre eine Optimierung denkbar: Es werden Pixel im Puffer kopiert, jedoch vor dem Einfügen mit der Transparenz maskiert. Das heißt nur Pixel, die in der verschobenen Komponente nicht transparent sind, werden auf den neuen Puffer kopiert. Bei der Skalierung ist das Verhalten von der Art der Skalierung abhängig. Wird die Transparenzmaske genutzt, ausschließlich vergrößert und nicht geändert, genügt die Neuzeichnung der Komponente. Ansonsten müssen alle darunter liegenden Komponenten ebenfalls gezeichnet werden Verdeckung Bisher wurde vereinfacht angenommen, dass ausschließlich Komponenten die sich direkt im Vordergrund befinden und vollständig angezeigt werden, geändert werden. Trifft dies nicht zu, müssen Komponenten neu gezeichnet werden. Hierbei muss die Verdeckung beachtet werden. Ein einfaches Verfahren ist, alle Komponenten die zeitlich nach der geänderten Komponente gezeichnet wurden, mit Einschränkung des Zeichenbereichs, erneut zu zeichnen. Veränderungen an Objekten die sich nicht im unmittelbaren Vordergrund befinden sind dann rechenintensiver. Ein anderes Vorgehen ist, nur Pixel zu zeichnen, die nach dem kompletten Zeichenvorgang sichtbar bleiben. Hierfür muss für jedes Pixel im Puffer gespeichert werden, auf welcher Verdeckungsebene es sich befindet. Jede Komponente bildet dabei eine eigene Verdeckungsebene. Steht der Wert für die Verdeckung im Puffer für eine Komponente, die 6 Im RGB Farbraum die Farbe mit den Werten (255,0,255). 40

49 5.3 Rendern weiter im Hintergrund liegt, oder für die Komponente selbst, wird beim Zeichenvorgang das aktuelle Pixel gezeichnet und der Verdeckungswert ersetzt, sonst bleiben die Werte im Puffer erhalten. Wird eine Komponente beliebig viele Ebenen in den Hintergrund verschoben, müssen die darüber liegenden Komponenten die in diesen Bereich hineinragen neu gezeichnet werden. Die Komponente selbst muss dabei nicht neu gezeichnet werden. Wird eine Komponente beliebig viele Ebenen in den Vordergrund verschoben, genügt ein erneutes zeichnen dieser Komponente, falls Verdeckungsinformationen vorliegen. Sonst müssen die darüber liegenden Komponenten ebenfalls erneut gezeichnet werden. Die Schwierigkeit beim Verschieben in den Vordergrund bzw. Hintergrund ist, die Werte für die Tiefenposition im Puffer aktuell zu halten oder ein effizientes Verfahren zu finden, das über die Zuordnung der Werte im Puffer zu deren Komponenten, schnelle Vergleiche erlaubt. In diesem Fall hilft die Komponentenhierarchie zur Einschränkung der Komplexität, damit nicht alle Komponenten miteinander verglichen werden müssen Halbtransparenz Im Gegensatz zur Unterstützung lediglich vollständig transparenter Bereiche, können bei der Verwendung von Halbtransparenz auch Pixel gezeichnet werden, die zwar sichtbar sind, ihren Hintergrund jedoch nicht vollständig abdecken. Auf diese Weise können beispielsweise Komponenten mit beliebigen Formen gezeichnet werden, jedoch ohne dass die oben erwähnten harten Kanten entstehen. Zudem können spezielle Glaseffekte und andere Überblendungen eingesetzt werden. Diese Erweiterung hat erhebliche Konsequenzen auf das effiziente Zeichnen der Komponenten. Bestimmte Farben als Transparenz auszuwählen macht in diesem Fall wenig Sinn. Jede Komponente benötigt zusätzliche Transparenzinformationen, einen so genannten Alpha Wert. Beim Zeichnen dient der Alpha-Wert eines Pixels dazu, die aus dem zu ersetzenden Pixel und dem neuen Pixel resultierende Farbe zu berechnen. Diese Berechnung, auch Blending genannt, kann auf verschiedene Weise mit unterschiedlichen Ergebnissen durchgeführt werden. Eine häufig verwendete Formel zur Berechnung der resultierenden Farbe nc ist: nc = sa sc + (1 sa) dc Der Alpha-Wert der Quelle 7 sa wird mit dessen Farbwerten sc multipliziert. Anschließend wird der inverse Alpha-Wert berechnet und mit den Farbwerten des Ziels 8 multipliziert. Beide Ergebnisse werden addiert, um den resultierenden Farbwert zu erhalten. Die Werte für Alpha müssen dabei im Bereich von 0 bis 1 liegen. Da sich bei halbtransparenten Fenstern die Darstellung abhängig vom Untergrund ändert, scheidet das oben genannte Kopieren innerhalb des Puffers beim Verschieben und Skalieren aus. Sowohl bei diesen Änderungen, als auch bei Darstellungsänderungen muss 7 Wert des einzufügenden Pixels. 8 Wert des schon im Puffer liegenden Pixels. 41

50 5. Implementierung immer neu gezeichnet werden. Was bedeutet, dass im ungünstigsten Fall alle Komponenten, die im Bereich der Veränderung liegen, neu gezeichnet werden müssen. In der Regel kann davon ausgegangen werden, dass nicht alle Fenster halbtransparent sind. Auf Grund der Überlagerung wären dann Texte nur noch schwer lesbar. Wenn bekannt ist, welche Komponenten halbtransparent sind und welche nicht, müssen Komponenten, die zwar innerhalb des Bereichs der Veränderung liegen, jedoch von nicht transparenten Komponenten vollständig verdeckt werden, nicht gezeichnet werden. Wenn die veränderte Komponente selbst vollständig verdeckt ist, muss ebenso keine Änderung vorgenommen werden. Der Fokus bei der Verwendung von Halbtransparenz liegt auf der Einschränkung des Bereichs, der aktualisiert werden muss, und der Beschleunigung des Zeichenvorgangs. Zum Beispiel können Komponenten, die in der Regel nicht vergrößert werden, zunächst in eine Textur gerendert werden. Somit genügt zum erneuten Zeichnen der Komponente die Textur in den entsprechenden Bereich zu zeichnen. Erstellen einer Textur funktioniert jedoch nur dann, wenn innerhalb der Komponente nicht geblendet wird, da sonst doppelt geblendet würde Rotation Ein weiteres Problem stellt die Rotation dar. Ist es möglich Komponenten zu rotieren, erschwert sich der Test, ob eine Komponente im Bereich einer anderen liegt oder nicht. Da eine Rotation eines Containers dessen Kinder inklusive deren Koordinatenachsen rotiert, ist diese Berechnung deutlich aufwendiger. Abbildung 5.3: Beispiele für Bounding Boxes Da die Komplexität der Berechnung zu hoch ist, kann vereinfacht mit so genannten Bounding Boxes gearbeitet werden. Dies bezeichnet, im zweidimensionalen Raum minimal große Rechtecke, die entlang der Koordinatenachsen ausgerichtet sind und ihr zugehöriges Objekt vollkommen einschließen. Die Berechnung mit Hilfe der Bounding Box kann dann wieder mit einem einfachen Vergleich der x- und y-koordinaten erfolgen. Nachteilig ist, dass Bounding Boxes in manchen Fällen deutlich größer sind, als das Objekt das sie umgeben. Abbildung 5.3 veranschaulicht dies. Das blaue Rechteck stellt die Komponente selbst dar und der rote Rahmen deren Bounding Box. 42

51 5.3 Rendern Rendern der Tastatur Die Anforderungen an das Rendern der grafischen Oberfläche ergeben sich aus den Rahmenbedingungen. Die Tastatur ist für Multitouch-Tische gedacht, die von mehreren Benutzern aus verschiedenen Richtungen bedient werden können. Dies setzt die Unterstützung für eine Rotation der Komponenten voraus. Grundlage für die Entwicklung war Processing, welches unzählige Möglichkeiten zum Zeichnen bietet. Ziel war eine möglichst gute Integration in die Processing Umgebung und die Erweiterbarkeit um neue Komponenten. Da Processing die Verwendung von Halbtransparenz grundsätzlich unterstützt, musste dies, auch wenn die Tastatur dies nicht nutzt, implementiert werden. Um die Handfläche und Tasten möglichst gut abzubilden, mussten Komponenten mit beliebiger Form erzeugt werden können. Eine hohe Kompatibilität mit Processing stand dabei oft im Gegensatz zur erreichbaren Performance. Die Einschränkung des Zeichenbereichs gestaltete sich beispielsweise sehr aufwendig, da Processing dafür nicht ausgelegt ist. Zum Rendern der Oberfläche wird OpenGL eingesetzt, welches diese Funktionalität bietet. Ein optimales Rendering-Verfahren mit den aufgelisteten Features muss auf Grund der Komplexität als separates Projekt angesehen werden. Aus diesem Grund konnten nur in bedingtem Umfang Optimierungen durchgeführt werden. Der Rendervorgang selbst gestaltet sich auf Grund der Beschränkungen des Zeichenbereichs auf die Form der jeweils übergeordneten Komponente relativ komplex. Wie auf dem Aktivitätsdiagramm in Abbildung 5.4 zu sehen ist, wird zunächst das Koordinatensystem verschoben und rotiert. Anschließend erfolgt eine erste Beschränkung des Zeichenbereichs auf die Größe der Komponente mit Hilfe des Stencil Buffers 9 Abbildung 5.4: Der Renderprozess als Aktivitätsdiagramm dargestellt. Danach werden Einstellungen vorgenommen, um die Alpha-Maske zu zeichnen. Das Zeichnen der Maske schränkt, mit Hilfe des Stencil Buffers, den Zeichenbereich nochmals auf die gezeichnete Form ein. Standardgemäß maskiert die Alpha-Maske die beim anschließenden Zeichenvorgang dargestellten Pixel. Dieses Verhalten kann jedoch von abgeleiteten Komponenten überschrieben werden. 9 Ein Puffer der OpenGL Rendering Pipeline. Details finden sich bei (ope 2007). 43

52 5. Implementierung Im nächsten Schritt wird die Komponente regulär gezeichnet. Findet der Rendervorgang für die Berechnung des Auswahlpuffers statt, werden im Schritt paint selection alle gezeichneten Farben ersetzt, hierzu mehr im folgenden Kapitel. Ist die Komponente gezeichnet, wird die Alpha-Maske zum Zeichnen der Kindkomponenten vorbereitet. Anschließend werden alle Kinder gezeichnet und der Stencil Buffer in den Ausgangszustand zurückgesetzt. 5.4 Picking Picking beschäftigt sich mit der Frage, wie Komponenten ausgewählt werden. Hierzu existieren unterschiedliche Verfahren, die abhängig von der Art der grafischen Oberfläche, gute Ergebnisse liefern. Im Folgenden werden verschiedene Verfahren vorgestellt und die konkrete Implementierung bei der Entwicklung der Tastatur erklärt. Das Thema ist, abhängig vom Verfahren, insbesondere bei komplexen Oberflächen, stark mit dem zuvor beschriebenen Rendern gekoppelt Implementierung in einfachen GUIs In einfachen grafischen Oberflächen, kann die Komponentenhierarchie zum Auswählen von Komponenten ausgenutzt werden. Dazu werden zunächst die Koordinaten, an denen eine Auswahl stattfinden soll, bestimmt und anschließend der Komponentenbaum durchsucht. Beginnend mit der Wurzel werden Komponenten dabei auf Treffer mit dem ausgewählten Punkt überprüft. Ist die Komponente ein Container und wird diese getroffen, so werden all ihre Kinder, beginnend beim zuletzt gezeichneten auf Treffer überprüft. Sollte kein Kind getroffen werden, so ist der Container ausgewählt worden. Tritt bei einem Kind ein Treffer auf, müssen die restlichen Kinder, da sie sich auf dem Bildschirm auf jeden Fall hinter dem getroffenen befinden, nicht mehr überprüft werden. Ob das Verfahren performant ist, hängt von der Effizienz des Tests auf Treffer mit einer Komponente ab. Im Falle rechteckiger Komponenten ohne Rotation ist dieser sehr schnell berechenbar. Wird jedoch Transparenz verwendet, um Komponenten beliebiger Form zu erstellen, wird das Bestimmen eines Treffers deutlich aufwendiger. Zunächst wird überprüft, ob ein Treffer überhaupt denkbar ist, indem das begrenzende Rechteck der Komponente getestet wird. Im Falle eines Treffers muss überprüft werden, ob das getroffene Pixel vollständig transparent ist, ist dies der Fall, liegt kein Treffer vor. Beim Auftreten von rotierten Komponenten kommen Matrixmultiplikationen zur Berechnung der Rotation hinzu. Ein weiterer Nachteil ist die Laufzeit des Algorithmus bei mehreren gleichzeitigen Auswahlen, wie bei grafischen Oberflächen für Multitouch Screens üblich. Alle Tests werden getrennt voneinander durchgeführt und benötigen die volle Laufzeit pro Test. 44

53 5.4 Picking Implementierung mit modifiziertem Renderer Eine andere Möglichkeit ist, die Informationen des Renderers zu nutzen, um Objekte auszuwählen. Werden z.b. Verdeckungsinformationen berechnet und bleiben sie im Puffer abrufbar, können diese genutzt werden, um Objekte auszuwählen. Diese Auswahl ist unabhängig der Komplexität der grafischen Benutzeroberfläche immer gleich schnell. Es müssen lediglich die entsprechenden Informationen aus dem Puffer gelesen werden. Stehen die Verdeckungsinformationen ausschließlich beim Rendervorgang zur Verfügung, was beispielsweise bei transparenten Oberflächen der Fall sein kann, da in der Regel bei Veränderungen neu gezeichnet werden muss, können mit Hilfe einer Modifikation im Rendervorgang Objektinformationen gerendert werden. Hierzu wird jeder Komponente eine eindeutige Nummer zugeordnet. Diese Nummer sollte in ihrer Größe 24 bit bei Verwendung eines RGB Puffers und 32 bit bei Verwendung eines RGBA 10 Puffers nicht übersteigen. Diese Bedingung schränkt zwar die maximale Anzahl der Komponenten ein, sollte jedoch auf Grund der Größe kein Problem darstellen, da mit 24 bit bereits über 16 Millionen Komponenten gezeichnet werden könnten. Abbildung 5.5: Originaldarstellung der GUI und Darstellung im Picking-Modus Ist für jede Komponente eine Nummer vergeben, kann diese im Rendervorgang zur Identifizierung genutzt werden. Wenn eine Komponente gerendert wird, wird die Farbe aller zu zeichnenden Pixel auf den Farbwert der Identifikationsnummer eingestellt. Dazu kann die Funktion zum Einstellen von Farben modifiziert werden. Sollte dies nicht möglich sein, lassen sich auch unmittelbar nach dem Zeichnen einer Komponente deren Farben ändern. Hier ist zu beachten, dass gezeichnete Pixel, die vollständig transparent sind, nicht überschrieben werden dürfen, da sonst Komponenten mit beliebiger Form nicht mehr unterstützt werden. Falls beim Rendern mit Identifikationsnummern der Alpha-Wert mit genutzt wird, muss Überblenden deaktiviert werden, damit zu zeichnende Farben direkt übernommen werden. Das Ergebnis eines solchen Rendervorgangs, kann wie in Abbildung 5.5 auf der rechten Seite dargestellt aussehen. Das entstandene Bild wird nicht auf dem Bildschirm dargestellt, sondern in einen separaten Puffer kopiert. Auswahlen werden dann direkt in diesem Puffer vorgenommen, indem, wie oben beschrieben, der Wert des Puffers an der relevanten Stelle 10 Abkürzung für: Red Green Blue Alpha. 45

54 5. Implementierung ausgelesen wird. Um von den IDs 11 auf eine Komponente schließen zu können, empfiehlt sich die Verwendung eines Managers, der sowohl die Nummern den Komponenten bereit stellt, als auch Komponenten zu bestimmten Nummern liefern kann. Der neu erstellte Puffer muss in der Regel mit Änderungen an der eigentlichen Darstellung konsistent sein. Bei Verschiebungen oder Skalierungen der Komponenten verdoppelt sich in etwa der Rechenaufwand, da zwei Bilder erzeugt werden. Ändert sich lediglich die Darstellung einer Komponente ohne Einfluss auf deren Form zu haben, bleibt der Auswahlpuffer gültig und muss nicht neu gezeichnet werden. Das Rendern des Auswahlpuffers ist in manchen Fällen schneller, da die Berechnungen des Überblendens entfallen. Das Auswählen von Komponenten kann mit dieser Methode weitestgehend unabhängig von der Geschwindigkeit des Rendervorgangs gehalten werden, indem Double Buffering genutzt wird. Dies bedeutet, dass immer zwei Instanzen des Puffers existieren. Abbildung 5.6 zeigt den Ablauf einer Änderung. Initial haben beide Puffer die gleichen Informationen. Während aus einer Instanz ausschließlich gelesen wird, wird die andere aktualisiert. Ist die Aktualisierung abgeschlossen werden die Puffer getauscht. Änderungen die im neuen Lese- Puffer vorgenommen wurden, müssen in den neuen Schreibpuffer übernommen werden, bevor dieser aktualisiert wird. Dies ist im vierten Schritt dargestellt. Anschließend sind beide Puffer wieder im selben Zustand. Abbildung 5.6: Veränderungen der Puffer bei Verwendung von Double Buffering Picking im Tastatur-Projekt Im Projekt wurde der Renderer um das Rendern des oben genannten Auswahlpuffers erweitert. Da keine Manipulation der Zeichenfunktionen erwünscht war und Verdeckungsinfor- 11 Identifikationsnummern. 46

55 5.5 Eventsystem mationen im Nachhinein nicht mehr vorhanden waren, mussten die Komponenten während des Rendervorgangs umgefärbt werden. Der genaue Zeitpunkt des Umfärbens ist dem Aktivitätsdiagramm in Abbildung 5.4 zu entnehmen. Der Zusammenhang der für das Picking zuständigen Klassen ist in Abbildung 5.7 dargestellt. Für die Verwaltung der IDs ist der ComponentManager verantwortlich. Die Klasse ist ein Singleton, wie im Abschnitt beschrieben und stellt eine zentrale Stelle zur Registrierung zur Verfügung. Die Klasse wurde als Singleton ausgelegt, da somit verhindert wird, dass mehrere Instanzen gleiche IDs vergeben. ComponentManager verfügt über eine Methode add zum Registrieren einer Komponente und remove, um diese wieder zu löschen. Mit Hilfe von get findet ein qualifizierter Zugriff über die entsprechende ID statt. Abbildung 5.7: Darstellung der für die Komponentenauswahl nötigen Klassen. Für die Zuweisung von Bewegungen zu bestimmten Komponenten ist der MotionDispatcher verantwortlich. Er verwendet den ComponentPicker, um aus den Koordinaten der Ereignisse Referenzen auf zugehörige Komponenten zu erhalten. Der MotionDispatcher erhält die Events vom muito EventSystem, im Beispiel vom MotionProvider. Nachdem eine Bewegung einer Komponente zugewiesen ist, verarbeitet diese alle folgenden Events der Bewegung direkt. Das Eventsystem wird im nächsten Kapitel genauer beschrieben. Sowohl Dispatcher als auch Picker werden vom AppletComponentAdapter instanziert. Der Adapter verknüpft diese durch entsprechende Assoziationsbeziehungen. 5.5 Eventsystem Wesentlicher Bestandteil einer grafischen Benutzeroberfläche ist die Interaktion der Komponenten untereinander und mit dem Benutzer. Im Multitouch-Umfeld besteht die Kommunikation zwischen dem Benutzer und einzelnen Komponenten primär aus der Interaktion über Berührungen des Displays und daraus resultierenden Gesten. Letztendlich reagieren einzelne Komponenten unterschiedlich auf bestimmte Ereignisse, z.b. wird beim Auswählen eines Buttons dieser ausgelöst und beim Auswählen in einem Textfeld der Cursor auf die entsprechende Position gesetzt. Um jeder Komponente möglichst viel Freiheit bei der Verarbeitung von Benutzereingaben zu ermöglichen, muss die 47

56 5. Implementierung Schnittstelle zwischen Interaktion und ausgelösten Ereignissen generisch sein. Jede Komponente kann dann ihr spezifisches Verhalten über das generische Interface abbilden, ohne Veränderungen an diesem vornehmen zu müssen. Auf diese Weise bleiben die Komponenten zueinander kompatibel. Dieses generische Interface kann mit dem Observer Pattern, das in Kapitel kurz erklärt wird, realisiert werden. Alle Listener 12 auf Bewegungen implementieren ein gemeinsames Interface, das jede Bewegung verarbeiten kann. Für bestimmte Ereignisse, z.b. Auswählen, werden Standard-Implementierungen bereitgestellt, die lediglich der entsprechenden Komponente hinzugefügt werden müssen. Java nutzt dieses Prinzip in den GUI Frameworks AWT 13 und Swing, beschränkt die Art der Listener jedoch auf typische Ereignisse die auftreten können. Beispiele sind der MouseListener und KeyListener Implementierung eines Eventsystems Im Projekt erhält der MotionDispatcher Informationen über Bewegungen vom MotionProvider, welcher die Bewegungsinformationen des Trackers auswertet und für die Weiterverarbeitung aufbereitet. Der MotionDispatcher erhält Informationen über neue Bewegungen und weist diesen, mit Hilfe der Koordinaten der Bewegungen und des ComponentPickers, bestimmte Komponenten zu. Die Zuweisung erfolgt durch Registrierung der MotionListener der Komponente bei der aufgetretenen Bewegung. Weitere Ereignisse die dieser Bewegung zugeordnet werden, gelangen direkt zu den relevanten Listener, ohne einen erneuten Umweg über den MotionDispatcher. Endet eine Bewegung, werden auch die Verbindungen mit den zugeordneten Listener aufgehoben. Über verschiedene Arten von Standard-Listenern können darauf aufbauend Gesten implementiert werden. Diese stellen beim Auftreten einer bestimmten Geste entsprechende Methoden bereit, die überschrieben werden können. Manche Komponenten, wie beispielsweise ein Button, registrieren schon bei ihrer Erstellung automatisch Listener. Im Fall der Schaltfläche ändert sich die Farbe automatisch beim Tippen oder Ziehen der Komponente. Zur Kommunikation von Komponenten untereinander steht eine weitere Möglichkeit zur Verfügung. Über generische EventListener kann auf alle Arten von Events, die von anderen Komponenten gefeuert 14 wurden, reagiert werden. Auf diese Weise wurden Tastenereignisse des virtuellen Eingabegeräts implementiert. Zum Senden eines Events bietet der ComponentManager eine Methode, die das entsprechende Event entgegennimmt und an die Listener des Empfängers weiterleitet. Jeder Listener entscheidet selbst auf welche Eventarten er reagiert. Auf diese Weise können Listener programmiert werden, die bespielsweise sowohl auf Tasten Ereignisse als auch auf Ereignisse einer Spracherkennung reagieren. Zudem ist der Sender eines Ereignisses immer bekannt, was ein Antworten auf Nachrichten ermöglicht. 12 Entspricht dem Observer im Design Pattern. 13 Abstract Window Toolkit. 14 Begriff für das Auslösen eines Ereignisses. 48

57 5.6 Gesten 5.6 Gesten Basierend auf dem Eventsystem wurden Gesten implementiert, die jeder Komponente hinzugefügt werden können. Folgend werden verschiedene vorgestellt und deren Funktionsweise erläutert. Unabhängig von diesen sind viele weitere Gesten oder abweichende Implementierungen möglich. Dies liegt daran, dass zum jetzigen Zeitpunkt noch relativ wenig Erfahrung in diesem Bereich gesammelt wurde Tippen Tippen ist die einfachste Geste, sie tritt ein, wenn mit einem Finger eine Komponente kurz berührt wird ohne den Finger auf der Oberfläche zu bewegen. Als Erweiterung des einfachen Tippens können Druckinformationen genutzt werden, um zu entscheiden, ob eine Berührung aus Versehen stattgefunden hat, oder bewusst war Ziehen Komponenten können auf dem Bildschirm frei verschoben werden. Dies wird in der Regel mit der Ziehengeste realisiert. Sie ist mit die einfachste Geste, da lediglich absolute Bewegungen auf dem Bildschirm in für die Zielkomponente lokale Bewegungen umgerechnet werden müssen. Die Umrechnung ist auf Grund der Rotation von Komponenten erforderlich. Bewegungen werden, im Vergleich zu Rotationen und Skalierungen, in einer einfachen Implementierung mit nur einem Finger durchgeführt. Soll mit beliebig vielen Fingern verschoben werden können, steigt der Berechnungsaufwand zur Unterscheidung der Gesten Verbinden Zum Verbinden von Objekten kann eine separate Geste genutzt werden. Durch Drücken auf eine Komponente die diese Geste unterstützt und anschließendes Verschieben des Fingers auf eine andere Komponente, kann diese ausgewählt werden. Im Gegensatz zum herkömmlichen Auswählen mit Hilfe des Tippens, ist bekannt wer die Auswahl getroffen hat, bzw. von welcher Komponente diese Auswahl ausgegangen ist. Sie kann verwendet werden, um eine Bildschirmtastatur einem bestimmten Textfeld zuzuordnen Rotieren Eine Rotation kann über die Bewegung von zwei Punkten bestimmt werden. Hierzu wird zu Beginn der Rotation die Position der Punkte bestimmt und der Winkel zwischen der Horizontalen und einer Geraden durch diese Punkte berechnet. Anhand der Veränderung des Winkels kann die Rotation bestimmt und auf eine Komponente übertragen werden. Eine einfache Umsetzung besteht daraus, die Komponente um ihren Mittelpunkt zu drehen. Alternativ kann das Verhalten eines realen Gegenstandes imitiert werden, indem 49

58 5. Implementierung der Drehpunkt zwischen die Berührpunkte gelegt wird. Letztere Variante ist bei großen Komponenten, die an beliebigen Stellen gedreht werden, zu bevorzugen. Bei eher kleinen, runden Komponenten genügt in der Regel die leichter zu berechnende erste Methode. Prinzipiell wäre eine Implementierung mit mehr als zwei Berührpunkten möglich. In diesem Fall muss die Rotation aus den Bewegungen der einzelnen Punkte interpoliert werden. Die Bestimmung des Drehpunktes ist lediglich mit bedingter Genauigkeit möglich. Der Grund hierfür ist, dass die einzelnen Finger nicht exakt der Rotationsbewegung folgen. Dann ist nicht klar, ob die Bewegung Teil einer Rotation oder Verschiebung ist. Dieses Problem tritt in der physischen Welt nicht auf. Wenn ein Blatt gedreht wird, bleibt die Lage der Finger auf dem Blatt gleich. Beim Einsatz im Multitouch Screen bewegen sich die Finger auf der glatten Oberfläche, und haften nicht an ihrem Berührpunkt Skalieren Für die Skalierung von Komponenten steht eine separate Geste zur Verfügung. Mit Hilfe von zwei Fingern, die sich voneinander entfernen wird eine Komponente vergrößert, bewegen sich die Finger aufeinander zu, wird sie verkleinert. Wie schon bei der Rotationsgeste gibt es auch hier mehrere Implementierungsmöglichkeiten. Zwar bleibt der Skalierungsfaktor bei der Größenänderung immer gleich, jedoch nicht das Zentrum. Folglich besteht die Skalierung im einfachen Fall lediglich aus der Änderung von Höhe und Breite der Komponente. Im zweiten Fall wird die Komponente entsprechend verschoben, sodass der Mittelpunkt der Skalierung immer zwischen den beiden Fingern liegt. Wird Skalierung und Rotation kombiniert, bleibt die relative Position der Berührpunkte auf den Komponenten immer dieselbe. Diese Geste kann prinzipiell auch mit einer beliebigen Anzahl von Berührpunkten realisiert werden, jedoch wieder um den Preis der Schwierigkeit dies zu implementieren. 5.7 Basiskomponenten Jedes Framework für grafische Oberflächen stellt bestimmte Basiskomponenten zur Verfügung. In der Regel sind dies Textfelder, Schaltflächen, Fenster, und viele andere. Diese Bedienelemente sind dem Benutzer bereits bekannt und finden sich deshalb in den verschiedensten grafischen Oberflächen in ähnlicher Darstellung wieder. Da sich Multitouch-Oberflächen für einen Massenmarkt erst langsam durchsetzen, bleibt abzuwarten, welche Komponenten sich auf Dauer etablieren. Manche werden sich in ihrem Aussehen und der Funktionalität an eine von Gesten gesteuerte Bedienung anpassen müssen. Ein Beispiel ist das Textfeld, da zum Scrollen keine speziellen Scroll-Balken benötigt werden, falls dies durch entsprechende Gesten realisiert werden kann. Andere Komponenten werden in ihrer Funktionalität bestehen bleiben, so zum Beispiel die Schaltfläche. Unabhängig davon, ob die Interaktion durch Mausklick oder Tippen stattfindet muss eine Möglichkeit zur Auswahl vorhanden sein. 50

59 5.7 Basiskomponenten Implementierte Komponenten Im Zuge der Entwicklung des virtuellen Eingabegeräts war ebenfalls die Entwicklung mancher Komponenten erforderlich. Beispielsweise wurde ein sehr einfaches Textfeld implementiert, sowie Schaltflächen und spezielle Komponenten für das Eingabegerät. Diese sind die Abbildung einer Taste der Tastatur, genannt Key, eine Komponente für die Handfläche und schließlich der Container, Keyboard, der alle Komponenten visuell zusammenfasst und verwaltet. Textfeld Das Textfeld unterstützt Änderungen der Textfarbe, Größe, Schriftart und des Schriftstils. Alle Einstellungen gelten für das komplette Feld. Features wie Word Wrap, das Umbrechen von Zeilen am Rand der Komponente, sind nicht implementiert. Diese Komponente ist primär zum Test der Tastatur gedacht. Visuell ist sie daher lediglich durch eine rechteckige Fläche dargestellt. Die Komponente ist in der Lage KeyEvents, die über die generische Event-Schnittstelle übertragen werden, zu verarbeiten. Optional kann sie mit den oben genannten Gesten ausgestattet werden. Schaltfläche Für Schaltflächen stehen mehrere Komponenten zur Verfügung. Basis ist eine abstrakte Variante, die für die visuelle Veränderung beim Tippen oder Verschieben verantwortlich ist. Darüber hinaus existieren zwei konkrete Implementierungen, zum einen eine rechteckige und zum andern eine ovale Schaltfläche. Lediglich die etwas aufwendigere Zeichenmethode des elliptischen Buttons unterscheidet diesen vom rechteckigen. Beim Druck auf die Komponente wird der innere Bereich heller dargestellt als der Rahmen. Beim Verschieben ist kein Farbunterschied zwischen dem Rahmen und Innenbereich erkennbar. Ist eine Schaltfläche nicht ausgewählt, wird der innere Bereich dunkler dargestellt. Abbildung 5.8 zeigt dies anhand einer ovalen Schaltfläche. Abbildung 5.8: Darstellung einer Schaltfläche in verschiedenen Zuständen. Taste Tasten erweitern den normalen Knopf, um die Funktionalität Tastenereignisse zu erzeugen. Tasten unterscheiden sich von regulären Schaltflächen dahingehend, dass schon beim 51

60 5. Implementierung Drücken der Taste Events ausgelöst werden. Schaltflächen hingegen werden erst ausgelöst, wenn die Schaltfläche losgelassen wird. Die Taste generiert, wie bei reellen Tastaturen üblich, bei lang anhaltend gedrückter Taste fortwährend KEY_DOWN Events. Dies hat zur Folge, dass ein lang gedrückter Buchstabe, in einem Textfeld periodisch geschrieben wird, bis die Taste losgelassen wird und letztendlich ein KEY_UP Event folgt. Tasten besitzen ein aktuell zugewiesenes Zeichen und einen Tastencode. Der Tastencode dient zur Identifizierung der Taste innerhalb des Keyboards. Die Zuweisung eines Zeichens erfolgt anhand des Tastencodes und der aktuell gedrückten Tasten. Näheres hierzu folgt im Kapitel 5.9. Handfläche Zur Abbildung der Handfläche wurde eine eigene Komponente entworfen. Diese Komponente enthält die im Konzept erläuterte Pick-Schaltfläche zum Auswählen eines Ziels. Durch die Auswahl wird jedem Tastenevent das gewählte Ziel zugeordnet. Die Handfläche ist in ihrer Darstellung eine Besonderheit. Da sie auch zum Skalieren und Rotieren der Tastatur genutzt wird, muss sie in unterschiedlichen Größen gezeichnet werden. Um dies zu gewährleisten wird sie mit Hilfe von kubischen Splines 15 gezeichnet. Die Funktionalität hierfür stellt Processing zur Verfügung. Die Pick Schaltfläche hat eine Doppelbedeutung, sie dient nicht nur zum Auswählen eines Ziels für Tastenereignisse, sondern auch zum Skalieren und Rotieren der Tastatur. Wird die Taste angeklickt, ändert sich deren Farbe, die initial rot ist, in Grün. Dies zeigt an, dass der Skalierungsmodus aktiviert ist und mit Hilfe der in Kapitel 5.6 beschriebenen Gesten rotiert und skaliert werden kann. Eine Verschiebung der Tastatur ist auch ohne Wechseln in den Skalierungsmodus jederzeit möglich. Nach Beendigung der Tastaturanpassung genügt ein erneutes Tippen auf die Pick Schaltfläche, um zum regulären Modus zurückzukehren. Die Palm 16 Komponente besitzt zudem Ankerpunkte für die Ausrichtung der Tasten des Eingabegeräts. Die Lage der Ankerpunkte stimmt im Wesentlichen mit der Position der Fingergelenke der Handfläche überein. Keyboard Das Keyboard vereint alle für die Tastatur notwendigen Komponenten in einem Container. Es ist für die Zuweisung der Zeichen der einzelnen Tasten zuständig und leitet die Tastenereignisse weiter. Die Komponente selbst ist auf dem Bildschirm nicht sichtbar, schränkt jedoch den maximalen Zeichenbereich für die Tasten und Handfläche ein. Zur Positionierung der Tasten bei Veränderungen der Handform ist ein spezieller MotionListener zuständig. Dieser Listener, der ComponentDragger genannt wird, positioniert die zu einem Finger gehörenden Tasten anhand der Position der bewegten Taste und dem jeweiligen Ankerpunkt der Handfläche. Die Positionen aller Tasten werden mit 15 Kurven die eine beliebige Anzahl Punkte mit minimaler Krümmung verbinden. 16 Klassenname der Handflächen Komponente. 52

61 5.8 Aufbau der Tastatur Offsets 17 und relativen Rotationen zur bewegten Taste angegeben. Auf den Algorithmus zur Berechnung der Positionen wird an dieser Stelle nicht im Detail eingegangen. Die Tastatur liest bei ihrer Generierung die Zuordnung von Tastencodes zu Tasten aus einer XML Datei, was eine einfache Lokalisierung der Tastatur durch Anpassen dieser Datei ermöglicht. Weiteres hierzu im Kapitel Tastenkodierung. 5.8 Aufbau der Tastatur Zum Test der virtuellen Tastatur wurde eine Beispielanwendung entwickelt. Sie zeigt zwei unabhängige Tastaturen, jeweils für die linke und rechte Hand. Des Weiteren sind drei einfache Textfelder, die unterschiedlich rotiert sind, sichtbar. Das Design der Tastaturen entspricht im Wesentlichen dem Konzept aus Kapitel 4, es wurden lediglich die Verbindungen zwischen den Tasten ausgeblendet. Abbildung 5.9 zeigt einen Screenshot der Anwendung. Der Einfluss der Lage der Tasten auf deren Rotation ist ebenfalls gut erkennbar. Rote Tasten sind im Gegensatz zu blauen Tasten verschiebbar, die Position der blauen Tasten wird bei einer Verschiebung automatisch berechnet. Eine Anleitung zur Installation und Benutzung der Beispielanwendung findet sich in der Projektdokumentation auf der beigefügten CD. Ebenfalls auf der CD ist das Programm als ausführbares Jar-Archiv und im Quellcode vorhanden. Das ausführbare Archiv befindet sich im Ordner /bin und der Quellcode im Ordner /src. 5.9 Tastenkodierung Jede Taste einer Tastatur besitzt eine bestimmte Kodierung, diese identifiziert die Taste und ist unabhängig vom dargestellten Zeichen. Anhand einer so genannten KeyMap werden den jeweiligen KeyCodes, Zeichen zugeordnet. Für verschiedene Sprachen existieren jeweils eigene KeyMaps. Diese ordnen Buchstaben und Sonderzeichen je nach Häufigkeit des Gebrauchs an, so fehlen z.b. auf einer amerikanischen Tastatur die Umlaute. Für die entwickelte Tastatur wurde aus diesem Grund ein eigenes Verfahren zum Mapping der Tasten entwickelt, welches auf das gegebene Tastenlayout angepasst ist. Die Key- Map ist flexibel und kann auch für neu entwickelte Tastaturen mit anderen Layouts angepasst werden. Eine Beschreibung des Mappings findet sich auf der beigefügten CD in der Projektdokumentation. 17 Offset, engl. für Versatz. 53

62 5. Implementierung Abbildung 5.9: Screenshot der laufenden Anwendung 54

63 Kapitel 6 Evaluierung Für virtuelle Eingabegeräte ist die Anpassung an den jeweiligen Benutzer ein klarer Vorteil zu herkömmlichen Tastaturen. Auch die Teilung des Eingabegeräts in zwei Teile ist sinnvoll, um die effektiv nutzbare Arbeitsfläche eines Benutzers zu maximieren. Dieser Effekt tritt bei konventionellen Tastaturen nicht auf, da diese in der Regel nicht auf dem Bildschirm platziert werden. Für Multitouch Screens muss der Sinn bisher etablierter GUI Komponenten, wie Scrollleisten, überdacht werden. Neue Frameworks müssen diverse Gesten unterstützen und Komponenten rotierbar machen. Dies hat weitreichende Folgen auf bisher genutzte Caching- Algorithmen und Methoden zur Objektauswahl. Der angestrebte Vergleich des entwickelten Eingabegeräts zu konventionellen Tastaturen, konnte im Rahmen dieser Arbeit nicht durchgeführt werden. Die Hardware des derzeitigen Multitouch-Tisches eignet sich leider nicht zum Vergleich, dies hat mehrere Gründe: Die Erkennung der Berührpunkte mit dem Bildschirm erfordert einen relativ hohen Druck auf die Touchfläche. Der Grund hierfür ist ein zu geringer Kontrast zwischen Berührpunkten und Umgebungslicht. Dies wirkt sich negativ auf die Tippgeschwindigkeit aus. Ein weiterer beschränkender Faktor ist durch den Tracker gegeben, wie schon in den Grundlagen erläutert, muss eine Abwägung zwischen Auflösung des Bildes und der Framerate der Kamera stattfinden. Im speziellen Anwendungsfall war die geringe Auflösung problematisch. Die Darstellung der Tastatur bei der Skalierung auf Handgröße war relativ ungenau. Die Auflösung der Webcam ist deutlich geringer und folglich noch ungenauer. Aus diesem Grund können die exakten Berührpunkte nicht ermittelt werden, was ebenso negative Einflüsse auf die Schreibgeschwindigkeit hat. Die geringe Framerate der Webcam stellt ein weiteres Problem dar, da kurz aufeinander folgende Tipps als Verschiebung interpretiert werden. Trotz fehlender Erkenntnisse eines Vergleichs der Schreibgeschwindigkeiten ist zu erwarten, dass sich anpassende Eingabegeräte einen enormen Vorteil zu bisherigen Bildschirmtastaturen bieten und mittelfristig auch mit physischen Tastaturen Schritt halten können. 55

64 6. Evaluierung Als Optimierung des bestehenden Eingabegeräts könnten die Tasten oberhalb und unterhalb der Ausgangslage der Finger näher an diese gerückt werden. Somit verringert sich der Weg, den die Hand zurücklegen muss, um die Tasten zu erreichen und versehentliches Tippen zwischen die Tasten wird verhindert. Inwiefern dies sinnvoll ist kann anhand eines Schreibtests verifiziert werden. Abbildung 6.1 zeigt die Konzeption der optimierten Tastatur. Abbildung 6.1: Konzept der Tastatur mit optimierten Tastenpositionen. Der Bereich, Eingabegeräte für Multitouch Screens, ist momentan noch relativ unerforscht. Das entwickelte Eingabegerät ist lediglich ein Schritt von vielen, die noch gemacht werden müssen, um Multitouch auch im Alltag sinnvoll nutzen zu können. 56

Ph 16/01 G_Online-Ergänzung

Ph 16/01 G_Online-Ergänzung Ph 16/01 G_Online-Ergänzung S. I S. I + II S. II PHYSIK KAI MÜLLER Online-Ergänzung 1 Spektralanalyse für den Hausgebrauch Material Lichtquelle ( Energiesparlampe, LED-Lampe, Kerze (Vorsicht: nichts anbrennen!),

Mehr

- dynamisches Laden -

- dynamisches Laden - - - Fachbereich Technik Department Elektrotechnik und Informatik 21. Juni 2012 1/23 2/23 s dynamisch Code kann von mehreren Programmen genutzt werden => kleinere Programme einzelne Teile eines Programms

Mehr

Verteidigung der Diplomarbeit 3D-Netzwerk-Visualisierung

Verteidigung der Diplomarbeit 3D-Netzwerk-Visualisierung 1 Verteidigung der Diplomarbeit 3D-Netzwerk-Visualisierung Stefan Ziegler 11. März 2005 INHALTSVERZEICHNIS 2 Inhaltsverzeichnis 1 Aufgabe 3 2 Umsetzung 4 3 Struktur 5 4 Paketverarbeitung 8 5 Grafische

Mehr

Kurzanleitung für Windows-Computer - IPC-10 AC

Kurzanleitung für Windows-Computer - IPC-10 AC Kurzanleitung für Windows-Computer - IPC-10 AC Auspacken Packen Sie die Überwachungskamera vorsichtig aus und prüfen Sie, ob alle der nachfolgend aufgeführten Teile enthalten sind: 1. MAGINON IPC-10 AC

Mehr

Bedienungsanleitung Ihres Whiteboard Systems. Whiteboard for all

Bedienungsanleitung Ihres Whiteboard Systems. Whiteboard for all Bedienungsanleitung Ihres Whiteboard Systems Whiteboard for all Inhaltsverzeichnis: Einführung Anschluss an einen Computer Programm Starten Ausrichten Kalibrieren Handhabung Whiteboard System Hilfe Fehlermöglichkeiten

Mehr

Software zur Gestensteuerung von Windows 7 über Kinect for Xbox

Software zur Gestensteuerung von Windows 7 über Kinect for Xbox WIN&I 1.0 Software zur Gestensteuerung von Windows 7 über Kinect for Xbox Steuern Sie mit WIN&I Windows 7 und tausende Applikationen über den Sensor Kinect for Xbox. WIN&I ersetzt die Computer-Maus und

Mehr

Word starten. Word Word 2010 starten. Schritt 1

Word starten. Word Word 2010 starten. Schritt 1 Schritt 1 Word 2010 starten. 2) Klicke danach auf Microsoft Office Word 2010. Sollte Word nicht in dieser Ansicht aufscheinen, dann gehe zu Punkt 3 weiter. 1) Führe den Mauszeiger auf die Schaltfläche

Mehr

Seite 1. Scan4All2PDF. RK-Software. Inhalt

Seite 1. Scan4All2PDF. RK-Software. Inhalt Seite 1 Scan4All2PDF RK-Software sverzeichnis Seite 2 INHALTSVERZEICHNIS... 2 EINFÜHRUNG... 3 VERSIONS-EINSCHRÄNKUNGEN... 4 VERSION UPDATEN... 5 KÄUFE WIEDERHERSTELLEN... 7 DIE SCAN-VERWALTUNG... 8 NEUEN

Mehr

Astro Stammtisch Peine

Astro Stammtisch Peine Astro Stammtisch Peine ANDREAS SÖHN OPTIK FÜR DIE ASTRONOMIE ANDREAS SÖHN: OPTIK FÜR DIE ASTRONOMIE < 1 Grundsätzliches Was ist Optik? Die Optik beschäftigt sich mit den Eigenschaften des (sichtbaren)

Mehr

Nutzung interaktiver Systeme. mit Windows-Tools

Nutzung interaktiver Systeme. mit Windows-Tools Nutzung interaktiver Systeme mit Windows-Tools Grundlagen Die Legamaster Touchsysteme funktionieren grundsätzlich per Plug & Play -Technik ohne Installation zusätzlicher Treiber oder spezieller Software.

Mehr

Aufgabe 4 (Musterlösung) Corel Draw

Aufgabe 4 (Musterlösung) Corel Draw Aufgabe 4 (Musterlösung; Zahnrad) Corel Draw Seite 1 von 8 Aufgabe 4 (Musterlösung) Corel Draw Inhaltsverzeichnis Vorbemerkung... 2 Musterlösung... 2 Zusatz... 8 Abbildungsverzeichnis Abb. 1: Die 3 Hilfslinien

Mehr

3 Mit Programmen und Fenstern

3 Mit Programmen und Fenstern 34 MIT PROGRAMMEN UND FENSTERN ARBEITEN 3 Mit Programmen und Fenstern arbeiten In dieser Lektion lernen Sie wie Sie Programme starten und wieder beenden wie Sie mit Fenstern arbeiten Ein Programm starten

Mehr

Creational Patterns. Seminar Software-Entwurf. Thomas Liro WS 2004/05.

Creational Patterns. Seminar Software-Entwurf. Thomas Liro WS 2004/05. Creational Patterns Seminar Software-Entwurf WS 2004/05 Thomas Liro Inhaltsüberblick Einordnung des Themas Beschreibung von Design Pattern Auswahl von Design Patterns Was sind Creational

Mehr

Schnell-Installationshandbuch

Schnell-Installationshandbuch Megapixel-(PoE) Cube- Netzwerkkamera CB-100A-/CB-101A/CB-102A Serie Schnell-Installationshandbuch Quality Service Group 1. Überprüfen Verpackungsinhalt a. Netzwerkkamera b. Produkt-CD CB-100A/CB-101A c.

Mehr

Becker Content Manager Inhalt

Becker Content Manager Inhalt Becker Content Manager Inhalt Willkommen beim Becker Content Manager...2 Installation des Becker Content Manager...2 Becker Content Manager starten...3 Becker Content Manager schließen...3 Kartendaten

Mehr

DLR SchoolLab Lektion 1 Erste Schritte

DLR SchoolLab Lektion 1 Erste Schritte 1 Navigation Die Entwicklungsoberfläche lässt sich durch sechs Buttons am unteren Bildschirmrand bedienen. Alternativ kann man auch über die Tastatur navigieren. Hierfür gibt es folgdende Abkürzungen:

Mehr

b.a.b-technologie gmbh ThemeEditor Dokumentation

b.a.b-technologie gmbh ThemeEditor Dokumentation b.a.b-technologie gmbh ThemeEditor Dokumentation Anleitungsversion IV Stand 03/2013 Datum: 18. April 2013 DE Inhaltsverzeichnis b.a.b technologie gmbh im INHOUSE Dortmund Rosemeyerstr. 14 44139 Dortmund

Mehr

Dateiansichten in Ordnern

Dateiansichten in Ordnern Dateien und Ordner Das Ordnen und Organisieren von Dateien ist das A und O, wenn es darum geht, effektiv mit dem Computer zu arbeiten. Nur wer Ordnung hält und seinen Datenbestand logisch organisiert,

Mehr

Erste Schritte. Leica 3D Disto Tutorial

Erste Schritte. Leica 3D Disto Tutorial Erste Schritte Leica 3D Disto Tutorial Erste Schritte Dieses Tutorial zeigt das Wichtigste zum Leica 3D Disto und seine Standardanwendung. Aufstellen Verbindung Lizenz Messen Zielsucher Speichern & Export

Mehr

Programm «Messen» Leica 3D Disto Tutorial

Programm «Messen» Leica 3D Disto Tutorial Programm «Messen» Leica 3D Disto Tutorial Tutorial Eine einfache Anleitung zur Funktion Messen des Leica 3D Disto. Aufstellen Messen Verdeckte Punkte 1 & 2 Standpunktwechsel Scans Speichern & Exportieren

Mehr

Grundlagen der Augmented Reality

Grundlagen der Augmented Reality Institut für Computervisualistik Universität Koblenz 04.07.11 Inhaltsverzeichnis 1 Definitionen 2 Überblick Architektur 3 Anwendungsgebiete 4 Literatur Augmented Reality Definition nach Milgram und Kishino

Mehr

Das Gerät. Kurzanleitung. Schritt 1: Es werde Licht.

Das Gerät. Kurzanleitung. Schritt 1: Es werde Licht. Das Gerät Kurzanleitung Schritt 1: Es werde Licht. Drücken Sie den Ein-/Ausschalter. Die Taste leuchtet grün. Richten Sie das Licht von Ihren Augen weg aus. Drücken Sie die [+] und [-] Tasten für die Helligkeit.

Mehr

Physik 3 exp. Teil. 30. Optische Reflexion, Brechung und Polarisation

Physik 3 exp. Teil. 30. Optische Reflexion, Brechung und Polarisation Physik 3 exp. Teil. 30. Optische Reflexion, Brechung und Polarisation Es gibt zwei Möglichkeiten, ein Objekt zu sehen: (1) Wir sehen das vom Objekt emittierte Licht direkt (eine Glühlampe, eine Flamme,

Mehr

Set-top Box Controller BeoVision MX. Anleitung

Set-top Box Controller BeoVision MX. Anleitung Set-top Box Controller BeoVision MX Anleitung 3 In dieser Anleitung ist beschrieben, wie Sie Ihren Bang & Olufsen Set-Top-Box-Controller betriebsbereit machen und wie Sie ihn zusammen mit der gewählten

Mehr

Hier starten. Alle Klebebänder entfernen. Zubehörteile überprüfen

Hier starten. Alle Klebebänder entfernen. Zubehörteile überprüfen HP Photosmart 2600/2700 series all-in-one User Guide Hier starten 1 Benutzer von USB-Kabeln: Schließen Sie das USB-Kabel erst bei der entsprechenden Anweisung in diesem Handbuch an, da die Software sonst

Mehr

Weißes Licht wird farbig

Weißes Licht wird farbig B1 Experiment Weißes Licht wird farbig Das Licht, dass die Sonne oder eine Glühlampe aussendet, bezeichnet man als weißes Licht. Lässt man es auf ein Glasprisma fallen, so entstehen auf einem Schirm hinter

Mehr

Virtuelle Maschinen. Dr.-Ing. Volkmar Sieh

Virtuelle Maschinen. Dr.-Ing. Volkmar Sieh Virtuelle Maschinen Dr.-Ing. Volkmar Sieh Department Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2016/2017 V. Sieh Virtuelle Maschinen (WS16/17)

Mehr

Verwendung eines Leica DISTO mit Bluetooth Smart mit

Verwendung eines Leica DISTO mit Bluetooth Smart mit Verwendung eines Leica DISTO mit Bluetooth Smart mit V 1.1 April 2014 Inhaltsverzeichnis Leica DISTO -Geräte Bluetooth-Kompatibilität Leica DISTO Bluetooth Smart Leica DISTO sketch für ios Keyboard Mode

Mehr

Lektion I: Einführung

Lektion I: Einführung Lektion I: Einführung Vorwort: FCP/FCE sind Videoschnittprogramme für den Semi- bzw. Profi-Bereich. Mit diesem Workshop-Angebot wollen wir euch die beiden Videoschnittprogramme etwas näher bringen. 1.

Mehr

Entwurfsmuster - Iterator & Composite

Entwurfsmuster - Iterator & Composite Entwurfsmuster - Iterator & Composite Alexander Rausch Seminar Entwurfsmuster WS08/09 19. November 2008 Gliederung 1 Einführung 2 Das Iterator Entwurfsmuster 3 Das Composite Entwurfsmuster 4 Quellen 5

Mehr

HP Roar Plus Lautsprecher. Weitere Funktionen

HP Roar Plus Lautsprecher. Weitere Funktionen HP Roar Plus Lautsprecher Weitere Funktionen Copyright 2014 Hewlett-Packard Development Company, L.P. Microsoft, Windows und Windows Vista sind eingetragene Marken der Microsoft- Unternehmensgruppe in

Mehr

Graphische Benutzungsoberflächen mit Java. Einführung in NetBeans

Graphische Benutzungsoberflächen mit Java. Einführung in NetBeans Graphische Benutzungsoberflächen mit Java Einführung in NetBeans Graphische Benutzungsoberflächen! Interaktion mit dem Programm! Datenein- und ausgabe! Rückmeldungen über Verarbeitung der Daten! Visualisierung

Mehr

Jugend forscht Luca Mennen und Matthias Zalfen. Klasse 7, St. Michael-Gymnasium

Jugend forscht Luca Mennen und Matthias Zalfen. Klasse 7, St. Michael-Gymnasium Gefäßerkrankungen leicht erkannt Jugend forscht 2010 Luca Mennen und Matthias Zalfen Klasse 7, St. Michael-Gymnasium Gefäßerkrankungen leicht erkannt 1 Gefäßerkrankungen leicht erkannt Inhaltsverzeichnis

Mehr

Diana Lange. Generative Gestaltung Grundlagen von Processing

Diana Lange. Generative Gestaltung Grundlagen von Processing Diana Lange Generative Gestaltung Grundlagen von Processing Bereichsaufbau leitet einen Bereich ein Name des Bereichs (z.b. setup, draw, keypressed,...) (genaue Erklärung kommt später) kommt später, momentan

Mehr

Wissenswertes zum Einsatz von Lichtleitern

Wissenswertes zum Einsatz von Lichtleitern Wissenswertes zum Einsatz von Lichtleitern Dr. Jörg-Peter Conzen Vice President NIR & Process Bruker Anwendertreffen, Ettlingen den 13.11.2013 Innovation with Integrity Definition: Brechung Brechung oder

Mehr

FACHHOCHSCHULE MANNHEIM

FACHHOCHSCHULE MANNHEIM für Java-Programmierer Der Präprozessor Prof. Dr. Wolfgang Schramm FACHHOCHSCHULE MANNHEIM Hochschule für Technik und Gestaltung Präprozessor Ist dem Compiler vorgeschaltet ( Prä -). Spezielle Anweisungen

Mehr

Tipps und Tricks für Visio

Tipps und Tricks für Visio Tipps und Tricks für Visio Shapes In Visio werden die einzelnen Zeichenelemente Shapes genannt. Visio beinhaltet eine Reihe von vordefinierten Shapes die in Vorlagen (Bibliotheken) nach Fachgebieten zusammengefasst

Mehr

Christina Irfan View ist ein bekanntes und kostenloses Programm, mit dem man Bilder rasch und einfach bearbeiten kann.

Christina Irfan View ist ein bekanntes und kostenloses Programm, mit dem man Bilder rasch und einfach bearbeiten kann. Irfan View Christina Irfan View ist ein bekanntes und kostenloses Programm, mit dem man Bilder rasch und einfach bearbeiten kann. Kostenloser Download: http://www.chip.de/downloads/irfanview_12998187.html

Mehr

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18

Mehr

9 Start- und Sperrbildschirm anpassen

9 Start- und Sperrbildschirm anpassen 9 Windows 8 - Grundlagen 9 Start- und Sperrbildschirm anpassen In diesem Kapitel erfahren Sie wie Sie auf dem Startbildschirm Kacheln anordnen wie Sie Kachelgruppen erstellen, verschieben und benennen

Mehr

GEOSHOP. Kurzanleitung für den Public-Zugriff

GEOSHOP. Kurzanleitung für den Public-Zugriff GEOSHOP Kurzanleitung für den Public-Zugriff Stand 20.07.2010 INHALTSVERZEICHNIS Seite 1. Technische Voraussetzungen... 3 1.1. Browser-Voraussetzungen... 3 1.2. Popups freigeben... 3 1.3. Performance...

Mehr

Eclipse Tutorial.doc

Eclipse Tutorial.doc Berner Fachhochschule Hochschule für Technik und Informatik, HTI Fachbereich Elektro- und Kommunikationstechnik Labor für Technische Informatik Eclipse Tutorial 2005, HTI Burgdorf R. Weber Dateiname: Eclipse

Mehr

Markus Mandalka Einführung in die Fotoverwaltung mit JPhotoTagger. Version vom 6. September Inhaltsverzeichnis

Markus Mandalka Einführung in die Fotoverwaltung mit JPhotoTagger. Version vom 6. September Inhaltsverzeichnis Markus Mandalka Einführung in die Fotoverwaltung mit JPhotoTagger Version 10.07.06 vom 6. September 2010 Inhaltsverzeichnis Grundaufbau der Programmoberfläche...2 Bilder suchen und sichten...2 Schnellsuche...2

Mehr

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0 9 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Wiederholung: Gerüstbeispiel Ein Duo, Quarto oder Sexto ist ein Gerüst. Die Klassen Duo, Quarto und Sexto sollen durch Vererbung

Mehr

Update-Informationen für DMR-EX80S, EX81S/71S, EX72S

Update-Informationen für DMR-EX80S, EX81S/71S, EX72S Modellnummer DMR-EX80SEG Update-Version Ver 1.15 Datei Name/Größe UPDATE_DMR-EX80SEG_V115.exe / 7.739.256 Bytes Modellnummer DMR-EX81SEG, DMR-EX71SEG Update-Version Ver 1.11 Datei Name/Größe UPDATE_DMR-EX81S_71SEG_V111.exe

Mehr

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode Methoden und Klassen Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik Wiederholung Jede Applikation braucht eine Klasse mit einer main-methode Eintrittspunkt in das Programm Die main-methode

Mehr

PRAXIS. Fotos verwalten, bearbeiten und aufpeppen. bhv. Ganz einfach und kostenlos im Web. Picasa. Google

PRAXIS. Fotos verwalten, bearbeiten und aufpeppen. bhv. Ganz einfach und kostenlos im Web. Picasa. Google bhv PRAXIS Google Björn Walter Picasa Fotos verwalten, bearbeiten und aufpeppen Perfekte Fotos mit wenig Aufwand Bildbearbeitung ohne teure Software Ordnung schaffen mit Online-Fotoalben Ganz einfach und

Mehr

Schema eines PCs (Personal Computer)

Schema eines PCs (Personal Computer) Schema eines PCs (Personal Computer) von Markus Wurster 2006 www.montessori download.de Die Bilder stammen größtenteils aus Wikipedia (www.wikipedia.de) und stehen unter GNU Free Documentation License.

Mehr

Internationaler Studiengang Medieninformatik

Internationaler Studiengang Medieninformatik HTW Berlin Prof. Dr. Kai Uwe Barthel Nachname: Vorname: Codename: Matr. Nr: Internationaler Studiengang Medieninformatik Grundlagen digitaler Medien Sitzplatz: Punkte: Note: Nachklausur WS09/10 26. 3.

Mehr

Windows mit Gesten steuern

Windows mit Gesten steuern Windows 10 und Office 2016: Windows mit Gesten steuern Windows mit Gesten steuern Wenn Sie einen Touchscreen oder ein Tablet nutzen, benötigen Sie für Ihre Arbeit mit Windows weder Maus noch Tastatur.

Mehr

Ergänzung zur Bedienungsanleitung: Wahl der Betriebsart mittels IO-Link-Schnittstelle. SAxxxx / / 2016

Ergänzung zur Bedienungsanleitung: Wahl der Betriebsart mittels IO-Link-Schnittstelle. SAxxxx / / 2016 Ergänzung zur Bedienungsanleitung: Wahl der Betriebsart mittels IO-Link-Schnittstelle DE SAxxxx 706416 / 00 05 / 2016 Inhalt 1 Vorbemerkung...2 2 Betriebsarten...3 3 Betriebsartenwahl mit Memory Plug E30398...3

Mehr

Umsetzen einer skalierbaren horizontalen Navigation:

Umsetzen einer skalierbaren horizontalen Navigation: Umsetzen einer skalierbaren horizontalen Navigation: Erstelle im Dreamweaver eine neue HTML - Datei (navigation.html) und eine CSS Datei (navigation.css). Die Struktur dieser Navigation soll auf einer

Mehr

Der Ball kann angezeigt werden: anzeigen( ) {... } Der Ball kann z.b. seine Größe verändern: groesseaendern(int veraenderung) {... } usw.

Der Ball kann angezeigt werden: anzeigen( ) {... } Der Ball kann z.b. seine Größe verändern: groesseaendern(int veraenderung) {... } usw. Objekt-Orientierung Die ersten objektorientierten Sprachen wurden ab 1967 entwickelt (Simula, Smalltalk). Die Grundidee besteht darin, Objekte der realen Welt abzubilden. Java-Programme bestehen aus Klassen.

Mehr

Institut für Programmierung und Reaktive Systeme 19. August Programmier-Labor. 1. Übungsblatt

Institut für Programmierung und Reaktive Systeme 19. August Programmier-Labor. 1. Übungsblatt echnische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 19. August 2014 Aufgabe 1: Programmier-Labor 1. Übungsblatt a) Welche primitiven Datentypen kennt

Mehr

Erstellen von Präsentationen

Erstellen von Präsentationen PowerPoint bietet verschiedene Möglichkeiten, neue Präsentationen zu erstellen. Hier erfahren Sie, wie s geht. Was erfahren Sie in diesem Kapitel? Wie man Präsentationen basierend auf leeren Folien erstellt

Mehr

BASIC-Tiger Starter Kit. Tel: +49 (241) Fax: +49 (241)

BASIC-Tiger Starter Kit. Tel: +49 (241) Fax: +49 (241) BASIC-Tiger Starter Kit Tel: +49 (241) 918 900 Fax: +49 (241) 918 9044 Email: info@wilke.de 1 2 Wilke Technology GmbH Krefelder Str. 147 52070 Aachen Germany BASIC-Tiger Starter Kit Willkommen beim BASIC-Tiger

Mehr

Die Farben des Lichts

Die Farben des Lichts Einen Regenbogen herbeizaubern Ist es möglich, hier im Schülerlabor einen Regenbogen zu erzeugen? Ja Nein Wo und wann hast du schon Regenbögen oder Regenbogenfarben gesehen? Regenbogen in der Natur nach

Mehr

eduvote Ein Umfragesystem für Lehrveranstaltungen PowerPoint Add-In

eduvote Ein Umfragesystem für Lehrveranstaltungen PowerPoint Add-In eduvote Ein Umfragesystem für Lehrveranstaltungen PowerPoint Add-In Übersicht: Nach dem Herunterladen und Ausführen des Installationsprogamms für das eduvote PowerPoint Add-In befindet sich rechts oben

Mehr

Start. 34 Symbolleiste einrichten. Wissen

Start. 34 Symbolleiste einrichten. Wissen 34 Symbolleiste einrichten Start 1 2 3 1 Klicken Sie in der Symbolleiste für den Schnellzugriff rechts neben den bereits vorhandenen Symbolen auf das kleine nach unten weisende Pfeilsymbol ( ). 2 Setzen

Mehr

Manual. Informationen zur Handhabung der WetterApplikation. Andreas Schmidt Oktober 2015

Manual. Informationen zur Handhabung der WetterApplikation. Andreas Schmidt Oktober 2015 IO Manual Informationen zur Handhabung der WetterApplikation Oktober 2015 Inhalt Inhalt... B Übersicht der GUI... 1 Das Eingabefeld (1)... 1 Der Knopf Anzeigen (2)... 1 Suchergebnisliste(3)... 2 Aktueller

Mehr

Text, Formeln und Graphiken in Word 2007

Text, Formeln und Graphiken in Word 2007 Text, Formeln und Graphiken in Word 2007 1. Formeln Word 2007 verfügt über einen leistungsfähigen Formeleditor. Durch diese Einstellung kann man eines der griechischen Buchstaben oder ein mathem. Symbol

Mehr

TeamSpeak 3 für Windows (PC)

TeamSpeak 3 für Windows (PC) TeamSpeak 3 für Windows (PC) Schritt für Schritt Anleitung (Installation) Öffne die Download-Seite von TeamSpeak um TeamSpeak 3 auf Deinen Windows- Rechner zu laden, (https://www.teamspeak.com/downloads)

Mehr

HP UC Freisprecheinrichtung. Benutzerhandbuch

HP UC Freisprecheinrichtung. Benutzerhandbuch HP UC Freisprecheinrichtung Benutzerhandbuch Copyright 2014, 2015 Hewlett-Packard Development Company, L.P. Bluetooth ist eine Marke ihres Inhabers und wird von Hewlett-Packard Company in Lizenz verwendet.

Mehr

Wie

Wie drag to move object Was Das Pattern drag to move object bietet die Möglichkeit, ein UI-Element in einer Touch- Bedienoberfläche zu verschieben. Wie Aktion des Benutzers Der Benutzer berührt das UI-Element

Mehr

Entwurfsmuster und Frameworks Singleton

Entwurfsmuster und Frameworks Singleton Entwurfsmuster und Frameworks Singleton Oliver Haase Oliver Haase Emfra Singleton 1/20 Beschreibung I Klassifikation: objektbasiertes Erzeugungsmuster Zweck: sicherstellen, dass eine Klasse nur genau einmal

Mehr

Noah Mixer. Bedienelemente VU-Meter Kanalzüge Die Mastersektion. - Tactive Instrument Modeller. Gesamt-Inhaltsverzeichnis.

Noah Mixer. Bedienelemente VU-Meter Kanalzüge Die Mastersektion. - Tactive Instrument Modeller. Gesamt-Inhaltsverzeichnis. Bedienelemente VU-Meter Kanalzüge Die Mastersektion - Tactive Instrument Modeller Gesamt-Inhaltsverzeichnis Inhalt Index 1 Der Mixer ist immer geladen und wird über die Live Bar geöffnet. Vom Mixer aus

Mehr

Google Cloud Print Anleitung

Google Cloud Print Anleitung Google Cloud Print Anleitung Version 0 GER Zu den Hinweisen In diesem Benutzerhandbuch wird das folgende Symbol verwendet: Hinweise informieren Sie darüber, wie auf eine bestimmte Situation reagiert werden

Mehr

... Konfiguration des IO [io] 8000 in einem LAN?

... Konfiguration des IO [io] 8000 in einem LAN? ... Konfiguration des IO [io] 8000 in einem LAN? Ablauf 1. Installation 2. Konfiguration des Encoders 3. Überprüfen der Encodereinstellungen 4. Konfiguration des Decoders 1. Installation: Nach Erhalt des

Mehr

Projektaufwände. Allgemeines

Projektaufwände. Allgemeines Projektaufwände Allgemeines Der Aufbau dieses Menüpunkts ähnelt dem der im Kapitel Meine Projektzeiten 1 beschrieben ist. Der Menüpunkt Projektaufwände zeichnet sich allerdings speziell dadurch aus, dass

Mehr

Tragbare Mini-HD-Kamera Wifi

Tragbare Mini-HD-Kamera Wifi Tragbare Mini-HD-Kamera Wifi Referenz : X99PC Version : 1.3 Sprache : Deutsch WWW.CLIPSONIC.COM Vielen Dank für den Kauf unseres CLIPSONIC Technologie-Produkts. Wir legen großen Wert auf das Design, die

Mehr

Google Cloud Print Anleitung

Google Cloud Print Anleitung Google Cloud Print Anleitung Version 0 GER Zu den Hinweisen In diesem Benutzerhandbuch wird für Hinweise der folgende Stil verwendet: Hinweise informieren Sie darüber, wie auf eine bestimmte Situation

Mehr

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen 7. Schnittstellen Grundlagen zu Schnittstellen 7. Schnittstellen Eine Schnittstelle (Interface) ist eine Spezifikation eines Typs in Form eines Typnamens und einer Menge von Methoden, die keine Implementierungen

Mehr

Printer Driver. In dieser Anleitung wird die Installation des Druckertreibers für Windows Vista und Windows XP beschrieben.

Printer Driver. In dieser Anleitung wird die Installation des Druckertreibers für Windows Vista und Windows XP beschrieben. 4-153-310-32(1) Printer Driver Installationsanleitung In dieser Anleitung wird die Installation des Druckertreibers für Windows Vista und Windows XP beschrieben. Vor der Verwendung der Software Lesen Sie

Mehr

Einführung in die Informatik II

Einführung in die Informatik II Einführung in die Informatik II SS 2012 6 Objektorientierte Entwurfsmuster Wissensbassierte Systeme / Wissensmanagement Einführung in die Informatik II 1 Prüfungstermine EI II im Sommersemester 2012 Klausurtermine

Mehr

1 Support bei Problemen mit dem Altium Designer

1 Support bei Problemen mit dem Altium Designer 1 Support bei Problemen mit dem Altium Designer Damit der Support gewährleistet werden kann, ist es möglich, mittels TeamViewer und Skype zu arbeiten. Im Folgenden wird die Installation und Verwendung

Mehr

Projektaufwände. Allgemeines

Projektaufwände. Allgemeines Projektaufwände Allgemeines Der Aufbau dieses Menüpunkts ähnelt dem der im Kapitel Meine Projektzeiten 1 beschrieben ist. Der Menüpunkt Projektaufwände ist für jene Personen sichtbar, die per Projekt-Berechtigung

Mehr

Firmware-Update für CHERRY ehealth-bcs Produkte Terminal ST-1503 und Tastatur G

Firmware-Update für CHERRY ehealth-bcs Produkte Terminal ST-1503 und Tastatur G Inhalt 1. Firmware Download für an USB angeschlossene Geräte... 1 2. Firmware Download für an LAN angeschlossene Geräte... 7 1. Firmware Download für an USB angeschlossene Geräte Voraussetzungen: Die aktuellste

Mehr

BKSYS Brandschutzklappen-Kleinsteuerung

BKSYS Brandschutzklappen-Kleinsteuerung Software-Bedienungsanleitung BKSYS Brandschutzklappen-Kleinsteuerung Inhaltsverzeichnis Übersicht und Sprache... 2 Verbindung... 3 Zustand... 4 Protokoll... 5 Einstellung... 7 SCHAKO Ferdinand Schad KG

Mehr

Visualiserung des Prinzips von virtuellem Speicher

Visualiserung des Prinzips von virtuellem Speicher Visualiserung des Prinzips von virtuellem Speicher Benutzerhandbuch Inhaltsverzeichnis Installationsanweisung 3 Systemanforderung 3 Das Programm 3 Das Programm starten 3 Das Hauptfenster der segmentorientierten

Mehr

Wo finde ich die komplette Bedienungsanleitung für meinen Wintech USB Computer? Warum muss man die Kopplung durchführen?

Wo finde ich die komplette Bedienungsanleitung für meinen Wintech USB Computer? Warum muss man die Kopplung durchführen? FAQ WINTECH USB Der Zweck dieses Dokuments ist nicht die ausführliche Bedienungsanleitung auf der Wintech Manager CD zu ersetzen. Die meisten Fragen, die Sie über die Verwendung der Wintech Manager Software

Mehr

RaySafe X2 View BENUTZERHANDBUCH

RaySafe X2 View BENUTZERHANDBUCH RaySafe X2 View BENUTZERHANDBUCH 2016.04 Unfors RaySafe 5001092-4 Alle Rechte vorbehalten. Eine vollständige oder auszugsweise Vervielfältigung oder Übertragung in jeglicher Form ob elektronisch, mechanisch

Mehr

Installations-Anleitung zur LEICA D-LUX 4 - Firmware 2.2

Installations-Anleitung zur LEICA D-LUX 4 - Firmware 2.2 Installations-Anleitung zur LEICA D-LUX 4 - Firmware 2.2 Sehr geehrte Kunden, Durch die Installation der neuen Firmware können Sie die Funktionen der LEICA D-LUX 4 in den verschiedenen genannten Bereichen

Mehr

Turmdrehkrane richtig fotografieren. Eine Kurzanleitung

Turmdrehkrane richtig fotografieren. Eine Kurzanleitung Turmdrehkrane richtig fotografieren Eine Kurzanleitung Von A. Bruderer, kran- info.ch 04.10.2015 Version 1.00 kran- info.ch Seite 1 / 6 Einführung Turmdrehkrane als Gitter Konstruktion sind bei der Fotografie

Mehr

Sobald Ihr tolino über ein USB-Kabel mit Ihrem Computer verbunden ist, sehen Sie oben links in der Statusleiste dieses Symbol.

Sobald Ihr tolino über ein USB-Kabel mit Ihrem Computer verbunden ist, sehen Sie oben links in der Statusleiste dieses Symbol. Den tolino aufladen Symbol Beschreibung Sobald Ihr tolino über ein USB-Kabel mit Ihrem Computer verbunden ist, sehen Sie oben links in der Statusleiste dieses Symbol. Zeigt Ihnen die aktuelle Uhrzeit an,

Mehr

Eine Präsentation, die sich für unterschiedliche Zuschauergruppen eignet

Eine Präsentation, die sich für unterschiedliche Zuschauergruppen eignet Eine Präsentation, die sich für unterschiedliche Zuschauergruppen eignet Ein Kollege hat gefragt, wie er mit der 193 Folien umfassenden und Präsentation sinnvoll und effektiv umgehen könne. Je nach Zielgruppe

Mehr

Installation und Benutzung. LangCorr ApS Erritsoegaardsvej 11 DK 7000 Fredericia Denmark

Installation und Benutzung. LangCorr ApS Erritsoegaardsvej 11 DK 7000 Fredericia Denmark Installation und Benutzung Herzlich Willkommen zu Language Corrector! Language Corrector herunterladen: Auf unserer Seite www.langcorr.com finden Sie unten, Mitte links, den Link zu LanguageCorrector.

Mehr

Filterprogrammierung in Gimp

Filterprogrammierung in Gimp Rüdiger Timpe Alexander Bertschik Filterprogrammierung in Gimp Ein Vortrag im Rahmen des Seminars Manipulation und Verarbeitung digitaler Bilder Inhalt Aufgabenstellung und Motivation...3 Auswahl der Filter...3

Mehr

Anpassen BS-Explorer

Anpassen BS-Explorer Anpassen BS-Explorer Die Ansicht des BS-Explorers kann auf Ihre Bedürfnisse individuell angepasst werden. Nicht nur die Symbolleiste sondern auch die Mandatsansicht kann Ihren Wünschen entsprechend verändert

Mehr

Handbuch zum VivaWeb-Serienbrief-Programm

Handbuch zum VivaWeb-Serienbrief-Programm Handbuch zum VivaWeb-Serienbrief-Programm In 10 Schritten zum Serienbrief Das folgende Handbuch erläutert Ihnen die Nutzungsmöglichkeiten des ARV Serienbrief-Programms in all seinen Einzelheiten. Dieses

Mehr

Bedienungsanleitung Beamersteuerung

Bedienungsanleitung Beamersteuerung Bedienungsanleitung Beamersteuerung Quick start 1. Schließen Sie Ihre Quelle (Laptop, Pult,...) an die Anschlussdose an 2. Schalten Sie den Beamer an der Steuerung ein (Druck auf Taster ON oder Betätigen

Mehr

Bedienungsanleitung. Abb. 1 Abb. 2

Bedienungsanleitung. Abb. 1 Abb. 2 Bedienungsanleitung IT-SMS 1) Vorbereitung des Tele-Switch: a) Setzen Sie die SIM-Karte in das Gerät ein. (Abb.1) Die PIN-Abfrage der SIM-Karte muss deaktiviert sein. Abb. 1 Abb. 2 b) Erst jetzt den Tele-Switch

Mehr

Set-top Box Controller. Anleitung

Set-top Box Controller. Anleitung Set-top Box Controller Anleitung B E V O R S I E A N F A N G E N 3 In dieser Anleitung ist beschrieben, wie Sie Ihren Bang & Olufsen Set-Top-Box- Controller betriebsbereit machen und wie Sie ihn zusammen

Mehr

Labor für Technische Akustik

Labor für Technische Akustik Labor für Technische Akustik Kraus Abbildung 1: Experimenteller Aufbau zur optischen Ermittlung der Schallgeschwindigkeit. 1. Versuchsziel In einer mit einer Flüssigkeit gefüllten Küvette ist eine stehende

Mehr

MultiBoot Benutzerhandbuch

MultiBoot Benutzerhandbuch MultiBoot Benutzerhandbuch Copyright 2006 Hewlett-Packard Development Company, L.P. Hewlett-Packard ( HP ) haftet nicht für technische oder redaktionelle Fehler oder Auslassungen in diesem Dokument. Ferner

Mehr

2 DAS BETRIEBSSYSTEM. 2.1 Wozu dient das Betriebssystem. Themen in diesem Kapitel: Das Betriebssystem Die Windows-Oberfläche Elemente eines Fensters

2 DAS BETRIEBSSYSTEM. 2.1 Wozu dient das Betriebssystem. Themen in diesem Kapitel: Das Betriebssystem Die Windows-Oberfläche Elemente eines Fensters PC-EINSTEIGER Das Betriebssystem 2 DAS BETRIEBSSYSTEM Themen in diesem Kapitel: Das Betriebssystem Die Windows-Oberfläche Elemente eines Fensters 2.1 Wozu dient das Betriebssystem Das Betriebssystem (engl.:

Mehr

Tangible Interaction. Interface Design Bauhaus-University Weimar. Prof. Dr. Jens Geelhaar. Eine Annäherung aus der künstlerischen Perspektive

Tangible Interaction. Interface Design Bauhaus-University Weimar. Prof. Dr. Jens Geelhaar. Eine Annäherung aus der künstlerischen Perspektive Tangible Interaction Eine Annäherung aus der künstlerischen Perspektive Body and Space Der Körper des Menschen ist der Ausgangspunkt der individuellen Welt. Der Raum bildet die den Menschen umgebende Umwelt.

Mehr

DV4mini_compact. 1 Inhalt 1 Inhalt... i

DV4mini_compact. 1 Inhalt 1 Inhalt... i 1 Inhalt 1 Inhalt... i 2 Vorwort... 1 2.1 Installation... 1 2.1.1 Linux... 1 2.1.2 Raspbian... 1 2.1.3 Allgemein... 1 2.2 Start der Software... 1 2.3 Die Registerkarte Config... 2 2.4 Die Registerkarte

Mehr

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus: Lernwerkstatt: Licht und Optik. Das komplette Material finden Sie hier:

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus: Lernwerkstatt: Licht und Optik. Das komplette Material finden Sie hier: Unterrichtsmaterialien in digitaler und in gedruckter Form Auszug aus: Lernwerkstatt: Licht und Optik Das komplette Material finden Sie hier: School-Scout.de SCHOOL-SCOUT Licht und Optik Seite 7 von 20

Mehr

UML (Unified Modelling Language) von Christian Bartl

UML (Unified Modelling Language) von Christian Bartl UML (Unified Modelling Language) von Inhaltsverzeichnis Inhaltsverzeichnis... 2 1 UML Unified Modelling Language... 3 2 Diagrammtypen... 3 2.1 Aktivitätsdiagramm... 3 2.1.1 Notation... 4 2.1.2 Beispieldiagramm...

Mehr

Benutzeranleitung. Inhalt

Benutzeranleitung. Inhalt Benutzeranleitung Inhalt 1) Registrierung / Anmeldevorgang...2 1.1) Anmeldung...2 1.2) Registrierung...2 1.3) Passwort vergessen...2 2) Grundansicht...3 2.1) Suchfunktion...4 3) Persönliche Schutzausrüstung

Mehr