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

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9 Prof. Dr. Wilhelm Schäfer Paderborn, 15. Dezember 2014 Christian Brenner Tristan Wittgen Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9 Aufgabe 1 Codegenerierung

Mehr

03/ DISKUS Erweiterungen 2003

03/ DISKUS Erweiterungen 2003 03/ DISKUS Erweiterungen 2003 03/ 1. Diverses a) Größe der Markier-Pfeile ist konfigurierbar Für Nutzer hochauflösender Kameras, stehen bei dem größeren Bild auch größere Pfeile zum einstanzen zur Verfügung.

Mehr

Touchscreens.... und ihre bildschirmlosen Freunde.

Touchscreens.... und ihre bildschirmlosen Freunde. Touchscreens... und ihre bildschirmlosen Freunde. 1 Öffentlich Automaten Benutzerfreundlichkeit Robust Barrierefreiheit 2 Industrie Einfach zu Bedienen Robust 3 Messen / Werbezwecke Erregen Aufmerksamkeit

Mehr

POB-Technology Dokumentation. POB-Technology Produkte. Deutsche Übersetzung von roboter-teile.de Alle Rechte vorbehalten Seite 1 von 13

POB-Technology Dokumentation. POB-Technology Produkte. Deutsche Übersetzung von roboter-teile.de Alle Rechte vorbehalten Seite 1 von 13 POB-Technology Produkte Deutsche Übersetzung von roboter-teile.de Alle Rechte vorbehalten Seite 1 von 13 Inhaltsverzeichnis Inhaltsverzeichnis Inhaltsverzeichnis... 2 Einführung...4 POB-EYE... 5 POB-LCD128...

Mehr

Das vorliegende Skript ist aktualisiert für die Processing Version 1.1 von März 2010.

Das vorliegende Skript ist aktualisiert für die Processing Version 1.1 von März 2010. Was ist Processing? Processing ist eine Open Source-Programmiersprache für die Programmierung von Bildern, Animation und Sound. Es wurde speziell für Studenten, Künstler und Designer entwickelt. Durch

Mehr

NÜTZLICHE TIPPS FÜR OPTIMALE SCANS

NÜTZLICHE TIPPS FÜR OPTIMALE SCANS Bedingungen, um gute Scans zu erhalten Die Faktoren, von denen das Ergebnis eines Scans abhängt, sind einerseits die Umgebung sowie die Konfiguration und Kalibrierung des Scanners, aber auch das zu scannende

Mehr

Einführung in die Cross-Plattform Entwicklung Das Intel App Framework

Einführung in die Cross-Plattform Entwicklung Das Intel App Framework Einführung in die Cross-Plattform Entwicklung Das Intel App Framework Einführung Dieses Hands-on-Lab (HOL) macht den Leser mit dem Intel App Framework vom Intel XDK vertraut. Es wird Schritt für Schritt

Mehr

Einbindung der Tastatur

Einbindung der Tastatur Einbindung der Tastatur Auch die Tastatur kann man wie die Maus zur interaktiven Programmsteuerung verwenden. Bei der Maus ist stets klar, welche grafische Komponente bei einem Klick oder einer Bewegung

Mehr

Factsheet. Einbau TOSC4. Version: 4 Letzte Änderung: 19.12.2013 Geändert von: Armin Schanitz

Factsheet. Einbau TOSC4. Version: 4 Letzte Änderung: 19.12.2013 Geändert von: Armin Schanitz Factsheet Einbau TOSC4 Version: 4 Letzte Änderung: 19.12.2013 Geändert von: Armin Schanitz Letzte Änderungen: - Mobile Version - Reverse Proxy - Hinweise Lightbox 0. Inhaltsverzeichnis 0. 1. 2. INHALTSVERZEICHNIS...

Mehr

Bedienungsanleitung Dokumentenkamera Epson ELPDC11

Bedienungsanleitung Dokumentenkamera Epson ELPDC11 Bedienungsanleitung Dokumentenkamera Epson ELPDC11 1 Anschlüsse 1. Sie müssen das Netzkabel an den Anschluss Power schließen, damit Sie die Dokumentenkamera anschalten können. 2. Zum Anschließen der Dokumentenkamera

Mehr

3. Konzepte der objektorientierten Programmierung

3. Konzepte der objektorientierten Programmierung 3. Konzepte der objektorientierten Programmierung 3.1 Basiskonzepte 3.2 Generalisierung / Spezialisierung 3.3 Aggregation 3.4 Assoziation 3.5 Nachrichten 3.6 Polymorphismus 3. Konzepte der Objektorientierung

Mehr

Whitepaper Touchscreens Technologien, Anwendungen

Whitepaper Touchscreens Technologien, Anwendungen Whitepaper Touchscreens n, Anwendungen Virtual Dimension Center (VDC) Auberlenstr. 13 70736 Fellbach Inhalt n Übersicht n Anwendungen & Einsatzgebiete 1 Vorstellung VDC Inhalt n 1974 Erstes transparente

Mehr

DRESDEN. Ermitteln von Sprunghöhen mit einem Windows Phone. ZfP-Sonderpreis der DGZfP beim Regionalwettbewerb Jugend forscht.

DRESDEN. Ermitteln von Sprunghöhen mit einem Windows Phone. ZfP-Sonderpreis der DGZfP beim Regionalwettbewerb Jugend forscht. ZfP-Sonderpreis der DGZfP beim Regionalwettbewerb Jugend forscht DRESDEN Ermitteln von Sprunghöhen mit einem Windows Phone Felix Guttbier Schule: Gymnasium Brandis Jugend forscht 2014 ERMITTELN VON SPRUNGHÖHEN

Mehr

VB.net Programmierung und Beispielprogramm für GSV

VB.net Programmierung und Beispielprogramm für GSV VB.net Programmierung und Beispielprogramm für GSV Dokumentation Stand vom 26.05.2011 Tel +49 (0)3302 78620 60, Fax +49 (0)3302 78620 69, info@me-systeme.de, www.me-systeme.de 1 Inhaltsverzeichnis Vorwort...2

Mehr

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden. Grundwissen Informatik Objekt Attribut Methoden Als Objekte bezeichnet man alle Gegenstände, Dinge, Lebewesen, Begriffe oder Strukturen unserer Welt ( Autos, Räume, Bakterien, Lehrer, Schüler, Kunden,

Mehr

Eclipse :Bis(s) zum Javacode Einführung in die Eclipse-IDE

Eclipse :Bis(s) zum Javacode Einführung in die Eclipse-IDE EF-III-A6 Einführung in Eclipse Seite 1 von 5 Eclipse :Bis(s) zum Javacode Einführung in die Eclipse-IDE Erläuterung Eclipse/IDE Eclipse ist eine integrierte Open-Source-Entwicklungsumgebung für Software

Mehr

TOUCHPANEL DESIGNER HANDBUCH

TOUCHPANEL DESIGNER HANDBUCH www.osram.de/lms TOUCHPANEL DESIGNER HANDBUCH Touchpanel Designer ist eine intuitive grafische Benutzeroberfläche, mit der Bildschirme für das DALI PROFESSIONAL Touchpanel zur Steuerung der Beleuchtung

Mehr

Abschlussvortrag Projektarbeit

Abschlussvortrag Projektarbeit LFE Medieninformatik Andreas Lodde Abschlussvortrag Projektarbeit Bau eines Multitouch-Displays basierend auf einem LCD-Panel zur Realisierung verschiedener visueller Erkennungsmethoden Betreuer: Dipl.

Mehr

Übung: Verwendung von Java-Threads

Übung: Verwendung von Java-Threads Übung: Verwendung von Java-Threads Ziel der Übung: Diese Übung dient dazu, den Umgang mit Threads in der Programmiersprache Java kennenzulernen. Ein einfaches Java-Programm, das Threads nutzt, soll zum

Mehr

EasyEntriePC Light. Software zur Steuerung des Profilfräsautomaten easyentrie

EasyEntriePC Light. Software zur Steuerung des Profilfräsautomaten easyentrie EasyEntriePC Light Software zur Steuerung des Profilfräsautomaten easyentrie Datenbank Die mit dem easyentrie gemessenen Schlüssel-Profile lassen sich an den PC übertragen und dort in einer Datenbank speichern.

Mehr

Computer Graphik I (3D) Dateneingabe

Computer Graphik I (3D) Dateneingabe Computer Graphik I (3D) Dateneingabe 1 3D Graphik- Pipeline Anwendung 3D Dateneingabe Repräsenta

Mehr

Leica DISTO Transfer Wie verbinde ich meinen Leica DISTO mit meinem PC

Leica DISTO Transfer Wie verbinde ich meinen Leica DISTO mit meinem PC Wie verbinde ich meinen Leica DISTO mit meinem PC PC, Labtop 2 Tablet PC, UMPC Installation 1. Bitte laden Sie die aktuellste Version der Leica DISTO Transfer Software auf unserer Homepage herunter: http://ptd.leica-geosystems.com/en/support-downloads_6598.htm?cid=11104

Mehr

Bedienung von BlueJ. Klassenanzeige

Bedienung von BlueJ. Klassenanzeige Im Folgenden werden wichtige Funktionen für den Einsatz von BlueJ im Unterricht beschrieben. Hierbei wird auf den Umgang mit Projekten, Klassen und Objekten eingegangen. Abgeschlossen wird dieses Dokument

Mehr

Samsung Large Format Display

Samsung Large Format Display Samsung Large Format Display Erste Schritte Display Samsung Electronics Display Large Format Display 3 Wie nehme ich das Display in Betrieb? Dies ist die Windows XPe Oberfläche des MagicInfo Pro Interface.

Mehr

Einstieg in die Entwicklung von Augmented Reality Anwendungen mit Hilfe des jar-frameworks

Einstieg in die Entwicklung von Augmented Reality Anwendungen mit Hilfe des jar-frameworks Einstieg in die Entwicklung von Augmented Reality Anwendungen mit Hilfe des jar-frameworks 1 Einleitung Mit dieser Anleitung soll ein einfacher Einstieg in die Entwicklung von Augmented-Reality Anwendungen

Mehr

Kurzanleitung zu WinZeit und dem Scanndy

Kurzanleitung zu WinZeit und dem Scanndy Kurzanleitung zu WinZeit und dem Scanndy Inhaltsverzeichnis Benötigte Materialien Seite 3 Grundlegende Bedienung des Scanndys Seite 4 Die Hauptmenü Punkte Seite 5 Das Drucken mit Barcode Seite 6 Zuordnen

Mehr

Die Hifidelio App Beschreibung

Die Hifidelio App Beschreibung Die Hifidelio App Beschreibung Copyright Hermstedt 2010 Version 1.0 Seite 1 Inhalt 1. Zusammenfassung 2. Die Umgebung für die Benutzung 3. Der erste Start 4. Die Ansicht Remote Control RC 5. Die Ansicht

Mehr

Parallele und funktionale Programmierung Wintersemester 2013/14. 8. Übung Abgabe bis 20.12.2013, 16:00 Uhr

Parallele und funktionale Programmierung Wintersemester 2013/14. 8. Übung Abgabe bis 20.12.2013, 16:00 Uhr 8. Übung Abgabe bis 20.12.2013, 16:00 Uhr Aufgabe 8.1: Zeigerverdopplung Ermitteln Sie an folgendem Beispiel den Rang für jedes Listenelement sequentiell und mit dem in der Vorlesung vorgestellten parallelen

Mehr

Elektronisches Auge wird wachsamer

Elektronisches Auge wird wachsamer Megapixelkameras erhöhen die Sicherheit Elektronisches Auge wird wachsamer Megapixel-Sensoren steigern die Lichtempfindlichkeit von Überwachungskameras deutlich. Das revolutioniert die Videoüberwachung

Mehr

3D Objekte in einen Clip integrieren

3D Objekte in einen Clip integrieren 3D Objekte in einen Clip integrieren Benötigt wird: MAXON Cinema 4D R14 Adobe After Effects CS6 (im Folgenden mit C4D bezeichnet) (im Folgenden mit AE bezeichnet) Unter der Cloud-Lösung Adobe CC gibt es

Mehr

Ereignisbehandlung 21

Ereignisbehandlung 21 Ereignisbehandlung 21 3 Ereignisbehandlung Dieses Kapitel beschäftigt sich mit der Ereignisbehandlung, d.h. der Reaktion eines Programms auf Eingaben durch benutzende Personen. Nach einigen ersten Beispielen

Mehr

Smartphone Entwicklung mit Android und Java

Smartphone Entwicklung mit Android und Java Smartphone Entwicklung mit Android und Java predic8 GmbH Moltkestr. 40 53173 Bonn Tel: (0228)5552576-0 www.predic8.de info@predic8.de Was ist Android Offene Plattform für mobile Geräte Software Kompletter

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java Willkommen zur Vorlesung Objektorientierte Programmierung Vertiefung - Java Zum Dozenten Mein Name: Andreas Berndt Diplom-Informatiker (TU Darmstadt) Derzeit Software-Entwickler für Web- Applikationen

Mehr

Projekt AGB-10 Fremdprojektanalyse

Projekt AGB-10 Fremdprojektanalyse Projekt AGB-10 Fremdprojektanalyse 17. Mai 2010 1 Inhaltsverzeichnis 1 Allgemeines 3 2 Produktübersicht 3 3 Grundsätzliche Struktur und Entwurfsprinzipien für das Gesamtsystem 3 3.1 Die Prefuse Library...............................

Mehr

Das Interceptor Muster

Das Interceptor Muster Das Interceptor Muster Implementierung des Interceptor Musters basierend auf OSGi and Friends Benjamin Friedrich Hochschule für Technik und Wirtschaft des Saarlandes Praktische Informatik - Entwurfsmuster

Mehr

Re:control M232. Dominating Entertainment. Revox of Switzerland. D 1.1

Re:control M232. Dominating Entertainment. Revox of Switzerland. D 1.1 o Re:control Dominating Entertainment. Revox of Switzerland. D 1.1 Einführung Allgemein Die Re:control Applikation (app) für iphones und ipod touch Produkte ermöglicht die umfassende Bedienung des gesamten

Mehr

Raytracing. Schlussbericht. Jonas Lauener 1995, Áedán Christie 1997 Melvin Ott 1997, Timon Stampfli 1997

Raytracing. Schlussbericht. Jonas Lauener 1995, Áedán Christie 1997 Melvin Ott 1997, Timon Stampfli 1997 Raytracing Schlussbericht Jonas Lauener 1995, Áedán Christie 1997 Melvin Ott 1997, Timon Stampfli 1997 bei Betreuer Marco Manzi, Institut für Informatik und angewandte Mathematik Inhalt Fragestellung...

Mehr

Das Handbuch zu KSnapshot

Das Handbuch zu KSnapshot Richard J. Moore Robert L. McCormick Brad Hards Korrektur: Lauri Watts Entwickler: Richard J Moore Entwickler: Matthias Ettrich Übersetzung des Handbuchs: Robert Gogolok Übersetzung des Handbuchs: Kilian

Mehr

Daniel Warneke warneke@upb.de 08.05.2006. Ein Vortrag im Rahmen des Proseminars Software Pioneers

Daniel Warneke warneke@upb.de 08.05.2006. Ein Vortrag im Rahmen des Proseminars Software Pioneers Design Patterns Daniel Warneke warneke@upb.de 08.05.2006 Ein Vortrag im Rahmen des Proseminars Software Pioneers Design Patterns 1/23 Übersicht Einleitung / Motivation Design Patterns Beispiele Rolle des

Mehr

Einführung in Eclipse und Java

Einführung in Eclipse und Java Universität Bayreuth Lehrstuhl für Angewandte Informatik IV Datenbanken und Informationssysteme Prof. Dr.-Ing. Jablonski Einführung in Eclipse und Java Dipl.Inf. Manuel Götz Lehrstuhl für Angewandte Informatik

Mehr

Digitale Kreuzschiene mit EBÜS

Digitale Kreuzschiene mit EBÜS Hardo Naumann Digitale Kreuzschiene mit 02.10.2006 Digitale Kreuzschiene mit Live-Bilder und Lagepläne auf beliebige Monitore schalten AE 1 AE 2 AE 3 AE 4 VA 1 IP-Netz VA 2 BQ 1 BQ 2 BQ 3 BQ 4 BQ 5 Status:

Mehr

PADS 3.0 Viewer - Konfigurationen

PADS 3.0 Viewer - Konfigurationen PADS 3.0 Viewer - Konfigurationen Net Display Systems (Deutschland) GmbH - Am Neuenhof 4-40629 Düsseldorf Telefon: +49 211 9293915 - Telefax: +49 211 9293916 www.fids.de - email: info@fids.de Übersicht

Mehr

SIENNA Home Connect. Bedienungsanleitung V2.6

SIENNA Home Connect. Bedienungsanleitung V2.6 SIENNA Home Connect Bedienungsanleitung V2.6, Rupert-Mayer-Str. 44, 81379 München, Deutschland Tel +49-89-12294700 Fax +49-89-72430099 Copyright 2015. Inhaltsverzeichnis 1 INSTALLATION... 3 1.1 FW UPDATE

Mehr

Schulungspräsentation zur Erstellung von CEWE FOTOBÜCHERN

Schulungspräsentation zur Erstellung von CEWE FOTOBÜCHERN Schulungspräsentation zur Erstellung von CEWE FOTOBÜCHERN 2009 CeWe Color AG & Co OHG Alle Rechte vorbehalten Was ist das CEWE FOTOBUCH? Das CEWE FOTOBUCH ist ein am PC erstelltes Buch mit Ihren persönlichen

Mehr

am Beispiel von JUnit

am Beispiel von JUnit Aufbau eines Testwerkzeugs am Beispiel von JUnit Üblicher Ansatz für Tests und Fehlersuche: Print-Befehle, Debugger-Ausdrücke, Test-Skripte möglichst über globale Variable debug steuerbar Command Pattern

Mehr

Laborprojekt ASURO - Vorbereitung

Laborprojekt ASURO - Vorbereitung 4 6 Fachgebiet Regelungstechnik Leiter: Prof. Dr.-Ing. Johann Reger Einführung in die Kybernetik Laborprojekt ASURO - Vorbereitung 1 Einleitung Gegenstand dieses Projektlabors ist der Miniroboter ASURO,

Mehr

Bilder im Internet. Hans Magnus Enzensberger

Bilder im Internet. Hans Magnus Enzensberger Kapitel 4 Alle reden von Kommunikation, aber die wenigsten haben sich etwas mitzuteilen. Hans Magnus Enzensberger Bilder im Internet Nach der etwas umfangreichen vorangehenden Lektion zum Ausklang der

Mehr

Application Note. Anbindung von Kunden-Software an SpiderControl Web Visualisierung

Application Note. Anbindung von Kunden-Software an SpiderControl Web Visualisierung 2015-02-25 1 of 6 Application Note Anbindung von Kunden-Software an SpiderControl Web Visualisierung Version ApplicationNote_AnbindungFremdsoftware /Version Seite 1 / 6 Version Datum Kommentar Autor 0.1

Mehr

2 DESKTOP, SYMBOLE, EINSTELLUNGEN

2 DESKTOP, SYMBOLE, EINSTELLUNGEN 2 DESKTOP, SYMBOLE, EINSTELLUNGEN 2.1 Desktop und Symbole Ein Großteil der Computerbedienung erfolgt über GUI 13 die grafische Benutzeroberfläche. Darunter versteht man die Technologie, wonach die Befehle

Mehr

DRIVE LIKE A VIRTUAL DEVELOPER Die Poleposition für Ihre Softwareentwicklung

DRIVE LIKE A VIRTUAL DEVELOPER Die Poleposition für Ihre Softwareentwicklung DRIVE LIKE A VIRTUAL DEVELOPER Die Poleposition für Ihre Softwareentwicklung Was für ein Tempo! Das Rad dreht sich rasant schnell: Die heutigen Anforderungen an Softwareentwicklung sind hoch und werden

Mehr

Dokumentation: wi://googlemaps

Dokumentation: wi://googlemaps 1 Dokumentation: wi://googlemaps zur Einbindung von eigenen GoogleMaps Karten im TYPO3 Backend 2 Inhalt Einrichtung des Plugins... 3 Schritt 1: Frontend Plugin anlegen... 3 Schritt 2: Speicherort der Datensätze

Mehr

DVA-110DOOR - Quick Install

DVA-110DOOR - Quick Install DVA-110DOOR - Quick Install Technische Daten Bildsensor Kompression Auflösung Speicher Objektiv IR Stromversorgung Einsatztemperatur Abmessungen Schutzklasse 1/4 Color CMSOS Tag / Autom. Tag / Nacht Umschaltung

Mehr

Objektorientierte und Funktionale Programmierung SS 2014

Objektorientierte und Funktionale Programmierung SS 2014 Objektorientierte und Funktionale Programmierung SS 2014 6 Objektorientierte Entwurfsmuster 1 6 Objektorientierte Entwurfsmuster Lernziele Einige wichtige Entwurfsmuster kennen und verstehen Einsatzmöglichkeiten

Mehr

Physikalisches Praktikum 3. Semester

Physikalisches Praktikum 3. Semester Torsten Leddig 18.Januar 2005 Mathias Arbeiter Betreuer: Dr.Hoppe Physikalisches Praktikum 3. Semester - Optische Systeme - 1 Ziel Kennenlernen grundlegender optischer Baugruppen Aufgaben Einige einfache

Mehr

Erstellen eines PlugIns

Erstellen eines PlugIns Erstellen eines PlugIns Mai 2013 Inhaltsverzeichnis Inhaltsverzeichnis Inhaltsverzeichnis... 2 1 Einleitung... 3 1.1 Ablauf... 3 1.2 Weitere Dokumentation... 3 1.3 Wichtige Hinweise... 3 2 Beschreibung...

Mehr

Einführung in Betriebssysteme

Einführung in Betriebssysteme Einführung in Betriebssysteme APPLE ios Entwicklung von ios Entwickelt auf der Basis von MacOS X UNIX Vorgestellt am 9.1.2007 Zusammen mit iphone Markenname von Cisco Internetwork Operating System Für

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

w-lantv 50n Kurzanleitung Eine Schritt für Schritt Anleitung zum erfolgreichen, drahtlosen TV Erlebnis. Bitte zuerst lesen!

w-lantv 50n Kurzanleitung Eine Schritt für Schritt Anleitung zum erfolgreichen, drahtlosen TV Erlebnis. Bitte zuerst lesen! Eine Schritt für Schritt Anleitung zum erfolgreichen, drahtlosen TV Erlebnis. Bitte zuerst lesen! Änderungen von Design und /oder Technik vorbehalten. 2008-2009 PCTV Systems S.à r.l. 8420-20056-01 R1 Lieferumfang

Mehr

atvise webmi atvise webmi Kurzeinführung Die weltweit erste professionelle 100% native Web-Visualisierung Kurzeinführung

atvise webmi atvise webmi Kurzeinführung Die weltweit erste professionelle 100% native Web-Visualisierung Kurzeinführung atvise webmi Die weltweit erste professionelle 100% native Web-Visualisierung 08.04.2009 Tel: 0043-2682-75799-0 Page 1 / 6 Inhalt: 1. Einleitung... 3 1.1. Professionelle Visualisierung von jedem Gerät

Mehr

Vererbung & Schnittstellen in C#

Vererbung & Schnittstellen in C# Vererbung & Schnittstellen in C# Inhaltsübersicht - Vorüberlegung - Vererbung - Schnittstellenklassen - Zusammenfassung 1 Vorüberlegung Wozu benötigt man Vererbung überhaubt? 1.Um Zeit zu sparen! Verwendung

Mehr

4 Codierung nach Viginere (Lösung)

4 Codierung nach Viginere (Lösung) Kapitel 4 Codierung nach Viginere (Lösung) Seite 1/14 4 Codierung nach Viginere (Lösung) 4.1 Einführung Blaise de Vigenère lebte von 1523 bis 1596 in Frankreich und war nach dem Studium bei verschiedenen

Mehr

Erstellung von Bibliotheken in CoDeSys V3

Erstellung von Bibliotheken in CoDeSys V3 Dokument Version 2.0 3S - Smart Software Solutions GmbH Seite 1 von 10 INHALT 1 EINFÜHRUNG 3 2 BIBLIOTHEKSKONZEPT IM DETAIL 4 2.1 Kategorien von Bibliotheken 4 2.1.1 System 4 2.1.2 Internal 4 2.1.3 Application

Mehr

Grundlagen verteilter Systeme

Grundlagen verteilter Systeme Universität Augsburg Insitut für Informatik Prof. Dr. Bernhard Bauer Wolf Fischer Christian Saad Wintersemester 08/09 Übungsblatt 5 26.11.08 Grundlagen verteilter Systeme Lösungsvorschlag Aufgabe 1: Erläutern

Mehr

PRAKLA SEISMOS Downloadportal

PRAKLA SEISMOS Downloadportal PRAKLA SEISMOS Downloadportal Voraussetzungen Um die recht umfangreichen PDF Dokumente, mit einer Größe bis zu 60 MByte, ansehen zu können, müssen sie aus dem Internet geladen werden. Dazu ist eine schnelle

Mehr

Script-Sprache für UPT und MKT-View II / III / IV. Einleitung, Anwendungsfälle, Programmierung. MKT Systemtechnik

Script-Sprache für UPT und MKT-View II / III / IV. Einleitung, Anwendungsfälle, Programmierung. MKT Systemtechnik Einleitung, Anwendungsfälle, Programmierung MKT Systemtechnik Autor: Stand: Ablage: Wolfgang Büscher Dipl.-Ing. Soft- und Hardware-Entwicklung buescher@mkt-sys.de 2015-01-21 (JJJJ-MM-DD) art85133_einfuehrung_mktview_scriptsprache.odp/pdf;

Mehr

Design Patterns. 5. Juni 2013

Design Patterns. 5. Juni 2013 Design Patterns 5. Juni 2013 Überblick Was sind Design Patterns? Welche Design Patterns gibt es? Wann sollte man Design Patterns einsetzen? Refactoring und Design Patterns: Welchen Zusammenhang gibt es

Mehr

Zwischenvortrag zum Entwicklungsstand der Bachelor-Arbeit. Direct 3D-Output für ein Rendering Framework

Zwischenvortrag zum Entwicklungsstand der Bachelor-Arbeit. Direct 3D-Output für ein Rendering Framework Zwischenvortrag zum Entwicklungsstand der Bachelor-Arbeit Direct 3D-Output für ein Rendering Framework von Benjamin Betting unter der Betreuung von Daniel Schiffner 1 Gliederung Kapitel I und II: Motivation,Einführung,Grundlagen

Mehr

Java Wireless Toolkit (JWT) Bei der Programmierung von Anwendungsprogrammen für mobile Endgeräte eignet sich die Verwendung des Java Wireless Toolkit.

Java Wireless Toolkit (JWT) Bei der Programmierung von Anwendungsprogrammen für mobile Endgeräte eignet sich die Verwendung des Java Wireless Toolkit. 1 Seminar zum Programmierprojekt Arbeitsbereich Technische Informatik Ausgabe: 30. April 2008 Anleitung B3 Einführung in die Entwicklungsumgebungen Allgemeines In dieser Aufgabe lernen wir die Entwicklungsumgebungen

Mehr

Sound und Video hinzufügen

Sound und Video hinzufügen 9 Sound und Video hinzufügen n Audioclip hinzufügen In diesem Kapitel: n Wiedergabe eines Audioclips bearbeiten n Videoclip hinzufügen n Anzeige des Videofensters anpassen n Wiedergabe eines Videoclips

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Benutzeroberflächen. Java Teil 4

Benutzeroberflächen. Java Teil 4 Benutzeroberflächen Java Teil 4 Einleitung Eine grafische Benutzeroberfläche (Graphical User Interface) ermöglicht dem Benutzer die Interaktion mit dem Computer über grafische Symbole. Die GUI haben in

Mehr

Advanced Rendering Interior Szene

Advanced Rendering Interior Szene Advanced Rendering Interior Szene in Cinema 4D 11-11.5 Als erstes, sollten Sie ihre Szene in Cinema 4D öffnen. vergewissern sie sich, ob alle Licht quellen die evtl. mit importiert wurden, aus der Szene

Mehr

Multitouch Technik & Technologie

Multitouch Technik & Technologie AW1 AW1 Multitouch Technik & Hamburg, 20-06-2007 Agenda Motivation Was ist Touch und Multitouch? Historische Entwicklung Touchsysteme Sensortechniken Heutiger Stand und Ausblick Fazit Agenda Motivation

Mehr

Software- Beschreibung. PC- Programm SM7D zur Datenerfassung für das Strahlenmessgerät SM7D Version V1.0 de ( Stand: 28 Januar 2011)

Software- Beschreibung. PC- Programm SM7D zur Datenerfassung für das Strahlenmessgerät SM7D Version V1.0 de ( Stand: 28 Januar 2011) Software- Beschreibung für PC- Programm SM7D zur Datenerfassung für das Strahlenmessgerät SM7D Version V1.0 de ( Stand: 28 Januar 2011) Inhalt: 1. Installation 2. Inbetriebnahme / Geräteanschluss / Programmstart

Mehr

Presentation Draw. Bedienungsanleitung

Presentation Draw. Bedienungsanleitung Presentation Draw G Bedienungsanleitung Bitte bewahren Sie die gesamte Benutzerdokumentation für späteres Nachschlagen auf. In dieser Bedienungsanleitung bezieht sich der Begriff Zeiger auf den interaktiven

Mehr

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus: PC-Führerschein für Kinder - Lehrerheft, Klasse 1 bis 4

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus: PC-Führerschein für Kinder - Lehrerheft, Klasse 1 bis 4 Unterrichtsmaterialien in digitaler und in gedruckter Form Auszug aus: PC-Führerschein für Kinder - Lehrerheft, Klasse 1 bis 4 Das komplette Material finden Sie hier: Download bei School-Scout.de Liebe

Mehr

CloudMatic V1.0. Inhalt

CloudMatic V1.0. Inhalt CloudMatic V1.0 Inhalt Einleitung... 2 CCUs hinzufügen... 3 meine-homematic.de... 4 Eigenes VPN... 4 View Editor... 5 Übersicht... 5 Allgemeine Einstellungen... 6 Kanäle hinzufügen... 6 Spezielle Kanäle...

Mehr

Erweiterung für Premium Auszeichnung

Erweiterung für Premium Auszeichnung Anforderungen Beliebige Inhalte sollen im System als Premium Inhalt gekennzeichnet werden können Premium Inhalte sollen weiterhin für unberechtigte Benutzer sichtbar sein, allerdings nur ein bestimmter

Mehr

Embedded Computing Conference 2014 Embedded UI Qt5

Embedded Computing Conference 2014 Embedded UI Qt5 Embedded Computing Conference 2014 Embedded UI Qt5 2 Embedded User Interfaces in the Smartphone Age The Power of Qt5 and the QNX OS Qt Vorstellung 3 Qt ( cute ) Hat eine lange Geschichte (Beginn der Entwicklung:

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung Kapitel 6 Vererbung Vererbung 1 Ziele Das Vererbungsprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen

Mehr

Grundlegende Techniken der Gestensteuerung

Grundlegende Techniken der Gestensteuerung 1. 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. Sie können stattdessen Befehle bequem mit den Fingern

Mehr

Graphic Coding. Klausur. 9. Februar 2007. Kurs A

Graphic Coding. Klausur. 9. Februar 2007. Kurs A Graphic Coding Klausur 9. Februar 2007 Kurs A Name: Matrikelnummer: Hinweise - Es sind keine Hilfsmaterialien erlaubt. (Keine Bücher, Taschenrechner, Handys) - Sie haben zwei Stunden Zeit. - Insgesamt

Mehr

Schalter für Zeichnungshilfen Statuszeile

Schalter für Zeichnungshilfen Statuszeile Das Programmfenster Zeichnungsname Werkzeugkästen Menüleiste Zeichenbereich Bildschirmmenü Befehlszeilenfenster Schalter für Zeichnungshilfen Statuszeile Während der Arbeit mit AutoCAD kann über eine Online-Hilfe

Mehr

SEMINARVORTRAG ANDROID ENTWICKLUNG ETIENNE KÖRNER EMBEDDED SYSTEMS SS2013 - HSRM

SEMINARVORTRAG ANDROID ENTWICKLUNG ETIENNE KÖRNER EMBEDDED SYSTEMS SS2013 - HSRM SEMINARVORTRAG ANDROID ENTWICKLUNG ETIENNE KÖRNER EMBEDDED SYSTEMS SS2013 - HSRM ÜBERSICHT Android Android Dalvik Virtuelle Maschine Android und Desktop Applikationen Android Entwicklung Tools R Activity

Mehr

Unified Modeling Language (UML)

Unified Modeling Language (UML) Kirsten Berkenkötter Was ist ein Modell? Warum Modellieren? Warum UML? Viele, viele Diagramme UML am Beispiel Was ist ein Modell? Ein Modell: ist eine abstrakte Repräsentation eines Systems, bzw. ist eine

Mehr

TD-Mobile-Beispiel mit Barcodescanner

TD-Mobile-Beispiel mit Barcodescanner TD-Mobile-Beispiel mit Barcodescanner 1 Einleitung Viele Interessenten für die Entwicklungsumgebung TD-Mobile wollen mit einem mobilen Endgerät (sprich: Handy) Daten über entsprechende Barcodes erfassen

Mehr

Firmware-Update BRAVIA 2011

Firmware-Update BRAVIA 2011 Firmware-Update 2011 Sehr geehrter Handelspartner, hiermit möchten wir Sie über anstehende Software Updates, sowie über die Erweiterung der USB Recording Funktionalität der neuen Modelle für 2011 informieren.

Mehr

Softwaretechnik (WS 11/12)

Softwaretechnik (WS 11/12) Universität Augsburg, LSt. Softwaretechnik, K. Stenzel, H. Seebach, G. Anders Softwaretechnik (WS 11/12) Lösungsvorschlag 5 Aufgabe 1 (System Behavior: System Sequence Diagrams) (10/5 Punkte) a) Was sind

Mehr

PO-250. Fingerpulsoximeter. 1. Wie führe ich eine Echtzeitübertragung vom PULOX PO-250 zum PC durch und speichere meine Messdaten auf dem PC?

PO-250. Fingerpulsoximeter. 1. Wie führe ich eine Echtzeitübertragung vom PULOX PO-250 zum PC durch und speichere meine Messdaten auf dem PC? Mini-FAQ v1.5 PO-250 Fingerpulsoximeter 1. Wie führe ich eine Echtzeitübertragung vom PULOX PO-250 zum PC durch und speichere meine Messdaten auf dem PC? 2. Wie nehme ich mit dem PULOX PO-250 Daten auf

Mehr

Pen-Display (Cintiq 22HD von wacom)

Pen-Display (Cintiq 22HD von wacom) Pen-Display (Cintiq 22HD von wacom) Kurzbeschreibung Pen-Displays (Stift-Monitore) lassen sich als digitale Tafel, aber auch zur Bedienung des Präsentationsrechners und zur Medienerstellung nutzen. Das

Mehr

Manual & Installation Guide

Manual & Installation Guide Manual & Installation Guide WIN&I PowerPoint Presenter für Kinect for Windows Evoluce AG Ludwigstr. 47 D-85399 Hallbergmoos www.evoluce.com www.win-and-i.com 1 Manual & Installation Guide WIN&I PowerPoint

Mehr

Lissajous-Figuren Versuche mit dem Oszilloskop und dem X Y Schreiber

Lissajous-Figuren Versuche mit dem Oszilloskop und dem X Y Schreiber Protokoll VIII Lissajous-Figuren Versuche mit dem Oszilloskop und dem X Y Schreiber Datum: 10.12.2001 Projektgruppe 279 Tutorin: Grit Petschick Studenten: Mina Günther Berna Gezik Carola Nisse Michael

Mehr

Cross-Platform Apps mit HTML5/JS/CSS/PhoneGap

Cross-Platform Apps mit HTML5/JS/CSS/PhoneGap Cross-Platform Apps mit HTML5/JS/CSS/PhoneGap Proseminar Objektorientiertes Programmieren mit.net und C# Florian Schulz Institut für Informatik Software & Systems Engineering Einführung Was hat Cross-Plattform

Mehr

Windows XP Windows 7

Windows XP Windows 7 Umstieg von Windows XP auf Windows 7 DIE SYMBOLE IN DER TASKLEISTE Der Desktop des Standardarbeitsplatzes präsentiert sich unter Windows 7 nur mit dem Symbol und in der befinden

Mehr

HILFE Datei. UPC Online Backup

HILFE Datei. UPC Online Backup HILFE Datei UPC Online Backup Inhalt Login Screen......? Welcome Screen:......? Manage Files Screen:...? Fotoalbum Screen:.........? Online backup Client Screen...? Frequently Asked Questions (FAQ s)...?

Mehr

Einführung in Javadoc

Einführung in Javadoc Einführung in Javadoc Johannes Rinn http://java.sun.com/j2se/javadoc Was ist Javadoc? Javadoc ist ein Werkzeug, dass eine standardisierte Dokumentation für die Programmiersprache Java unterstützt. Vorteil:

Mehr

Programmierung eines NewsTickers in Java

Programmierung eines NewsTickers in Java Programmierung eines NewsTickers in Java ( & ) Projektarbeit Programmiertechnik:Java NTA FH Isny 12. Info David Mayr / Andreas Krug Seite 1 von 7 ::: David Mayr / Andreas Krug [ 12. Info NTA FH Isny ]

Mehr

Einen Trickfilm erstellen mit Windows Movie Maker

Einen Trickfilm erstellen mit Windows Movie Maker Einen Trickfilm erstellen mit Windows Movie Maker 1. Bilder aufnehmen und auf den Computer übertragen Ein Trickfilm entsteht, indem einzeln aufgenommene Bilder in schneller Folge abspielt werden. Diese

Mehr