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
|
||||
\inputencoding auto
|
||||
\fontencoding global
|
||||
\font_roman "default" "default"
|
||||
\font_roman "utopia" "default"
|
||||
\font_sans "default" "default"
|
||||
\font_typewriter "default" "default"
|
||||
\font_math "auto" "auto"
|
||||
@ -167,7 +167,22 @@ University of Surrey
|
||||
\end_layout
|
||||
|
||||
\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
|
||||
|
||||
\begin_layout Standard
|
||||
@ -177,6 +192,24 @@ LatexCommand tableofcontents
|
||||
\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
|
||||
|
||||
\begin_layout List of TODOs
|
||||
@ -477,7 +510,7 @@ Worlds in Miniature
|
||||
\end_layout
|
||||
|
||||
\begin_layout Standard
|
||||
The Worlds in Miniature is described in the paper
|
||||
The Worlds in Miniature is described in
|
||||
\begin_inset CommandInset citation
|
||||
LatexCommand cite
|
||||
key "wim"
|
||||
@ -488,9 +521,8 @@ literal "false"
|
||||
as a set of interfaces between the user and the virtual space they experience
|
||||
using tactile and visual tools.
|
||||
The interface involves providing the user with a miniature render of the
|
||||
world they are inhabiting.
|
||||
This model can interacted with in order to affect the full scale environment
|
||||
around them.
|
||||
world they are inhabiting that can interacted with in order to affect the
|
||||
full scale environment around them.
|
||||
\end_layout
|
||||
|
||||
\begin_layout Standard
|
||||
@ -715,7 +747,7 @@ status open
|
||||
\begin_inset Caption Standard
|
||||
|
||||
\begin_layout Plain Layout
|
||||
Initial structure of the
|
||||
Initial architecture of the
|
||||
\noun on
|
||||
LiveScan3D
|
||||
\noun default
|
||||
@ -787,11 +819,19 @@ The required development to take the existing
|
||||
\noun on
|
||||
LiveScan
|
||||
\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
|
||||
|
||||
\begin_layout Standard
|
||||
The network layer of the
|
||||
\begin_layout Labeling
|
||||
\labelwidthstring 00.00.0000
|
||||
|
||||
\series bold
|
||||
\emph on
|
||||
Network
|
||||
\series default
|
||||
\emph default
|
||||
The network layer of the
|
||||
\noun on
|
||||
LiveScan
|
||||
\noun default
|
||||
@ -807,8 +847,15 @@ sources
|
||||
for which separate frames are collected for display.
|
||||
\end_layout
|
||||
|
||||
\begin_layout Standard
|
||||
Finally the display element of the server should be extended to allow the
|
||||
\begin_layout Labeling
|
||||
\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.
|
||||
These objects should be individually arrangeable in the display space allowing
|
||||
both movement and rotation.
|
||||
@ -821,9 +868,8 @@ OpenGL
|
||||
\noun default
|
||||
window, has been modified such that it can construct and render point clouds
|
||||
from multiple sources.
|
||||
To do so a dynamic sub-system of geometric transformations has been included
|
||||
such that the renders of individual sources are arranged coherently within
|
||||
the space when reconstructed.
|
||||
To do so a dynamic sub-system of geometric transformations has been written
|
||||
in order to coherently arrange sources within the space when reconstructed.
|
||||
The default arrangements can be overridden with keyboard controls facilitating
|
||||
arbitrary placement and rotation of separate sources within the
|
||||
\noun on
|
||||
@ -853,7 +899,18 @@ Point3f
|
||||
Point2f
|
||||
\noun default
|
||||
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
|
||||
|
||||
\begin_layout Standard
|
||||
@ -942,9 +999,9 @@ Separation of Network and Presentation Layer
|
||||
|
||||
\begin_layout Standard
|
||||
During initial testing frames received from a live sensor were intercepted
|
||||
and serialized to XML files in local storage.
|
||||
These frames were loaded back as the server started and the values were
|
||||
merged with those received live before display.
|
||||
and serialized to XML in local storage.
|
||||
These frames were loaded into memory as the server was started and merged
|
||||
with those received live before display.
|
||||
\end_layout
|
||||
|
||||
\begin_layout Standard
|
||||
@ -983,7 +1040,7 @@ status open
|
||||
\begin_inset Caption Standard
|
||||
|
||||
\begin_layout Plain Layout
|
||||
Initial composite testing frame
|
||||
Initial multi-source composite testing frame
|
||||
\begin_inset CommandInset label
|
||||
LatexCommand label
|
||||
name "fig:Initial-composite-frame"
|
||||
@ -1005,10 +1062,11 @@ name "fig:Initial-composite-frame"
|
||||
|
||||
\begin_layout Standard
|
||||
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
|
||||
geometric transformations like those mentioned above were employed.
|
||||
This can be seen in figure
|
||||
geometric transformations like those mentioned above were employed to separate
|
||||
the two.
|
||||
The change in software structure at this stage can be seen in figure
|
||||
\begin_inset CommandInset ref
|
||||
LatexCommand ref
|
||||
reference "fig:Initial-testing-layout"
|
||||
@ -1105,7 +1163,7 @@ status open
|
||||
\begin_inset Caption Standard
|
||||
|
||||
\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$
|
||||
\end_inset
|
||||
|
||||
@ -1157,17 +1215,18 @@ OpenGL
|
||||
Microsoft Hololens
|
||||
\noun default
|
||||
and Mobile AR applications.
|
||||
Therefore when designing the multi-source capabilities the separation of
|
||||
logic between the network and presentation layer will be important.
|
||||
Therefore when designing the multi-source capabilities, the separation
|
||||
of logic between the network and presentation layer is important.
|
||||
The way in which the
|
||||
\noun on
|
||||
OpenGL
|
||||
\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
|
||||
OpenGL
|
||||
\noun default
|
||||
window.
|
||||
window itself.
|
||||
The network layer should be display agnostic and not make assumptions about
|
||||
how the display will process figures.
|
||||
\end_layout
|
||||
@ -1188,8 +1247,19 @@ MainWindow
|
||||
OpenGL
|
||||
\noun default
|
||||
were changed.
|
||||
The Frame structure was defined to wrap an individual point cloud with
|
||||
a client ID to allow differentiation.
|
||||
A Frame structure was defined to wrap an individual point cloud with a
|
||||
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 two objects including a list of vertices or co-ordinates and the RGB
|
||||
values for each as well as the camera poses and bodies.
|
||||
@ -1200,9 +1270,12 @@ The original
|
||||
\noun on
|
||||
LiveScan3D
|
||||
\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
|
||||
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
|
||||
|
||||
\begin_layout Standard
|
||||
@ -1240,7 +1313,67 @@ DisplayFrameTransformer
|
||||
\noun on
|
||||
OpenGL
|
||||
\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
|
||||
|
||||
\begin_layout Standard
|
||||
@ -1249,7 +1382,7 @@ Each client is assigned a default transformation which can be overridden
|
||||
\end_layout
|
||||
|
||||
\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.
|
||||
This is done by retrieving a transformation for a rotation in the
|
||||
\begin_inset Formula $y$
|
||||
@ -1294,9 +1427,24 @@ DisplayFrameTransformer
|
||||
also has methods to override these initial transforms with the RotateClient()
|
||||
and TranslateClient() methods.
|
||||
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.
|
||||
From here the presence of a client override leads returned transforms to
|
||||
be defined by these values instead.
|
||||
defining the position and rotation is populated using the default rotation.
|
||||
From here the presence of a client override results in applied transforms
|
||||
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
|
||||
|
||||
\begin_layout Standard
|
||||
@ -1353,6 +1501,112 @@ name "fig:current-state-diagram"
|
||||
|
||||
\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
|
||||
Future Work
|
||||
\end_layout
|
||||
@ -1366,7 +1620,250 @@ OpenGL
|
||||
\noun on
|
||||
KinectServer
|
||||
\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
|
||||
|
||||
\begin_layout Section
|
||||
@ -1377,6 +1874,26 @@ Summary
|
||||
Conclusions
|
||||
\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_inset Newpage pagebreak
|
||||
\end_inset
|
||||
@ -1396,9 +1913,71 @@ options "bibtotoc"
|
||||
|
||||
\end_layout
|
||||
|
||||
\begin_layout Standard
|
||||
\begin_layout Section
|
||||
\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
|
||||
|
||||
|
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