Commit 89d950e4 authored by Taddeüs Kroes's avatar Taddeüs Kroes

Finished 'Design' chapter.

parent a318b0d4
......@@ -467,14 +467,15 @@ goal is to test the effectiveness of the design and detect its shortcomings.
The design of the architecture is essentially complete with the components
specified in this chapter. However, one specification has not yet been
discussed: the ability address the architecture using a method of
communication independent of the application programming language.
discussed: the ability to address the architecture using a method of
communication independent of the application's programming language.
If an application must start the architecture instance in a thread within
the application itself, the architecture is required to be compatible with
the programming language used to write the application. To overcome the
language barrier, an instance of the architecture would have to run in a
separate process.
If the architecture and a gesture-based application are written in the same
language, the main loop of the architecture can run in a separate thread of
the application. If the application is written in a different language, the
architecture has to run in a separate process. Since the application needs
to respond to gestures that are triggered by the architecture, there must
be a communication layer between the separate processes.
A common and efficient way of communication between two separate processes
is through the use of a network protocol. In this particular case, the
......@@ -485,7 +486,7 @@ goal is to test the effectiveness of the design and detect its shortcomings.
\vspace{-0.3em}
\daemondiagram
An advantage of a daemon setup is that is can serve multiple applications
An advantage of a daemon setup is that it can serve multiple applications
at the same time. Alternatively, each application that uses gesture
interaction would start its own instance of the architecture in a separate
process, which would be less efficient.
......@@ -503,16 +504,16 @@ goal is to test the effectiveness of the design and detect its shortcomings.
\begin{verbatim}
initialize GUI framework, creating a window and nessecary GUI widgets
create a root area that synchronizes position and size with the application window
define 'rotation' gesture handler and bind it to the root area
create a root event area that synchronizes position and size with the application window
define 'rotation' gesture handler and bind it to the root event area
create an area with the position and radius of the circle
define 'drag' gesture handler and bind it to the circle area
create an event area with the position and radius of the circle
define 'drag' gesture handler and bind it to the circle event area
create an area with the position and size of the button
define 'tap' gesture handler and bind it to the button area
create an event area with the position and size of the button
define 'tap' gesture handler and bind it to the button event area
create a new event server and assign the created root area to it
create a new event server and assign the created root event area to it
start the event server in a new thread
start the GUI main loop in the current thread
......@@ -525,8 +526,8 @@ start the GUI main loop in the current thread
A reference implementation of the design has been written in Python. Two test
applications have been created to test if the design ``works'' in a practical
application, and to detect its flaws. One application is mainly used to test
the gesture tracker implementations. The other program uses areas in a tree,
demonstrating event delegation and propagation.
the gesture tracker implementations. The other program uses multiple event
areas in a tree structure, demonstrating event delegation and propagation.
To test multi-touch interaction properly, a multi-touch device is required. The
University of Amsterdam (UvA) has provided access to a multi-touch table from
......@@ -556,7 +557,7 @@ The reference implementation is written in Python and available at
\item Transformation tracker, supports $rotate,~pinch,~drag$ gestures.
\end{itemize}
\textbf{Areas}
\textbf{Event areas}
\begin{itemize}
\item Circular area
\item Rectangular area
......@@ -567,10 +568,10 @@ The implementation does not include a network protocol to support the daemon
setup as described in section \ref{sec:daemon}. Therefore, it is only usable in
Python programs. Thus, the two test programs are also written in Python.
The area implementations contain some geometric functions to determine whether
an event should be delegated to an area. All gesture trackers have been
implemented using an imperative programming style. Technical details about the
implementation of gesture detection are described in appendix
The event area implementations contain some geometric functions to determine
whether an event should be delegated to an event area. All gesture trackers
have been implemented using an imperative programming style. Technical details
about the implementation of gesture detection are described in appendix
\ref{app:implementation-details}.
\section{Full screen Pygame program}
......@@ -602,11 +603,11 @@ The application receives TUIO events and translates them to \emph{point\_down},
interpreted to be \emph{single tap}, \emph{double tap}, \emph{rotation} or
\emph{pinch} gestures. The positions of all touch objects are drawn using the
Pygame library. Since the Pygame library does not provide support to find the
location of the display window, the root area captures events in the entire
screens surface. The application can be run either full screen or in windowed
mode. If windowed, screen-wide gesture coordinates are mapped to the size of
the Pyame window. In other words, the Pygame window always represents the
entire touch surface. The output of the program can be seen in figure
location of the display window, the root event area captures events in the
entire screens surface. The application can be run either full screen or in
windowed mode. If windowed, screen-wide gesture coordinates are mapped to the
size of the Pyame window. In other words, the Pygame window always represents
the entire touch surface. The output of the program can be seen in figure
\ref{fig:draw}.
\begin{figure}[h!]
......@@ -625,7 +626,7 @@ The second test application uses the GIMP toolkit (GTK+) \cite{GTK} to create
its user interface. Since GTK+ defines a main event loop that is started in
order to use the interface, the architecture implementation runs in a separate
thread. The application creates a main window, whose size and position are
synchronized with the root area of the architecture.
synchronized with the root event area of the architecture.
% TODO
\emph{TODO: uitbreiden en screenshots erbij (dit programma is nog niet af)}
......@@ -656,7 +657,7 @@ synchronized with the root area of the architecture.
\section{A generic method for grouping events}
\label{sec:eventfilter}
As mentioned in section \ref{sec:areas}, the concept of an \emph{area} is based
As mentioned in section \ref{sec:areas}, the concept of an event area is based
on the assumption that the set or originating events that form a particular
gesture, can be determined based exclusively on the location of the events.
Since this thesis focuses on multi-touch surface based devices, and every
......@@ -673,12 +674,12 @@ of events that consist of these parameters.
A more generic term for a component that groups similar events is the
\emph{event filter}. The concept of an event filter is based on the same
principle as areas, which is the assumption that gestures are formed from a
subset of all events. However, an event filter takes all parameters of an event
into account. An application on the camera-based multi-touch table could be to
group all objects that are triangular into one filter, and all rectangular
objects into another. Or, to separate small finger tips from large ones to be
able to recognize whether a child or an adult touches the table.
principle as event areas, which is the assumption that gestures are formed from
a subset of all events. However, an event filter takes all parameters of an
event into account. An application on the camera-based multi-touch table could
be to group all objects that are triangular into one filter, and all
rectangular objects into another. Or, to separate small finger tips from large
ones to be able to recognize whether a child or an adult touches the table.
\section{Using a state machine for gesture detection}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment