added code snippets, future work
This commit is contained in:
parent
ba843b7fed
commit
0f8396b190
BIN
media/DisplayFrameTransformer.png
Normal file
BIN
media/DisplayFrameTransformer.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
@ -16,7 +16,7 @@ todonotes
|
|||||||
\language_package default
|
\language_package default
|
||||||
\inputencoding auto
|
\inputencoding auto
|
||||||
\fontencoding global
|
\fontencoding global
|
||||||
\font_roman "default" "default"
|
\font_roman "utopia" "default"
|
||||||
\font_sans "default" "default"
|
\font_sans "default" "default"
|
||||||
\font_typewriter "default" "default"
|
\font_typewriter "default" "default"
|
||||||
\font_math "auto" "auto"
|
\font_math "auto" "auto"
|
||||||
@ -167,7 +167,22 @@ University of Surrey
|
|||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Abstract
|
\begin_layout Abstract
|
||||||
abstract
|
The scope and current state of the multi-source holoportation project is
|
||||||
|
examined.
|
||||||
|
The aim is to take a suite of 3D video capture software and extend it from
|
||||||
|
the current capabilities of multiple sensors but a single client to handle
|
||||||
|
multiple groups of sensors called sources during frame collection and display.
|
||||||
|
Currently the display methods have been extended in line with the specification
|
||||||
|
in order to allow simultaneous display and arbitrary real-time placement
|
||||||
|
within the display space.
|
||||||
|
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Abstract
|
||||||
|
The future work for the project is described including the current designs
|
||||||
|
for said endeavours.
|
||||||
|
The bulk of this remaining work involves developing the network capabilities
|
||||||
|
of the software to accommodation multiple sources.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
@ -177,6 +192,24 @@ LatexCommand tableofcontents
|
|||||||
\end_inset
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\begin_inset Newpage newpage
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
\begin_inset FloatList figure
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\begin_inset CommandInset toc
|
||||||
|
LatexCommand lstlistoflistings
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout List of TODOs
|
\begin_layout List of TODOs
|
||||||
@ -477,7 +510,7 @@ Worlds in Miniature
|
|||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The Worlds in Miniature is described in the paper
|
The Worlds in Miniature is described in
|
||||||
\begin_inset CommandInset citation
|
\begin_inset CommandInset citation
|
||||||
LatexCommand cite
|
LatexCommand cite
|
||||||
key "wim"
|
key "wim"
|
||||||
@ -488,9 +521,8 @@ literal "false"
|
|||||||
as a set of interfaces between the user and the virtual space they experience
|
as a set of interfaces between the user and the virtual space they experience
|
||||||
using tactile and visual tools.
|
using tactile and visual tools.
|
||||||
The interface involves providing the user with a miniature render of the
|
The interface involves providing the user with a miniature render of the
|
||||||
world they are inhabiting.
|
world they are inhabiting that can interacted with in order to affect the
|
||||||
This model can interacted with in order to affect the full scale environment
|
full scale environment around them.
|
||||||
around them.
|
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
@ -715,7 +747,7 @@ status open
|
|||||||
\begin_inset Caption Standard
|
\begin_inset Caption Standard
|
||||||
|
|
||||||
\begin_layout Plain Layout
|
\begin_layout Plain Layout
|
||||||
Initial structure of the
|
Initial architecture of the
|
||||||
\noun on
|
\noun on
|
||||||
LiveScan3D
|
LiveScan3D
|
||||||
\noun default
|
\noun default
|
||||||
@ -787,11 +819,19 @@ The required development to take the existing
|
|||||||
\noun on
|
\noun on
|
||||||
LiveScan
|
LiveScan
|
||||||
\noun default
|
\noun default
|
||||||
codebase to the desired multi-source result can be split into two parts.
|
codebase to the desired multi-source result can be split into two areas
|
||||||
|
of concern.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Labeling
|
||||||
The network layer of the
|
\labelwidthstring 00.00.0000
|
||||||
|
|
||||||
|
\series bold
|
||||||
|
\emph on
|
||||||
|
Network
|
||||||
|
\series default
|
||||||
|
\emph default
|
||||||
|
The network layer of the
|
||||||
\noun on
|
\noun on
|
||||||
LiveScan
|
LiveScan
|
||||||
\noun default
|
\noun default
|
||||||
@ -807,8 +847,15 @@ sources
|
|||||||
for which separate frames are collected for display.
|
for which separate frames are collected for display.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Labeling
|
||||||
Finally the display element of the server should be extended to allow the
|
\labelwidthstring 00.00.0000
|
||||||
|
|
||||||
|
\series bold
|
||||||
|
\emph on
|
||||||
|
Display
|
||||||
|
\series default
|
||||||
|
\emph default
|
||||||
|
Finally the display element of the server should be extended to allow the
|
||||||
simultaneous presentation of multiple point clouds.
|
simultaneous presentation of multiple point clouds.
|
||||||
These objects should be individually arrangeable in the display space allowing
|
These objects should be individually arrangeable in the display space allowing
|
||||||
both movement and rotation.
|
both movement and rotation.
|
||||||
@ -821,9 +868,8 @@ OpenGL
|
|||||||
\noun default
|
\noun default
|
||||||
window, has been modified such that it can construct and render point clouds
|
window, has been modified such that it can construct and render point clouds
|
||||||
from multiple sources.
|
from multiple sources.
|
||||||
To do so a dynamic sub-system of geometric transformations has been included
|
To do so a dynamic sub-system of geometric transformations has been written
|
||||||
such that the renders of individual sources are arranged coherently within
|
in order to coherently arrange sources within the space when reconstructed.
|
||||||
the space when reconstructed.
|
|
||||||
The default arrangements can be overridden with keyboard controls facilitating
|
The default arrangements can be overridden with keyboard controls facilitating
|
||||||
arbitrary placement and rotation of separate sources within the
|
arbitrary placement and rotation of separate sources within the
|
||||||
\noun on
|
\noun on
|
||||||
@ -853,7 +899,18 @@ Point3f
|
|||||||
Point2f
|
Point2f
|
||||||
\noun default
|
\noun default
|
||||||
respectively are used in drawing skeletons.
|
respectively are used in drawing skeletons.
|
||||||
There is also a class defining an affine transformation.
|
There is also a class defining an affine transformation, the definitions
|
||||||
|
for all three can be seen in appendix
|
||||||
|
\begin_inset CommandInset ref
|
||||||
|
LatexCommand ref
|
||||||
|
reference "sec:Existing-Data-Structures"
|
||||||
|
plural "false"
|
||||||
|
caps "false"
|
||||||
|
noprefix "false"
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
@ -942,9 +999,9 @@ Separation of Network and Presentation Layer
|
|||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
During initial testing frames received from a live sensor were intercepted
|
During initial testing frames received from a live sensor were intercepted
|
||||||
and serialized to XML files in local storage.
|
and serialized to XML in local storage.
|
||||||
These frames were loaded back as the server started and the values were
|
These frames were loaded into memory as the server was started and merged
|
||||||
merged with those received live before display.
|
with those received live before display.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
@ -983,7 +1040,7 @@ status open
|
|||||||
\begin_inset Caption Standard
|
\begin_inset Caption Standard
|
||||||
|
|
||||||
\begin_layout Plain Layout
|
\begin_layout Plain Layout
|
||||||
Initial composite testing frame
|
Initial multi-source composite testing frame
|
||||||
\begin_inset CommandInset label
|
\begin_inset CommandInset label
|
||||||
LatexCommand label
|
LatexCommand label
|
||||||
name "fig:Initial-composite-frame"
|
name "fig:Initial-composite-frame"
|
||||||
@ -1005,10 +1062,11 @@ name "fig:Initial-composite-frame"
|
|||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The objects can be seen to be occupying the same space due to their similar
|
The objects can be seen to be occupying the same space due to their similar
|
||||||
positions in the frame.
|
positions in the frame during capture.
|
||||||
This is not a sufficient solution for displaying separate sources and so
|
This is not a sufficient solution for displaying separate sources and so
|
||||||
geometric transformations like those mentioned above were employed.
|
geometric transformations like those mentioned above were employed to separate
|
||||||
This can be seen in figure
|
the two.
|
||||||
|
The change in software structure at this stage can be seen in figure
|
||||||
\begin_inset CommandInset ref
|
\begin_inset CommandInset ref
|
||||||
LatexCommand ref
|
LatexCommand ref
|
||||||
reference "fig:Initial-testing-layout"
|
reference "fig:Initial-testing-layout"
|
||||||
@ -1105,7 +1163,7 @@ status open
|
|||||||
\begin_inset Caption Standard
|
\begin_inset Caption Standard
|
||||||
|
|
||||||
\begin_layout Plain Layout
|
\begin_layout Plain Layout
|
||||||
Composite frame following 180° rotation of recorded frame in
|
Composite testing frame following 180° rotation of recorded source in
|
||||||
\begin_inset Formula $y$
|
\begin_inset Formula $y$
|
||||||
\end_inset
|
\end_inset
|
||||||
|
|
||||||
@ -1157,17 +1215,18 @@ OpenGL
|
|||||||
Microsoft Hololens
|
Microsoft Hololens
|
||||||
\noun default
|
\noun default
|
||||||
and Mobile AR applications.
|
and Mobile AR applications.
|
||||||
Therefore when designing the multi-source capabilities the separation of
|
Therefore when designing the multi-source capabilities, the separation
|
||||||
logic between the network and presentation layer will be important.
|
of logic between the network and presentation layer is important.
|
||||||
The way in which the
|
The way in which the
|
||||||
\noun on
|
\noun on
|
||||||
OpenGL
|
OpenGL
|
||||||
\noun default
|
\noun default
|
||||||
window arranges the figures within should be defined by the
|
window arranges the figures in it's display space should be defined by
|
||||||
|
the
|
||||||
\noun on
|
\noun on
|
||||||
OpenGL
|
OpenGL
|
||||||
\noun default
|
\noun default
|
||||||
window.
|
window itself.
|
||||||
The network layer should be display agnostic and not make assumptions about
|
The network layer should be display agnostic and not make assumptions about
|
||||||
how the display will process figures.
|
how the display will process figures.
|
||||||
\end_layout
|
\end_layout
|
||||||
@ -1188,8 +1247,19 @@ MainWindow
|
|||||||
OpenGL
|
OpenGL
|
||||||
\noun default
|
\noun default
|
||||||
were changed.
|
were changed.
|
||||||
The Frame structure was defined to wrap an individual point cloud with
|
A Frame structure was defined to wrap an individual point cloud with a
|
||||||
a client ID to allow differentiation.
|
client ID to allow differentiation, the definition can be seen in appendix
|
||||||
|
|
||||||
|
\begin_inset CommandInset ref
|
||||||
|
LatexCommand ref
|
||||||
|
reference "subsec:Frame"
|
||||||
|
plural "false"
|
||||||
|
caps "false"
|
||||||
|
noprefix "false"
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
.
|
||||||
The structure holds fields for each of the lists previously shared between
|
The structure holds fields for each of the lists previously shared between
|
||||||
the two objects including a list of vertices or co-ordinates and the RGB
|
the two objects including a list of vertices or co-ordinates and the RGB
|
||||||
values for each as well as the camera poses and bodies.
|
values for each as well as the camera poses and bodies.
|
||||||
@ -1200,9 +1270,12 @@ The original
|
|||||||
\noun on
|
\noun on
|
||||||
LiveScan3D
|
LiveScan3D
|
||||||
\noun default
|
\noun default
|
||||||
cleared each of these variables for each newly retrieved frame, when moving
|
cleared each of these variables before retrieving a new frame, when moving
|
||||||
to a multi-source architecture the ability to individually update source
|
to a multi-source architecture the ability to individually update source
|
||||||
point clouds was required.
|
point clouds was noted as being important.
|
||||||
|
This would remove blocking the entire display when unable to receive frames
|
||||||
|
from a specific client, other clients would still be able to have frames
|
||||||
|
updated promptly.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
@ -1240,7 +1313,67 @@ DisplayFrameTransformer
|
|||||||
\noun on
|
\noun on
|
||||||
OpenGL
|
OpenGL
|
||||||
\noun default
|
\noun default
|
||||||
window.
|
window, a UML diagram for the class can be seen in figure
|
||||||
|
\begin_inset CommandInset ref
|
||||||
|
LatexCommand ref
|
||||||
|
reference "fig:UML-displayframetransformer"
|
||||||
|
plural "false"
|
||||||
|
caps "false"
|
||||||
|
noprefix "false"
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
\begin_inset Float figure
|
||||||
|
wide false
|
||||||
|
sideways false
|
||||||
|
status open
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
\align center
|
||||||
|
\begin_inset Graphics
|
||||||
|
filename ../media/DisplayFrameTransformer.png
|
||||||
|
lyxscale 30
|
||||||
|
width 50col%
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
\begin_inset Caption Standard
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
UML diagram for
|
||||||
|
\noun on
|
||||||
|
DisplayFrameTransformer
|
||||||
|
\noun default
|
||||||
|
|
||||||
|
\begin_inset CommandInset label
|
||||||
|
LatexCommand label
|
||||||
|
name "fig:UML-displayframetransformer"
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
@ -1249,7 +1382,7 @@ Each client is assigned a default transformation which can be overridden
|
|||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
Clients are initially arranged in a circle in around the origin in the center
|
Clients are initially arranged in a circle around the origin in the center
|
||||||
of the space.
|
of the space.
|
||||||
This is done by retrieving a transformation for a rotation in the
|
This is done by retrieving a transformation for a rotation in the
|
||||||
\begin_inset Formula $y$
|
\begin_inset Formula $y$
|
||||||
@ -1294,9 +1427,24 @@ DisplayFrameTransformer
|
|||||||
also has methods to override these initial transforms with the RotateClient()
|
also has methods to override these initial transforms with the RotateClient()
|
||||||
and TranslateClient() methods.
|
and TranslateClient() methods.
|
||||||
When these methods are called for the first time for a client an object
|
When these methods are called for the first time for a client an object
|
||||||
defining the position and rotation is pulled from the default rotation.
|
defining the position and rotation is populated using the default rotation.
|
||||||
From here the presence of a client override leads returned transforms to
|
From here the presence of a client override results in applied transforms
|
||||||
be defined by these values instead.
|
being defined by these values as opposed to the default orientation.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
This leaves the current architecture of the server application as described
|
||||||
|
in figure
|
||||||
|
\begin_inset CommandInset ref
|
||||||
|
LatexCommand ref
|
||||||
|
reference "fig:current-state-diagram"
|
||||||
|
plural "false"
|
||||||
|
caps "false"
|
||||||
|
noprefix "false"
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
@ -1353,6 +1501,112 @@ name "fig:current-state-diagram"
|
|||||||
|
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Subsection
|
||||||
|
Control Scheme
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
The movement of objects within the
|
||||||
|
\noun on
|
||||||
|
OpenGL
|
||||||
|
\noun default
|
||||||
|
space is conducted through keyboard controls.
|
||||||
|
While mouse control would fine-grained and intuitive, the axes of motion
|
||||||
|
and rotation available to objects makes defining specific keys for each
|
||||||
|
more flexible.
|
||||||
|
This additionally removes the need to redefine or overload the camera controls.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
The
|
||||||
|
\begin_inset Quotes eld
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
I
|
||||||
|
\begin_inset Quotes erd
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
key is used to cycle through displayed sources, the currently selected
|
||||||
|
source is the subject of each of the movement actions.
|
||||||
|
Sources are moved across the horizontal plane (
|
||||||
|
\family roman
|
||||||
|
\series medium
|
||||||
|
\shape up
|
||||||
|
\size normal
|
||||||
|
\emph off
|
||||||
|
\bar no
|
||||||
|
\strikeout off
|
||||||
|
\xout off
|
||||||
|
\uuline off
|
||||||
|
\uwave off
|
||||||
|
\noun off
|
||||||
|
\color none
|
||||||
|
|
||||||
|
\begin_inset Formula $x$
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\family default
|
||||||
|
\series default
|
||||||
|
\shape default
|
||||||
|
\size default
|
||||||
|
\emph default
|
||||||
|
\bar default
|
||||||
|
\strikeout default
|
||||||
|
\xout default
|
||||||
|
\uuline default
|
||||||
|
\uwave default
|
||||||
|
\noun default
|
||||||
|
\color inherit
|
||||||
|
and
|
||||||
|
\family roman
|
||||||
|
\series medium
|
||||||
|
\shape up
|
||||||
|
\size normal
|
||||||
|
\emph off
|
||||||
|
\bar no
|
||||||
|
\strikeout off
|
||||||
|
\xout off
|
||||||
|
\uuline off
|
||||||
|
\uwave off
|
||||||
|
\noun off
|
||||||
|
\color none
|
||||||
|
|
||||||
|
\begin_inset Formula $z$
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\family default
|
||||||
|
\series default
|
||||||
|
\shape default
|
||||||
|
\size default
|
||||||
|
\emph default
|
||||||
|
\bar default
|
||||||
|
\strikeout default
|
||||||
|
\xout default
|
||||||
|
\uuline default
|
||||||
|
\uwave default
|
||||||
|
\noun default
|
||||||
|
\color inherit
|
||||||
|
axis) of the display space using a WASD-esque layout of the UHJK keys.
|
||||||
|
Objects can be rotated about the vertical (
|
||||||
|
\begin_inset Formula $y$
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
) axis using the B and N keys.
|
||||||
|
Finally the placement of an object can be reset to default using the R
|
||||||
|
key, the addition of the shift modifier resets all clients.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
Worth noting is that this represents arbitrary placement of sources in two
|
||||||
|
axes of position and one of rotation.
|
||||||
|
This is a result of these being the most common and intuitive axes with
|
||||||
|
which sources will need to be manipulated.
|
||||||
|
The ability to allow movement in all degrees would require only binding
|
||||||
|
these actions to keys.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Section
|
\begin_layout Section
|
||||||
Future Work
|
Future Work
|
||||||
\end_layout
|
\end_layout
|
||||||
@ -1366,7 +1620,250 @@ OpenGL
|
|||||||
\noun on
|
\noun on
|
||||||
KinectServer
|
KinectServer
|
||||||
\noun default
|
\noun default
|
||||||
can now be developed and tested using a fully functional display method.
|
can now be developed with the advantage of a fully functional display method
|
||||||
|
for debugging.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
The aim of this aspect of the project will be to alter the the
|
||||||
|
\noun on
|
||||||
|
KinectServer
|
||||||
|
\noun default
|
||||||
|
in order to allow the logical grouping of connected clients into sources
|
||||||
|
for separate display.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
When integrated together the server as a whole will then be able to collect
|
||||||
|
discrete point clouds from different sources and coherently display them
|
||||||
|
separately in the space, in doing so achieving the objectives for this
|
||||||
|
project3.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Subsection
|
||||||
|
Network Layer Design Considerations
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
Some thought as to the design for the network layer has been undertaken.
|
||||||
|
Although this has not yielded a final design for implementation, it has
|
||||||
|
made apparent some of the conditions and constraints which must be considered.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
When considering the initial steps for the project, it was thought that
|
||||||
|
the network layer should be developed first.
|
||||||
|
The design would involve separating much of the logic contained within
|
||||||
|
the
|
||||||
|
\noun on
|
||||||
|
KinectServer
|
||||||
|
\noun default
|
||||||
|
object into a new
|
||||||
|
\noun on
|
||||||
|
KinectSource
|
||||||
|
\noun default
|
||||||
|
object which would represent a group of clients acting as a single source.
|
||||||
|
It would function as a group of
|
||||||
|
\noun on
|
||||||
|
KinectSocket
|
||||||
|
\noun default
|
||||||
|
s that could be individually polled for new frames using the same interface
|
||||||
|
currently being used by the
|
||||||
|
\noun on
|
||||||
|
KinectServer
|
||||||
|
\noun default
|
||||||
|
.
|
||||||
|
The
|
||||||
|
\noun on
|
||||||
|
KinectServer
|
||||||
|
\noun default
|
||||||
|
object itself would be reduced to simply managing these
|
||||||
|
\noun on
|
||||||
|
KinectSource
|
||||||
|
\noun default
|
||||||
|
s.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
An advantage would be that additional objects which should exist per source
|
||||||
|
such as the calibration information and settings could then be contained
|
||||||
|
within.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
This would, however, have represented a significant architecture change
|
||||||
|
in the entire server application and without a functioning display method
|
||||||
|
would have been challenging to debug.
|
||||||
|
As a result, it was instead decided to work on the display method first.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
Coming back to the network design following this work, a different method
|
||||||
|
has been considered.
|
||||||
|
A separate piece of work currently being undertaken is investigating the
|
||||||
|
network behaviour of the suite with focus on unblocking the sockets to
|
||||||
|
aid in the parallel operation of the server.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
Considerations from this work in combination with an emphasis on minimalism
|
||||||
|
and simplicity has suggested a new approach.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Subsubsection
|
||||||
|
Socket Handshake
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
A handshake process has been suggested for when new clients connect to the
|
||||||
|
|
||||||
|
\noun on
|
||||||
|
KinectServer
|
||||||
|
\noun default
|
||||||
|
.
|
||||||
|
The aim is to implement the method by which clients are grouped into sources
|
||||||
|
but also to solve how clients identify themselves consistently when communicati
|
||||||
|
ng over multiple sockets.
|
||||||
|
Multiple sockets can be used by clients in order to make simultaneous connectio
|
||||||
|
ns to the server and increase bandwidth.
|
||||||
|
However when doing so it is important to be able to identify which sockets
|
||||||
|
represent which client.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
The proposed handshake would be initiated by the client when connecting
|
||||||
|
to the server, at this point they include which source they should be grouped
|
||||||
|
with using an integer ID.
|
||||||
|
The server groups the socket as such and, if one has not been received,
|
||||||
|
responds with a random identifier string that should be used across all
|
||||||
|
sockets to identify the client.
|
||||||
|
Should the newly connected socket be for a client that is already connected
|
||||||
|
then the client will respond with it's existing identifier to inform the
|
||||||
|
server that this ID has been ignored.
|
||||||
|
In doing so the client now has a method of identifying itself agnostic
|
||||||
|
of socket, and the server has a way of identifying the source which is
|
||||||
|
frame is representing.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Subsection
|
||||||
|
Deliverables and Additional Goals
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
At this point in the project it is worth considering the viability of the
|
||||||
|
final deliverables with relation to the time remaining.
|
||||||
|
Based on the work completed so far the original objectives of multi-source
|
||||||
|
holoportation remain viable with a round of complete testing defined and
|
||||||
|
employed.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
This testing suite is yet to be defined but will comprise performance evaluation
|
||||||
|
for both the network and display aspects of the software.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
Should the original specification be delivered and evaluated with time remaining
|
||||||
|
, additional goals and investigations should be examined.
|
||||||
|
Considering the design principle of network and presentation separation
|
||||||
|
in combination with the relevance of the technology to the spaces of AR
|
||||||
|
and VR, an interesting analysis could be the applicability of the multi-source
|
||||||
|
network developments to additional display methods.
|
||||||
|
Mobile AR and
|
||||||
|
\noun on
|
||||||
|
Hololens
|
||||||
|
\noun default
|
||||||
|
display for
|
||||||
|
\noun on
|
||||||
|
LiveScan
|
||||||
|
\noun default
|
||||||
|
have both been demonstrated and either could prove interesting when considered
|
||||||
|
in a multi-source context.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Subsection
|
||||||
|
Final Report Structure
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
The final report for the project will to an extent be based off of this
|
||||||
|
piece in terms of structure and content.
|
||||||
|
The literature review will be expanded to include an investigation of simultane
|
||||||
|
ous video streaming in order to contextualise the coming work on the network
|
||||||
|
layer of the application suite.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
A results section will describe the quantitative and qualitative results
|
||||||
|
of the final product, these will then be evaluated and discussed in the
|
||||||
|
discussion section.
|
||||||
|
At this point a discussion can also be had about further developments that
|
||||||
|
can be made, both to the
|
||||||
|
\noun on
|
||||||
|
LiveScan
|
||||||
|
\noun default
|
||||||
|
codebase but also to the final developed version of this project.
|
||||||
|
The structure will be as follows,
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Itemize
|
||||||
|
Title Page
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Itemize
|
||||||
|
Abstract
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Itemize
|
||||||
|
Table of Contents
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_deeper
|
||||||
|
\begin_layout Itemize
|
||||||
|
Including lists of figures, code listings
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_deeper
|
||||||
|
\begin_layout Itemize
|
||||||
|
Acknowledgements
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Itemize
|
||||||
|
Introduction
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Itemize
|
||||||
|
Literature Review
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Itemize
|
||||||
|
Methodology and Developments
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Itemize
|
||||||
|
Results
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Itemize
|
||||||
|
Discussion
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_deeper
|
||||||
|
\begin_layout Itemize
|
||||||
|
A description of further
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_deeper
|
||||||
|
\begin_layout Itemize
|
||||||
|
Conclusion
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Itemize
|
||||||
|
References
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Itemize
|
||||||
|
Appendices
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Section
|
\begin_layout Section
|
||||||
@ -1377,6 +1874,26 @@ Summary
|
|||||||
Conclusions
|
Conclusions
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
Roughly halfway through the time span of the project, one of two aspects
|
||||||
|
of the development has been completed.
|
||||||
|
The native display methods have been extended to meet the deliverable specifica
|
||||||
|
tion allowing the display of multiple sources while also allowing arbitrary
|
||||||
|
placement and orientation within the display space.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
From this point the network layer of the suite will be developed to also
|
||||||
|
match the specification, allowing clients to be grouped into sources for
|
||||||
|
polling and processing.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
Following the development of the two, testing methodologies will be defined
|
||||||
|
and carried out to gather quantitative results for the final product.
|
||||||
|
A final report on the results will be available in May 2020.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
\begin_inset Newpage pagebreak
|
\begin_inset Newpage pagebreak
|
||||||
\end_inset
|
\end_inset
|
||||||
@ -1396,9 +1913,71 @@ options "bibtotoc"
|
|||||||
|
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Section
|
||||||
\start_of_appendix
|
\start_of_appendix
|
||||||
\begin_inset FloatList figure
|
Existing Data Structures
|
||||||
|
\begin_inset CommandInset label
|
||||||
|
LatexCommand label
|
||||||
|
name "sec:Existing-Data-Structures"
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
\begin_inset CommandInset include
|
||||||
|
LatexCommand lstinputlisting
|
||||||
|
filename "../snippets/point2f.cs"
|
||||||
|
lstparams "language={[Sharp]C},keywordstyle={\\color{blue}},commentstyle={\\color{magenta}\\itshape},emphstyle={\\color{red}},basicstyle={\\ttfamily},stringstyle={\\color{green}},identifierstyle={\\color{cyan}},caption={Cartesian coordinate in 2 dimensions}"
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
\begin_inset CommandInset include
|
||||||
|
LatexCommand lstinputlisting
|
||||||
|
filename "../snippets/point3f.cs"
|
||||||
|
lstparams "language={[Sharp]C},keywordstyle={\\color{blue}},commentstyle={\\color{magenta}\\itshape},emphstyle={\\color{red}},basicstyle={\\ttfamily},stringstyle={\\color{green}},identifierstyle={\\color{cyan}},caption={Cartesian coordinate in 3 dimensions}"
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
\begin_inset CommandInset include
|
||||||
|
LatexCommand lstinputlisting
|
||||||
|
filename "/home/andy/uni/dissertation/snippets/affinetransform.cs"
|
||||||
|
lstparams "language={[Sharp]C},keywordstyle={\\color{blue}},commentstyle={\\color{magenta}\\itshape},emphstyle={\\color{red}},basicstyle={\\ttfamily},stringstyle={\\color{green}},identifierstyle={\\color{cyan}},caption={Affine transformation matrix with translation}"
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Section
|
||||||
|
New Data Structures
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Subsection
|
||||||
|
Frame
|
||||||
|
\begin_inset CommandInset label
|
||||||
|
LatexCommand label
|
||||||
|
name "subsec:Frame"
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
\begin_inset CommandInset include
|
||||||
|
LatexCommand lstinputlisting
|
||||||
|
filename "../snippets/frame.cs"
|
||||||
|
lstparams "language={[Sharp]C},keywordstyle={\\color{blue}},commentstyle={\\color{magenta}\\itshape},emphstyle={\\color{red}},basicstyle={\\ttfamily},stringstyle={\\color{green}},identifierstyle={\\color{cyan}},caption={Point cloud with Client ID}"
|
||||||
|
|
||||||
\end_inset
|
\end_inset
|
||||||
|
|
||||||
|
21
snippets/affinetransform.cs
Normal file
21
snippets/affinetransform.cs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
[Serializable]
|
||||||
|
public class AffineTransform
|
||||||
|
{
|
||||||
|
public float[,] R = new float[3, 3];
|
||||||
|
public float[] t = new float[3];
|
||||||
|
|
||||||
|
public AffineTransform()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < 3; j++)
|
||||||
|
{
|
||||||
|
if (i == j)
|
||||||
|
R[i, j] = 1;
|
||||||
|
else
|
||||||
|
R[i, j] = 0;
|
||||||
|
}
|
||||||
|
t[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
snippets/frame.cs
Normal file
21
snippets/frame.cs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
public struct Frame
|
||||||
|
{
|
||||||
|
public List<Single> Vertices;
|
||||||
|
public List<byte> RGB;
|
||||||
|
public List<Body> Bodies;
|
||||||
|
public int ClientID;
|
||||||
|
public List<AffineTransform> CameraPoses;
|
||||||
|
|
||||||
|
public Frame(List<Single> vertsin,
|
||||||
|
List<byte> rgbin,
|
||||||
|
List<Body> bodiesin,
|
||||||
|
int clientID,
|
||||||
|
List<AffineTransform> cameraPosesin)
|
||||||
|
{
|
||||||
|
Vertices = vertsin;
|
||||||
|
RGB = rgbin;
|
||||||
|
Bodies = bodiesin;
|
||||||
|
ClientID = clientID;
|
||||||
|
CameraPoses = cameraPosesin;
|
||||||
|
}
|
||||||
|
}
|
5
snippets/point2f.cs
Normal file
5
snippets/point2f.cs
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
public struct Point2f
|
||||||
|
{
|
||||||
|
public float X;
|
||||||
|
public float Y;
|
||||||
|
}
|
6
snippets/point3f.cs
Normal file
6
snippets/point3f.cs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
public struct Point3f
|
||||||
|
{
|
||||||
|
public float X;
|
||||||
|
public float Y;
|
||||||
|
public float Z;
|
||||||
|
}
|
225
uml.xmi
Normal file
225
uml.xmi
Normal file
@ -0,0 +1,225 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<XMI xmi.version="1.2" timestamp="2020-01-09T11:51:07" verified="false" xmlns:UML="http://schema.omg.org/spec/UML/1.4">
|
||||||
|
<XMI.header>
|
||||||
|
<XMI.documentation>
|
||||||
|
<XMI.exporter>umbrello uml modeller http://umbrello.kde.org</XMI.exporter>
|
||||||
|
<XMI.exporterVersion>1.6.17</XMI.exporterVersion>
|
||||||
|
<XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding>
|
||||||
|
</XMI.documentation>
|
||||||
|
<XMI.metamodel xmi.version="1.4" xmi.name="UML" href="UML.xml"/>
|
||||||
|
</XMI.header>
|
||||||
|
<XMI.content>
|
||||||
|
<UML:Model isAbstract="false" isRoot="false" isSpecification="false" isLeaf="false" name="UML Model" xmi.id="m1">
|
||||||
|
<UML:Namespace.ownedElement>
|
||||||
|
<UML:Stereotype isAbstract="false" namespace="m1" isRoot="false" isSpecification="false" isLeaf="false" name="folder" visibility="public" xmi.id="folder"/>
|
||||||
|
<UML:Model isAbstract="false" namespace="m1" isRoot="false" isSpecification="false" isLeaf="false" name="Logical View" visibility="public" xmi.id="Logical_View">
|
||||||
|
<UML:Namespace.ownedElement>
|
||||||
|
<UML:Package isAbstract="false" namespace="Logical_View" isRoot="false" isSpecification="false" isLeaf="false" stereotype="folder" name="Datatypes" visibility="public" xmi.id="Datatypes">
|
||||||
|
<UML:Namespace.ownedElement>
|
||||||
|
<UML:DataType isAbstract="false" namespace="Datatypes" isRoot="false" isSpecification="false" isLeaf="false" name="char" visibility="public" xmi.id="umQ1gd7KySohG"/>
|
||||||
|
<UML:DataType isAbstract="false" namespace="Datatypes" isRoot="false" isSpecification="false" isLeaf="false" name="int" visibility="public" xmi.id="uTkdgasJN2h9r"/>
|
||||||
|
<UML:DataType isAbstract="false" namespace="Datatypes" isRoot="false" isSpecification="false" isLeaf="false" name="float" visibility="public" xmi.id="u230h832IFUVe"/>
|
||||||
|
<UML:DataType isAbstract="false" namespace="Datatypes" isRoot="false" isSpecification="false" isLeaf="false" name="double" visibility="public" xmi.id="uoag5YafXFA0Q"/>
|
||||||
|
<UML:DataType isAbstract="false" namespace="Datatypes" isRoot="false" isSpecification="false" isLeaf="false" name="bool" visibility="public" xmi.id="uwobHw1bWitc3"/>
|
||||||
|
<UML:DataType isAbstract="false" namespace="Datatypes" isRoot="false" isSpecification="false" isLeaf="false" name="string" visibility="public" xmi.id="uZhco1lUZ1kZr"/>
|
||||||
|
<UML:DataType isAbstract="false" namespace="Datatypes" isRoot="false" isSpecification="false" isLeaf="false" name="unsigned char" visibility="public" xmi.id="uDonmdwIsj6Xy"/>
|
||||||
|
<UML:DataType isAbstract="false" namespace="Datatypes" isRoot="false" isSpecification="false" isLeaf="false" name="signed char" visibility="public" xmi.id="uM9ko77pAoGqK"/>
|
||||||
|
<UML:DataType isAbstract="false" namespace="Datatypes" isRoot="false" isSpecification="false" isLeaf="false" name="unsigned int" visibility="public" xmi.id="uD4Uhd4Fp0FJx"/>
|
||||||
|
<UML:DataType isAbstract="false" namespace="Datatypes" isRoot="false" isSpecification="false" isLeaf="false" name="signed int" visibility="public" xmi.id="ucignFRUodYVo"/>
|
||||||
|
<UML:DataType isAbstract="false" namespace="Datatypes" isRoot="false" isSpecification="false" isLeaf="false" name="short int" visibility="public" xmi.id="uCuywwehU488F"/>
|
||||||
|
<UML:DataType isAbstract="false" namespace="Datatypes" isRoot="false" isSpecification="false" isLeaf="false" name="unsigned short int" visibility="public" xmi.id="uXWiG4XXVNLWL"/>
|
||||||
|
<UML:DataType isAbstract="false" namespace="Datatypes" isRoot="false" isSpecification="false" isLeaf="false" name="signed short int" visibility="public" xmi.id="uaTQ5xXt1VNv5"/>
|
||||||
|
<UML:DataType isAbstract="false" namespace="Datatypes" isRoot="false" isSpecification="false" isLeaf="false" name="long int" visibility="public" xmi.id="ukRuKCG8qLgfr"/>
|
||||||
|
<UML:DataType isAbstract="false" namespace="Datatypes" isRoot="false" isSpecification="false" isLeaf="false" name="signed long int" visibility="public" xmi.id="uCHOx8tHpbCuX"/>
|
||||||
|
<UML:DataType isAbstract="false" namespace="Datatypes" isRoot="false" isSpecification="false" isLeaf="false" name="unsigned long int" visibility="public" xmi.id="u5VuF28teNiWr"/>
|
||||||
|
<UML:DataType isAbstract="false" namespace="Datatypes" isRoot="false" isSpecification="false" isLeaf="false" name="long double" visibility="public" xmi.id="uOxNyPWZlK3od"/>
|
||||||
|
<UML:DataType isAbstract="false" namespace="Datatypes" isRoot="false" isSpecification="false" isLeaf="false" name="wchar_t" visibility="public" xmi.id="uVGNIEbJt1IKg"/>
|
||||||
|
<UML:DataType isAbstract="false" namespace="Datatypes" elementReference="uO7zDjjYxINFn" isRoot="false" isSpecification="false" isLeaf="false" name="List<int>" visibility="public" xmi.id="uWz08NUG2qlde"/>
|
||||||
|
<UML:DataType isAbstract="false" namespace="Datatypes" elementReference="uIokMdu4uIbUl" isRoot="false" isSpecification="false" isLeaf="false" name="Dictionary<int, Frame>" visibility="public" xmi.id="ugrAjdQSZ3zEK"/>
|
||||||
|
<UML:DataType isAbstract="false" namespace="Datatypes" elementReference="uIokMdu4uIbUl" isRoot="false" isSpecification="false" isLeaf="false" name="Dictionary<int, ClientPosition>" visibility="public" xmi.id="uCMPSCxpbSoWO"/>
|
||||||
|
</UML:Namespace.ownedElement>
|
||||||
|
</UML:Package>
|
||||||
|
<UML:Package isAbstract="false" namespace="Logical_View" isRoot="false" isSpecification="false" isLeaf="false" name="KinectServer" visibility="public" xmi.id="u19qcYSAyRiGl">
|
||||||
|
<UML:Namespace.ownedElement>
|
||||||
|
<UML:Class isAbstract="false" namespace="u19qcYSAyRiGl" isRoot="false" isSpecification="false" isLeaf="false" name="DisplayFrameTransformer" visibility="public" xmi.id="ub6nu45G6GjUH">
|
||||||
|
<UML:Classifier.feature>
|
||||||
|
<UML:Attribute type="ugrAjdQSZ3zEK" isSpecification="false" name="ClientFrames" visibility="public" xmi.id="uMC82pGqHNMHK"/>
|
||||||
|
<UML:Attribute type="uCMPSCxpbSoWO" isSpecification="false" name="ClientOverrides" visibility="private" xmi.id="uL6vToKURazsM"/>
|
||||||
|
<UML:Attribute type="uTkdgasJN2h9r" isSpecification="false" name="ClientCount" visibility="public" xmi.id="usMhZqtMMHOtM"/>
|
||||||
|
<UML:Attribute type="uWz08NUG2qlde" isSpecification="false" name="ClientIDs" visibility="public" xmi.id="uRuVEu0vTU9PI"/>
|
||||||
|
<UML:Operation isAbstract="false" isRoot="false" isVirtual="false" isOverride="false" isSpecification="false" isLeaf="false" isQuery="false" isInline="false" name="GetDefaultRotationDegrees" visibility="private" xmi.id="uqwxofrr3KXgc">
|
||||||
|
<UML:BehavioralFeature.parameter>
|
||||||
|
<UML:Parameter type="u230h832IFUVe" kind="return" xmi.id="uBDfxLFWMJaVN"/>
|
||||||
|
<UML:Parameter type="uTkdgasJN2h9r" isSpecification="false" name="clientNumber" visibility="private" xmi.id="uTvDAkp6GdPJ5" value=""/>
|
||||||
|
</UML:BehavioralFeature.parameter>
|
||||||
|
</UML:Operation>
|
||||||
|
<UML:Operation isAbstract="false" isRoot="false" isVirtual="false" isOverride="false" isSpecification="false" isLeaf="false" isQuery="false" isInline="false" name="GetRotationMatrix" visibility="public" xmi.id="uLnFAyrmGhWHH">
|
||||||
|
<UML:BehavioralFeature.parameter>
|
||||||
|
<UML:Parameter type="uTkdgasJN2h9r" isSpecification="false" name="clientNumber" visibility="private" xmi.id="u9LENTbHiK2Jk" value=""/>
|
||||||
|
</UML:BehavioralFeature.parameter>
|
||||||
|
</UML:Operation>
|
||||||
|
<UML:Operation isAbstract="false" isRoot="false" isVirtual="false" isOverride="false" isSpecification="false" isLeaf="false" isQuery="false" isInline="false" name="GetClientTransform" visibility="public" xmi.id="u0DGwJIisERIc">
|
||||||
|
<UML:BehavioralFeature.parameter>
|
||||||
|
<UML:Parameter type="uTkdgasJN2h9r" isSpecification="false" name="clientNumber" visibility="private" xmi.id="uUjKQuxXvgTc5" value=""/>
|
||||||
|
</UML:BehavioralFeature.parameter>
|
||||||
|
</UML:Operation>
|
||||||
|
<UML:Operation isAbstract="false" isRoot="false" isVirtual="false" isOverride="false" isSpecification="false" isLeaf="false" isQuery="false" isInline="false" name="GetOverride" visibility="private" xmi.id="uNCe6czsiiwaY">
|
||||||
|
<UML:BehavioralFeature.parameter>
|
||||||
|
<UML:Parameter type="uTkdgasJN2h9r" isSpecification="false" name="clientNumber" visibility="private" xmi.id="uexc9o7GzjIdB" value=""/>
|
||||||
|
</UML:BehavioralFeature.parameter>
|
||||||
|
</UML:Operation>
|
||||||
|
<UML:Operation isAbstract="false" isRoot="false" isVirtual="false" isOverride="false" isSpecification="false" isLeaf="false" isQuery="false" isInline="false" name="RotateClient" visibility="public" xmi.id="ufhK9WUMCv5wA">
|
||||||
|
<UML:BehavioralFeature.parameter>
|
||||||
|
<UML:Parameter type="uTkdgasJN2h9r" isSpecification="false" name="clientNumber" visibility="private" xmi.id="umuRvR7Bh5da1" value=""/>
|
||||||
|
<UML:Parameter type="u230h832IFUVe" isSpecification="false" name="x" visibility="private" xmi.id="uflfXzFskqQ7o" value=""/>
|
||||||
|
<UML:Parameter type="u230h832IFUVe" isSpecification="false" name="y" visibility="private" xmi.id="uoLe0if6sEy8V" value=""/>
|
||||||
|
<UML:Parameter type="u230h832IFUVe" isSpecification="false" name="z" visibility="private" xmi.id="upHZoCARX9fD4" value=""/>
|
||||||
|
</UML:BehavioralFeature.parameter>
|
||||||
|
</UML:Operation>
|
||||||
|
<UML:Operation isAbstract="false" isRoot="false" isVirtual="false" isOverride="false" isSpecification="false" isLeaf="false" isQuery="false" isInline="false" name="TranslateClient" visibility="public" xmi.id="uuTwQCKjKr28P">
|
||||||
|
<UML:BehavioralFeature.parameter>
|
||||||
|
<UML:Parameter type="uTkdgasJN2h9r" isSpecification="false" name="clientNumber" visibility="private" xmi.id="uO1skQyE3l0MM" value=""/>
|
||||||
|
<UML:Parameter type="u230h832IFUVe" isSpecification="false" name="x" visibility="private" xmi.id="u8GNKj1HlMCbo" value=""/>
|
||||||
|
<UML:Parameter type="u230h832IFUVe" isSpecification="false" name="y" visibility="private" xmi.id="uKG5RHU1l6W73" value=""/>
|
||||||
|
<UML:Parameter type="u230h832IFUVe" isSpecification="false" name="z" visibility="private" xmi.id="uoCGpByFZASuN" value=""/>
|
||||||
|
</UML:BehavioralFeature.parameter>
|
||||||
|
</UML:Operation>
|
||||||
|
<UML:Operation isAbstract="false" isRoot="false" isVirtual="false" isOverride="false" isSpecification="false" isLeaf="false" isQuery="false" isInline="false" name="ResetClient" visibility="public" xmi.id="utVhAgxoks9bT">
|
||||||
|
<UML:BehavioralFeature.parameter>
|
||||||
|
<UML:Parameter type="uTkdgasJN2h9r" isSpecification="false" name="clientNumber" visibility="private" xmi.id="urnwkuB4n1uIE" value=""/>
|
||||||
|
</UML:BehavioralFeature.parameter>
|
||||||
|
</UML:Operation>
|
||||||
|
<UML:Operation isAbstract="false" isRoot="false" isVirtual="false" isOverride="false" isSpecification="false" isLeaf="false" isQuery="false" isInline="false" name="ResetAllClients" visibility="public" xmi.id="ugCyNhR9pQDSM"/>
|
||||||
|
</UML:Classifier.feature>
|
||||||
|
</UML:Class>
|
||||||
|
<UML:Class isAbstract="false" namespace="u19qcYSAyRiGl" isRoot="false" isSpecification="false" isLeaf="false" name="ClientPosition" visibility="public" xmi.id="uvGbQbt4isUyd">
|
||||||
|
<UML:Classifier.feature>
|
||||||
|
<UML:Attribute type="uTkdgasJN2h9r" isSpecification="false" name="ClientID" visibility="public" xmi.id="ubCJLiLRuNeJp"/>
|
||||||
|
<UML:Attribute type="u230h832IFUVe" isSpecification="false" name="rotationX" visibility="public" xmi.id="u2NxdUQTgPWPg"/>
|
||||||
|
<UML:Attribute type="u230h832IFUVe" isSpecification="false" name="rotationY" visibility="public" xmi.id="uMxXywbLE8e9O"/>
|
||||||
|
<UML:Attribute type="u230h832IFUVe" isSpecification="false" name="rotationZ" visibility="public" xmi.id="urpZ3f25l8JI7"/>
|
||||||
|
<UML:Attribute type="u230h832IFUVe" isSpecification="false" name="positionX" visibility="public" xmi.id="uJGegsG6KfIPl"/>
|
||||||
|
<UML:Attribute type="u230h832IFUVe" isSpecification="false" name="positionY" visibility="public" xmi.id="u2oElCsh77gjD"/>
|
||||||
|
<UML:Attribute type="u230h832IFUVe" isSpecification="false" name="positionZ" visibility="public" xmi.id="upNZLVp2KBLsg"/>
|
||||||
|
</UML:Classifier.feature>
|
||||||
|
</UML:Class>
|
||||||
|
<UML:Association namespace="u19qcYSAyRiGl" isSpecification="false" name="" visibility="public" xmi.id="uteNnkicq00Bt">
|
||||||
|
<UML:Association.connection>
|
||||||
|
<UML:AssociationEnd isNavigable="true" type="uvGbQbt4isUyd" isSpecification="false" aggregation="composite" name="" visibility="public" changeability="changeable" xmi.id="uNcp1570Gr8VR"/>
|
||||||
|
<UML:AssociationEnd isNavigable="true" type="ub6nu45G6GjUH" isSpecification="false" aggregation="none" name="" visibility="public" changeability="changeable" xmi.id="ugpMWzXReno9E"/>
|
||||||
|
</UML:Association.connection>
|
||||||
|
</UML:Association>
|
||||||
|
</UML:Namespace.ownedElement>
|
||||||
|
</UML:Package>
|
||||||
|
<UML:Class isAbstract="false" namespace="Logical_View" isRoot="false" isSpecification="false" isLeaf="false" name="List" visibility="public" xmi.id="uO7zDjjYxINFn"/>
|
||||||
|
<UML:Class isAbstract="false" namespace="Logical_View" isRoot="false" isSpecification="false" isLeaf="false" name="Dictionary" visibility="public" xmi.id="uIokMdu4uIbUl"/>
|
||||||
|
<UML:Association namespace="Logical_View" isSpecification="false" name="" visibility="public" xmi.id="u1lw94PSHiFox">
|
||||||
|
<UML:Association.connection>
|
||||||
|
<UML:AssociationEnd isNavigable="true" type="ub6nu45G6GjUH" isSpecification="false" aggregation="composite" name="" visibility="public" changeability="changeable" xmi.id="uIDTPi9LPI1JN"/>
|
||||||
|
<UML:AssociationEnd isNavigable="true" type="uvGbQbt4isUyd" isSpecification="false" aggregation="none" name="" visibility="public" changeability="changeable" xmi.id="uSpyA0DjaGP3N"/>
|
||||||
|
</UML:Association.connection>
|
||||||
|
</UML:Association>
|
||||||
|
</UML:Namespace.ownedElement>
|
||||||
|
<XMI.extension xmi.extender="umbrello">
|
||||||
|
<diagrams resolution="96">
|
||||||
|
<diagram snapgrid="1" showattribassocs="1" isopen="1" showpubliconly="0" canvasheight="225" documentation="" showscope="1" localid="-1" backgroundcolor="#ffffff" snapy="25" fillcolor="#ffff00" griddotcolor="#d3d3d3" showpackage="1" xmi.id="uC4AVDoHjzxC4" showstereotype="1" textcolor="#000000" showatts="1" linecolor="#ff0000" canvaswidth="625" linewidth="0" showattsig="1" showopsig="1" showgrid="1" showops="1" snapcsgrid="1" zoom="86" type="1" snapx="25" usefillcolor="1" font="Cantarell,10,-1,5,50,0,0,0,0,0" name="DisplayFrameTransformer">
|
||||||
|
<widgets>
|
||||||
|
<classwidget isinstance="0" showpubliconly="0" localid="u036HZerfK563" showscope="1" x="700" fillcolor="#ffff00" height="225" showpackage="1" xmi.id="ub6nu45G6GjUH" showoperations="1" showstereotype="1" showopsigs="601" textcolor="#000000" linecolor="#ff0000" linewidth="0" showattributes="1" showattsigs="601" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" autoresize="0" y="-4625" width="375" usefillcolor="1" font="Cantarell,10,-1,5,50,0,0,0,0,0"/>
|
||||||
|
<classwidget isinstance="0" showpubliconly="0" localid="uXFs7WVK5827N" showscope="1" x="1125" fillcolor="#ffff00" height="150" showpackage="1" xmi.id="uvGbQbt4isUyd" showoperations="0" showstereotype="1" showopsigs="601" textcolor="#000000" linecolor="#ff0000" linewidth="0" showattributes="1" showattsigs="601" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" autoresize="0" y="-4600" width="200" usefillcolor="1" font="Cantarell,10,-1,5,50,0,0,0,0,0"/>
|
||||||
|
</widgets>
|
||||||
|
<messages/>
|
||||||
|
<associations>
|
||||||
|
<assocwidget indexb="1" widgetaid="ub6nu45G6GjUH" totalcountb="2" localid="uqEv4alXWPEFX" totalcounta="2" seqnum="" fillcolor="none" xmi.id="u1lw94PSHiFox" textcolor="none" widgetbid="uvGbQbt4isUyd" linecolor="#ff0000" linewidth="0" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" autoresize="1" indexa="1" type="510" usefillcolor="1" font="Cantarell,10,-1,5,50,0,0,0,0,0">
|
||||||
|
<linepath layout="Direct">
|
||||||
|
<startpoint startx="1075" starty="-4523.26"/>
|
||||||
|
<endpoint endy="-4523.26" endx="1127.33"/>
|
||||||
|
</linepath>
|
||||||
|
</assocwidget>
|
||||||
|
</associations>
|
||||||
|
</diagram>
|
||||||
|
</diagrams>
|
||||||
|
</XMI.extension>
|
||||||
|
</UML:Model>
|
||||||
|
<UML:Model isAbstract="false" namespace="m1" isRoot="false" isSpecification="false" isLeaf="false" name="Use Case View" visibility="public" xmi.id="Use_Case_View">
|
||||||
|
<UML:Namespace.ownedElement/>
|
||||||
|
</UML:Model>
|
||||||
|
<UML:Model isAbstract="false" namespace="m1" isRoot="false" isSpecification="false" isLeaf="false" name="Component View" visibility="public" xmi.id="Component_View">
|
||||||
|
<UML:Namespace.ownedElement/>
|
||||||
|
</UML:Model>
|
||||||
|
<UML:Model isAbstract="false" namespace="m1" isRoot="false" isSpecification="false" isLeaf="false" name="Deployment View" visibility="public" xmi.id="Deployment_View">
|
||||||
|
<UML:Namespace.ownedElement/>
|
||||||
|
</UML:Model>
|
||||||
|
<UML:Model isAbstract="false" namespace="m1" isRoot="false" isSpecification="false" isLeaf="false" name="Entity Relationship Model" visibility="public" xmi.id="Entity_Relationship_Model">
|
||||||
|
<UML:Namespace.ownedElement/>
|
||||||
|
</UML:Model>
|
||||||
|
</UML:Namespace.ownedElement>
|
||||||
|
</UML:Model>
|
||||||
|
</XMI.content>
|
||||||
|
<XMI.extensions xmi.extender="umbrello">
|
||||||
|
<docsettings documentation="" uniqueid="uCvickb6EJ72c" viewid="uC4AVDoHjzxC4"/>
|
||||||
|
<listview>
|
||||||
|
<listitem type="800" id="Views" open="1">
|
||||||
|
<listitem type="821" id="Component_View" open="1"/>
|
||||||
|
<listitem type="827" id="Deployment_View" open="1"/>
|
||||||
|
<listitem type="836" id="Entity_Relationship_Model" open="1"/>
|
||||||
|
<listitem type="801" id="Logical_View" open="1">
|
||||||
|
<listitem type="830" id="Datatypes" open="0">
|
||||||
|
<listitem type="829" id="uwobHw1bWitc3" open="0"/>
|
||||||
|
<listitem type="829" id="umQ1gd7KySohG" open="0"/>
|
||||||
|
<listitem type="829" id="uCMPSCxpbSoWO" open="1"/>
|
||||||
|
<listitem type="829" id="ugrAjdQSZ3zEK" open="1"/>
|
||||||
|
<listitem type="829" id="uoag5YafXFA0Q" open="0"/>
|
||||||
|
<listitem type="829" id="u230h832IFUVe" open="0"/>
|
||||||
|
<listitem type="829" id="uTkdgasJN2h9r" open="0"/>
|
||||||
|
<listitem type="829" id="uWz08NUG2qlde" open="1"/>
|
||||||
|
<listitem type="829" id="uOxNyPWZlK3od" open="0"/>
|
||||||
|
<listitem type="829" id="ukRuKCG8qLgfr" open="0"/>
|
||||||
|
<listitem type="829" id="uCuywwehU488F" open="0"/>
|
||||||
|
<listitem type="829" id="uM9ko77pAoGqK" open="0"/>
|
||||||
|
<listitem type="829" id="ucignFRUodYVo" open="0"/>
|
||||||
|
<listitem type="829" id="uCHOx8tHpbCuX" open="0"/>
|
||||||
|
<listitem type="829" id="uaTQ5xXt1VNv5" open="0"/>
|
||||||
|
<listitem type="829" id="uZhco1lUZ1kZr" open="0"/>
|
||||||
|
<listitem type="829" id="uDonmdwIsj6Xy" open="0"/>
|
||||||
|
<listitem type="829" id="uD4Uhd4Fp0FJx" open="0"/>
|
||||||
|
<listitem type="829" id="u5VuF28teNiWr" open="0"/>
|
||||||
|
<listitem type="829" id="uXWiG4XXVNLWL" open="0"/>
|
||||||
|
<listitem type="829" id="uVGNIEbJt1IKg" open="0"/>
|
||||||
|
</listitem>
|
||||||
|
<listitem type="813" id="uIokMdu4uIbUl" open="1"/>
|
||||||
|
<listitem label="DisplayFrameTransformer" type="807" id="uC4AVDoHjzxC4" open="0"/>
|
||||||
|
<listitem type="818" id="u19qcYSAyRiGl" open="1">
|
||||||
|
<listitem type="813" id="uvGbQbt4isUyd" open="0">
|
||||||
|
<listitem type="814" id="ubCJLiLRuNeJp" open="0"/>
|
||||||
|
<listitem type="814" id="uJGegsG6KfIPl" open="0"/>
|
||||||
|
<listitem type="814" id="u2oElCsh77gjD" open="0"/>
|
||||||
|
<listitem type="814" id="upNZLVp2KBLsg" open="0"/>
|
||||||
|
<listitem type="814" id="u2NxdUQTgPWPg" open="0"/>
|
||||||
|
<listitem type="814" id="uMxXywbLE8e9O" open="0"/>
|
||||||
|
<listitem type="814" id="urpZ3f25l8JI7" open="0"/>
|
||||||
|
</listitem>
|
||||||
|
<listitem type="813" id="ub6nu45G6GjUH" open="1">
|
||||||
|
<listitem type="814" id="usMhZqtMMHOtM" open="0"/>
|
||||||
|
<listitem type="814" id="uMC82pGqHNMHK" open="0"/>
|
||||||
|
<listitem type="814" id="uRuVEu0vTU9PI" open="0"/>
|
||||||
|
<listitem type="814" id="uL6vToKURazsM" open="0"/>
|
||||||
|
<listitem type="815" id="u0DGwJIisERIc" open="0"/>
|
||||||
|
<listitem type="815" id="uqwxofrr3KXgc" open="0"/>
|
||||||
|
<listitem type="815" id="uNCe6czsiiwaY" open="0"/>
|
||||||
|
<listitem type="815" id="uLnFAyrmGhWHH" open="0"/>
|
||||||
|
<listitem type="815" id="ugCyNhR9pQDSM" open="0"/>
|
||||||
|
<listitem type="815" id="utVhAgxoks9bT" open="0"/>
|
||||||
|
<listitem type="815" id="ufhK9WUMCv5wA" open="0"/>
|
||||||
|
<listitem type="815" id="uuTwQCKjKr28P" open="0"/>
|
||||||
|
</listitem>
|
||||||
|
</listitem>
|
||||||
|
<listitem type="813" id="uO7zDjjYxINFn" open="1"/>
|
||||||
|
</listitem>
|
||||||
|
<listitem type="802" id="Use_Case_View" open="1"/>
|
||||||
|
</listitem>
|
||||||
|
</listview>
|
||||||
|
<codegeneration>
|
||||||
|
<codegenerator language="C++"/>
|
||||||
|
</codegeneration>
|
||||||
|
</XMI.extensions>
|
||||||
|
</XMI>
|
Loading…
Reference in New Issue
Block a user