Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
multitouch
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Taddeüs Kroes
multitouch
Commits
89d950e4
Commit
89d950e4
authored
Jun 19, 2012
by
Taddeüs Kroes
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Finished 'Design' chapter.
parent
a318b0d4
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
36 additions
and
35 deletions
+36
-35
docs/report.tex
docs/report.tex
+36
-35
No files found.
docs/report.tex
View file @
89d950e4
...
@@ -467,14 +467,15 @@ goal is to test the effectiveness of the design and detect its shortcomings.
...
@@ -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
The design of the architecture is essentially complete with the components
specified in this chapter. However, one specification has not yet been
specified in this chapter. However, one specification has not yet been
discussed: the ability address the architecture using a method of
discussed: the ability
to
address the architecture using a method of
communication independent of the application programming language.
communication independent of the application
's
programming language.
If an application must start the architecture instance in a thread within
If the architecture and a gesture-based application are written in the same
the application itself, the architecture is required to be compatible with
language, the main loop of the architecture can run in a separate thread of
the programming language used to write the application. To overcome the
the application. If the application is written in a different language, the
language barrier, an instance of the architecture would have to run in a
architecture has to run in a separate process. Since the application needs
separate process.
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
A common and efficient way of communication between two separate processes
is through the use of a network protocol. In this particular case, the
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.
...
@@ -485,7 +486,7 @@ goal is to test the effectiveness of the design and detect its shortcomings.
\vspace
{
-0.3em
}
\vspace
{
-0.3em
}
\daemondiagram
\daemondiagram
An advantage of a daemon setup is that i
s
can serve multiple applications
An advantage of a daemon setup is that i
t
can serve multiple applications
at the same time. Alternatively, each application that uses gesture
at the same time. Alternatively, each application that uses gesture
interaction would start its own instance of the architecture in a separate
interaction would start its own instance of the architecture in a separate
process, which would be less efficient.
process, which would be less efficient.
...
@@ -503,16 +504,16 @@ goal is to test the effectiveness of the design and detect its shortcomings.
...
@@ -503,16 +504,16 @@ goal is to test the effectiveness of the design and detect its shortcomings.
\begin{verbatim}
\begin{verbatim}
initialize GUI framework, creating a window and nessecary GUI widgets
initialize GUI framework, creating a window and nessecary GUI widgets
create a root area that synchronizes position and size with the application window
create a root
event
area that synchronizes position and size with the application window
define 'rotation' gesture handler and bind it to the root area
define 'rotation' gesture handler and bind it to the root
event
area
create an area with the position and radius of the circle
create an
event
area with the position and radius of the circle
define 'drag' gesture handler and bind it to the circle area
define 'drag' gesture handler and bind it to the circle
event
area
create an area with the position and size of the button
create an
event
area with the position and size of the button
define 'tap' gesture handler and bind it to the button area
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 event server in a new thread
start the GUI main loop in the current thread
start the GUI main loop in the current thread
...
@@ -525,8 +526,8 @@ 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
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
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
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,
the gesture tracker implementations. The other program uses
multiple event
demonstrating event delegation and propagation.
areas in a tree structure,
demonstrating event delegation and propagation.
To test multi-touch interaction properly, a multi-touch device is required. The
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
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
...
@@ -556,7 +557,7 @@ The reference implementation is written in Python and available at
\item
Transformation tracker, supports
$
rotate,~pinch,~drag
$
gestures.
\item
Transformation tracker, supports
$
rotate,~pinch,~drag
$
gestures.
\end{itemize}
\end{itemize}
\textbf
{
A
reas
}
\textbf
{
Event a
reas
}
\begin{itemize}
\begin{itemize}
\item
Circular area
\item
Circular area
\item
Rectangular area
\item
Rectangular area
...
@@ -567,10 +568,10 @@ The implementation does not include a network protocol to support the daemon
...
@@ -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
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.
Python programs. Thus, the two test programs are also written in Python.
The
area implementations contain some geometric functions to determine whether
The
event area implementations contain some geometric functions to determine
an event should be delegated to an area. All gesture trackers have been
whether an event should be delegated to an event area. All gesture trackers
implemented using an imperative programming style. Technical details about the
have been implemented using an imperative programming style. Technical details
implementation of gesture detection are described in appendix
about the
implementation of gesture detection are described in appendix
\ref
{
app:implementation-details
}
.
\ref
{
app:implementation-details
}
.
\section
{
Full screen Pygame program
}
\section
{
Full screen Pygame program
}
...
@@ -602,11 +603,11 @@ The application receives TUIO events and translates them to \emph{point\_down},
...
@@ -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
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
\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
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 entir
e
location of the display window, the root
event area captures events in th
e
screens surface. The application can be run either full screen or in windowed
entire screens surface. The application can be run either full screen or in
mode. If windowed, screen-wide gesture coordinates are mapped to the size of
windowed mode. If windowed, screen-wide gesture coordinates are mapped to the
the Pyame window. In other words, the Pygame window always represents the
size of the Pyame window. In other words, the Pygame window always represents
entire touch surface. The output of the program can be seen in figure
the
entire touch surface. The output of the program can be seen in figure
\ref
{
fig:draw
}
.
\ref
{
fig:draw
}
.
\begin{figure}
[h!]
\begin{figure}
[h!]
...
@@ -625,7 +626,7 @@ The second test application uses the GIMP toolkit (GTK+) \cite{GTK} to create
...
@@ -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
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
order to use the interface, the architecture implementation runs in a separate
thread. The application creates a main window, whose size and position are
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
% TODO
\emph
{
TODO: uitbreiden en screenshots erbij (dit programma is nog niet af)
}
\emph
{
TODO: uitbreiden en screenshots erbij (dit programma is nog niet af)
}
...
@@ -656,7 +657,7 @@ synchronized with the root area of the architecture.
...
@@ -656,7 +657,7 @@ synchronized with the root area of the architecture.
\section
{
A generic method for grouping events
}
\section
{
A generic method for grouping events
}
\label
{
sec:eventfilter
}
\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
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.
gesture, can be determined based exclusively on the location of the events.
Since this thesis focuses on multi-touch surface based devices, and every
Since this thesis focuses on multi-touch surface based devices, and every
...
@@ -673,12 +674,12 @@ of events that consist of these parameters.
...
@@ -673,12 +674,12 @@ of events that consist of these parameters.
A more generic term for a component that groups similar events is the
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
\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
principle as
event areas, which is the assumption that gestures are formed from
subset of all events. However, an event filter takes all parameters of an event
a subset of all events. However, an event filter takes all parameters of an
into account. An application on the camera-based multi-touch table could be to
event into account. An application on the camera-based multi-touch table could
group all objects that are triangular into one filter, and all rectangular
be to group all objects that are triangular into one filter, and all
objects into another. Or, to separate small finger tips from large ones to b
e
rectangular objects into another. Or, to separate small finger tips from larg
e
able to recognize whether a child or an adult touches the table.
ones to be
able to recognize whether a child or an adult touches the table.
\section
{
Using a state machine for gesture detection
}
\section
{
Using a state machine for gesture detection
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment