vulkan-project/project_virtual_strategies.uxf

1035 lines
23 KiB
Plaintext
Raw Normal View History

2022-11-14 22:57:45 +01:00
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<diagram program="umlet" version="15.0.0">
<zoom_level>9</zoom_level>
<element>
<id>UMLClass</id>
<coordinates>
<x>1143</x>
<y>909</y>
<w>333</w>
<h>63</h>
</coordinates>
<panel_attributes>2D Renderer
--
draw(vertices, indices, textureAtlasIndex)
draw(vertices, indices)
bg=BLUE
style=autoresize</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>855</x>
<y>1503</y>
<w>405</w>
<h>126</h>
</coordinates>
<panel_attributes>Rectangle
--
+ draw()
+ setters(val, updateStrategy=true)
+ getters(): const&amp;
--
- vec2 size
- vec2 pos
- drawStrategy: unique_ptr&lt;DrawStrategy&lt;Rectangle&gt; &gt;
style=autoresize
bg=GRAY
group=group-7</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>288</x>
<y>1368</y>
<w>144</w>
<h>81</h>
</coordinates>
<panel_attributes>FontManager
--
- fonts[]: Font
- lib: FT_Library
style=autoresize</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>855</x>
<y>1710</y>
<w>369</w>
<h>126</h>
</coordinates>
<panel_attributes>Text
--
+ Text(string&amp;, DrawStrategy&amp;&amp;)
+ draw()
+ setters(val, updateStrategy=true)
+ getters(): const&amp;
--
- string text
- drawStrategy: unique_ptr&lt;DrawStrategy&lt;Text&gt; &gt;
style=autoresize
bg=GRAY
group=group-7</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>540</x>
<y>1575</y>
<w>333</w>
<h>162</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>10.0;10.0;350.0;160.0</additional_attributes>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>1260</x>
<y>693</y>
<w>126</w>
<h>36</h>
</coordinates>
<panel_attributes>VulkanInstance
bg=BLUE
style=autoresize</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>1296</x>
<y>720</y>
<w>72</w>
<h>207</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>60.0;10.0;10.0;210.0</additional_attributes>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>360</x>
<y>1539</y>
<w>189</w>
<h>63</h>
</coordinates>
<panel_attributes>Font
--
- face: FT_Face
- charInfos[]: CharInfo
style=autoresize</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>576</x>
<y>1377</y>
<w>180</w>
<h>99</h>
</coordinates>
<panel_attributes>TextDS
--
+ draw()
+ update(const Text&amp;)
--
- buffer: VIBuffer
- Renderer2D&amp; renderer
bg=BLUE
style=autoresize</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLNote</id>
<coordinates>
<x>0</x>
<y>630</y>
<w>369</w>
<h>162</h>
</coordinates>
<panel_attributes>/Target code/
using Drawable = std::variant&lt;Text, Rectangle&gt;
std::vector&lt;Drawable&gt; shapes;
shapes.emplace_back(Rectangle((5, 5), (42, 42),
TextDrawStrategy(renderer);
);
for (shape : shapes) {
shape.draw();
}
style=autoresize
bg=DARK_GRAY</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLNote</id>
<coordinates>
<x>855</x>
<y>1899</y>
<w>396</w>
<h>90</h>
</coordinates>
<panel_attributes>*Drawables have strategies*
+ very extendable
- complicated object creation
- possible lifetime issues with renderer references
- heavy use of virtual functions
style=autoresize
bg=RED
group=group-7</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>1251</x>
<y>963</y>
<w>63</w>
<h>180</h>
</coordinates>
<panel_attributes>lt=-&gt;</panel_attributes>
<additional_attributes>10.0;180.0;50.0;10.0</additional_attributes>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>540</x>
<y>1206</y>
<w>225</w>
<h>99</h>
</coordinates>
<panel_attributes>RectangleColoredDS
--
+ draw()
+ update(const Rect&amp;)
--
- buffer: VIBuffer
- const Renderer2D&amp; renderer
bg=BLUE
style=autoresize</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>1251</x>
<y>1548</y>
<w>162</w>
<h>36</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;&lt;&lt;-
or child class</panel_attributes>
<additional_attributes>10.0;20.0;160.0;20.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>738</x>
<y>1440</y>
<w>162</w>
<h>288</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;&lt;&lt;&lt;-</panel_attributes>
<additional_attributes>17.0;10.0;160.0;301.0</additional_attributes>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>1422</x>
<y>1755</y>
<w>225</w>
<h>99</h>
</coordinates>
<panel_attributes>template=T: StrategyFor
PrintDrawStrategy
--
+ draw()
+ update(const T&amp;)
--
- tAsString: string
style=autoresize</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>513</x>
<y>1098</y>
<w>252</w>
<h>81</h>
</coordinates>
<panel_attributes>RectangleTexturedVkDS
--
+ draw(): void
+ update(Rectangle&amp;): void
- setTextureCoordinates(): void
style=autoresize</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>756</x>
<y>1269</y>
<w>81</w>
<h>27</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;&lt;&lt;&lt;-</panel_attributes>
<additional_attributes>10.0;10.0;70.0;10.0</additional_attributes>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>117</x>
<y>1593</y>
<w>135</w>
<h>63</h>
</coordinates>
<panel_attributes>CharInfo
--
- topLeft: vec2
- botRight: vec2
style=autoresize</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>1395</x>
<y>1530</y>
<w>243</w>
<h>81</h>
</coordinates>
<panel_attributes>template=T: StrategyFor
/DrawStrategy/
--
+ draw() = 0
+ update(const T&amp;) = 0
style=autoresize</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>1494</x>
<y>1602</y>
<w>27</w>
<h>180</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;-</panel_attributes>
<additional_attributes>10.0;10.0;10.0;180.0</additional_attributes>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>1053</x>
<y>1125</y>
<w>396</w>
<h>243</h>
</coordinates>
<panel_attributes>VulkanDS
--
# vertices: Vertex2D[]
# indices: uint32_t[]
# vertexBufferInfo: BufferInfo
# indexBufferInfo: BufferInfo
# renderer: Renderer2D&amp;
# bufferManager: BufferManager&lt;Vertex2D, uint32_t&gt;&amp;
--
+ getVertices(): Vertex2D[]
+ getIndices(): uint32_t[]
+ getVertexBufferInfo(): BufferInfo&amp;
+ getIndexBufferInfo(): BufferInfo&amp;
+ setIndexOffset(uint32_t): void
+ normalizeVertices(float, float): void
+ buffersInitalized(): bool
# updateBufferInfos(): void
style=autoresize</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>1737</x>
<y>369</y>
<w>216</w>
<h>99</h>
</coordinates>
<panel_attributes>MemoryInfo
--
+ memory: vk::DeviceMemory
+ offset: vk::DeviceSize
+ memoryTypeIndex: uint32_t
style=autoresize
group=group-1
bg=GREEN</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>1737</x>
<y>504</y>
<w>621</w>
<h>90</h>
</coordinates>
<panel_attributes>VulkanAllocator
--
- memory: DeviceMemory[]
--
+ allocate(vk::MemoryAllocateInfo&amp;, vk::MemoryRequirements2&amp;, MemoryInfo&amp;): void
+ free(MemoryInfo&amp;): void
style=autoresize
group=group-1
bg=GREEN</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>2043</x>
<y>297</y>
<w>306</w>
<h>126</h>
</coordinates>
<panel_attributes>DeviceMemory
--
+ DeviceMemory:
+ DeviceMemory(vk::DeviceSize):
+ size: vk::DeviceSize
+ memory: vk::DeviceMemory
+ dynBlockAllocator: DynBlockAllocator
style=autoresize
group=group-1
bg=GREEN</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>2169</x>
<y>414</y>
<w>108</w>
<h>108</h>
</coordinates>
<panel_attributes>lt=-
m1=*
m2=1
&lt; allocates
group=group-1
bg=GREEN</panel_attributes>
<additional_attributes>10.0;10.0;10.0;100.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>1944</x>
<y>387</y>
<w>126</w>
<h>45</h>
</coordinates>
<panel_attributes>lt=-[dBA]
m1=1..n
m2=1
manages
group=group-1
bg=GREEN</panel_attributes>
<additional_attributes>10.0;20.0;110.0;20.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>1377</x>
<y>567</y>
<w>378</w>
<h>162</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;&lt;&lt;&lt;-</panel_attributes>
<additional_attributes>10.0;160.0;400.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>1773</x>
<y>585</y>
<w>27</w>
<h>315</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>10.0;10.0;10.0;330.0</additional_attributes>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>621</x>
<y>1692</y>
<w>90</w>
<h>180</h>
</coordinates>
<panel_attributes>b
group=group-5</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>351</x>
<y>1692</y>
<w>90</w>
<h>180</h>
</coordinates>
<panel_attributes>a
group=group-5</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>432</x>
<y>1701</y>
<w>207</w>
<h>36</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;-
b inherits from a
group=group-5</panel_attributes>
<additional_attributes>10.0;20.0;210.0;20.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>432</x>
<y>1737</y>
<w>207</w>
<h>36</h>
</coordinates>
<panel_attributes>lt=&lt;-
b is associated with a
group=group-5</panel_attributes>
<additional_attributes>10.0;20.0;210.0;20.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>432</x>
<y>1773</y>
<w>207</w>
<h>36</h>
</coordinates>
<panel_attributes>lt=&lt;.
b depends on a
group=group-5</panel_attributes>
<additional_attributes>10.0;20.0;210.0;20.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>432</x>
<y>1845</y>
<w>207</w>
<h>54</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;&lt;&lt;&lt;-
composition
a creates b
and b needs a
group=group-5</panel_attributes>
<additional_attributes>10.0;20.0;210.0;20.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>432</x>
<y>1800</y>
<w>207</w>
<h>54</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;&lt;&lt;-
aggregation
a creates b
b can live without a
group=group-5</panel_attributes>
<additional_attributes>10.0;20.0;210.0;20.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>1440</x>
<y>981</y>
<w>333</w>
<h>198</h>
</coordinates>
<panel_attributes>lt=&lt;-
m1=1
m2=1
gets buffer from</panel_attributes>
<additional_attributes>350.0;10.0;10.0;200.0</additional_attributes>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>720</x>
<y>900</y>
<w>306</w>
<h>126</h>
</coordinates>
<panel_attributes>VulkanTexturedDS
--
# texture: Texture
# textureAtlasIndex: TextureAtlasIndex
# textureManager: TextureManager&amp;
--
+ getTexture(): Texture&amp;
+ getTexureAtlasIndex(): uint32_t
style=autoresize
</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>486</x>
<y>360</y>
<w>630</w>
<h>216</h>
</coordinates>
<panel_attributes>TextureManager
--
- atlases: TextureAtlas[]
- textures: unordered_string_map&lt;Texture&gt;
- textureInfos: TextureInfo[]
--
+ getTexture(std::string&amp;): Texture
+ setTexCoords(Texture&amp;, glm::vec2&amp;): void
+ getDescriptorSet: vk::DescriptorSet&amp;
+ getDescriptorSetLayout: vk::DescriptorSetLayout&amp;
+ getTextureAtlas(Texture&amp;): TextureAtlas&amp;
+ getTextureAtlasIndex(Texture&amp;): TextureAtlasIndex
+ getAtlasCount: uint32_t
+ addAtlas(uint16_t, uint16_t, uint16_t, uint16_t, vk::Format): TextureAtlasIndex
- loadTextureFromFile(std::string&amp;): Texture
style=autoresize
group=group-4
bg=YELLOW</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>594</x>
<y>54</y>
<w>522</w>
<h>234</h>
</coordinates>
<panel_attributes>TextureAtlas
--
- imageFormat: vk::Format
- textureImage: vk::Image
- textureImageMemory: MemoryInfo
- textureImageView: vk::ImageView
- textureSampler: vk::Sampler
- freeAreas: TextureImageAreas[]
- slotWidth: uint16_t
- slotHeight: uint16_t
- slotCountX: uint16_t
- slotCountY: uint16_t
--
+ addTexture(uint8_t*, uint16_t, uint16_t, uint8_t): { vec2, vec2 }
+ getTextureImageView(): vk::ImageView&amp;
+ getTextureSampler(): vk::Sampler&amp;
style=autoresize
group=group-4
bg=YELLOW</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>702</x>
<y>648</y>
<w>252</w>
<h>108</h>
</coordinates>
<panel_attributes>TextureInfo
--
+ atlas: TextureAtlasIndex
+ texCoordTopLeft: glm::vec2
+ texCoordBottomRight: glm::vec2
style=autoresize
group=group-4
bg=YELLOW</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLPackage</id>
<coordinates>
<x>1728</x>
<y>270</y>
<w>648</w>
<h>342</h>
</coordinates>
<panel_attributes>vulkan memory allocation
layer=-1
group=group-1
bg=GREEN</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLPackage</id>
<coordinates>
<x>468</x>
<y>0</y>
<w>666</w>
<h>774</h>
</coordinates>
<panel_attributes>vulkan textures
group=group-4
bg=YELLOW</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>900</x>
<y>279</y>
<w>36</w>
<h>99</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;&lt;&lt;-
m1=1
m2=*
group=group-4
bg=YELLOW</panel_attributes>
<additional_attributes>10.0;90.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>1107</x>
<y>531</y>
<w>225</w>
<h>180</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>230.0;180.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>1107</x>
<y>243</y>
<w>243</w>
<h>468</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>250.0;500.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>729</x>
<y>567</y>
<w>81</w>
<h>99</h>
</coordinates>
<panel_attributes>lt=-
m1=1..n
m2=1
manages
group=group-4
bg=YELLOW</panel_attributes>
<additional_attributes>10.0;90.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>1107</x>
<y>198</y>
<w>639</w>
<h>216</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>690.0;220.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>1899</x>
<y>810</y>
<w>90</w>
<h>90</h>
</coordinates>
<panel_attributes>lt=&lt;-
m1=*
m2=1
&lt; manages
bg=ORANGE
group=group-3</panel_attributes>
<additional_attributes>10.0;10.0;10.0;80.0</additional_attributes>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>1755</x>
<y>873</y>
<w>729</w>
<h>144</h>
</coordinates>
<panel_attributes>template=VertexT: VertexType, IndexT: SupportedIndexType
BufferManager
--
- vertexBuffers: Buffer[]
- indexBuffers: Buffer[]
--
+ getVertexBuffer(BufferInfo&amp;): vk::Buffer
+ getIndexBuffer(BufferInfo&amp;): vk::Buffer
+ addVertices(VertexRange&amp;, IndexRange&amp;): { BufferInfo : BufferInfo }
+ removeVertices(BufferInfo&amp;, BufferInfo&amp;): void
style=autoresize
bg=ORANGE
group=group-3</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>1800</x>
<y>711</y>
<w>243</w>
<h>108</h>
</coordinates>
<panel_attributes>Buffer
--
+ buffer: vk::Buffer
+ bufferMemory: MemoryInfo
+ bufferSize: vk::DeviceSize
+ allocator: DynBlockAllocator
style=autoresize
bg=ORANGE
group=group-3</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>2115</x>
<y>711</y>
<w>153</w>
<h>99</h>
</coordinates>
<panel_attributes>BufferInfo
--
+ index: uint32_t
+ offset: uint32_t
+ count: uint32_t
style=autoresize
bg=ORANGE
group=group-3</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>2106</x>
<y>792</y>
<w>36</w>
<h>108</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;&lt;&lt;-
m1=1
m2=*
bg=ORANGE
group=group-3</panel_attributes>
<additional_attributes>10.0;100.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>2034</x>
<y>738</y>
<w>99</w>
<h>36</h>
</coordinates>
<panel_attributes>lt=&lt;-
m1=1
m2=1
bg=ORANGE
group=group-3</panel_attributes>
<additional_attributes>10.0;10.0;90.0;10.0</additional_attributes>
</element>
<element>
<id>UMLPackage</id>
<coordinates>
<x>1737</x>
<y>675</y>
<w>756</w>
<h>351</h>
</coordinates>
<panel_attributes>vulkan vertex &amp; index buffer management
bg=ORANGE
group=group-3</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>612</x>
<y>567</y>
<w>225</w>
<h>351</h>
</coordinates>
<panel_attributes>lt=&lt;-</panel_attributes>
<additional_attributes>10.0;10.0;230.0;370.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>756</x>
<y>1125</y>
<w>315</w>
<h>117</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;-</panel_attributes>
<additional_attributes>330.0;110.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>711</x>
<y>981</y>
<w>72</w>
<h>171</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;-</panel_attributes>
<additional_attributes>10.0;10.0;60.0;170.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>1098</x>
<y>1359</y>
<w>369</w>
<h>198</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;-</panel_attributes>
<additional_attributes>390.0;200.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>756</x>
<y>1152</y>
<w>81</w>
<h>27</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;&lt;&lt;&lt;-</panel_attributes>
<additional_attributes>10.0;10.0;70.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>756</x>
<y>1224</y>
<w>315</w>
<h>117</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;-</panel_attributes>
<additional_attributes>330.0;110.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>810</x>
<y>1152</y>
<w>27</w>
<h>144</h>
</coordinates>
<panel_attributes>lt=-
</panel_attributes>
<additional_attributes>10.0;140.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>810</x>
<y>1269</y>
<w>81</w>
<h>252</h>
</coordinates>
<panel_attributes>lt=-
</panel_attributes>
<additional_attributes>10.0;10.0;70.0;260.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>1215</x>
<y>1593</y>
<w>216</w>
<h>207</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;&lt;&lt;-
or child class</panel_attributes>
<additional_attributes>10.0;210.0;200.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>747</x>
<y>1350</y>
<w>324</w>
<h>90</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;-</panel_attributes>
<additional_attributes>340.0;10.0;10.0;80.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>747</x>
<y>1017</y>
<w>180</w>
<h>423</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;-</panel_attributes>
<additional_attributes>180.0;10.0;10.0;450.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>414</x>
<y>1440</y>
<w>27</w>
<h>117</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;&lt;&lt;&lt;-</panel_attributes>
<additional_attributes>10.0;10.0;10.0;110.0</additional_attributes>
</element>
<element>
<id>UMLPackage</id>
<coordinates>
<x>810</x>
<y>1467</y>
<w>513</w>
<h>540</h>
</coordinates>
<panel_attributes>Drawables
bg=GRAY
group=group-7</panel_attributes>
<additional_attributes/>
</element>
</diagram>