]> Creatis software - creaImageIO.git/blob - src/doxygen/Architecture.htm
Feature #1764
[creaImageIO.git] / src / doxygen / Architecture.htm
1 <!--
2         # ---------------------------------------------------------------------
3         #
4         # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image 
5         #                        pour la Santé)
6         # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
7         # Previous Authors : Laurent Guigues, Jean-Pierre Roux
8         # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
9         #
10         #  This software is governed by the CeCILL-B license under French law and 
11         #  abiding by the rules of distribution of free software. You can  use, 
12         #  modify and/ or redistribute the software under the terms of the CeCILL-B 
13         #  license as circulated by CEA, CNRS and INRIA at the following URL 
14         #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html 
15         #  or in the file LICENSE.txt.
16         #
17         #  As a counterpart to the access to the source code and  rights to copy,
18         #  modify and redistribute granted by the license, users are provided only
19         #  with a limited warranty  and the software's author,  the holder of the
20         #  economic rights,  and the successive licensors  have only  limited
21         #  liability. 
22         #
23         #  The fact that you are presently reading this means that you have had
24         #  knowledge of the CeCILL-B license and that you accept its terms.
25         # ------------------------------------------------------------------------
26 -->
27 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
28 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
29
30 <head>
31 <meta http-equiv="Content-Language" content="es-co" />
32 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
33 <title>Architecture</title>
34 </head>
35
36 <body>
37
38 <h1 id="head-854b062d360d04ce4f5012114afa9ff5f11f21ba">Architecture</h1>
39 <span class="anchor" id="line-6"></span><span class="anchor" id="line-7"></span>
40 <p class="line867"></p>
41 <h2 id="head-230b785b2112730d4f8aaffcda83ccd28c9c8d83">Generalities</h2>
42 <span class="anchor" id="line-8"></span><span class="anchor" id="line-9"></span>
43 <ul>
44         <li>cvs : creatis/creaImageIO <span class="anchor" id="line-10"></span>
45         <ul>
46                 <li style="list-style-type: none;">
47                 <p class="line862">cvs co -D 
48                 :PROTOCOL:USERNAME@cvs.creatis.insa-lyon.fr:/cvs/creatis creaImageIO
49                 <span class="anchor" id="line-11"></span></p>
50                 </li>
51         </ul>
52         </li>
53         <li>09/02/09 : <span class="anchor" id="line-12"></span>
54         <ul>
55                 <li>new sources in src : create a lib called creaImageIO
56                 <span class="anchor" id="line-13"></span></li>
57                 <li>command line app : appli/gimmick <span class="anchor" id="line-14">
58                 </span></li>
59                 <li>cmake option : BUILD_V2 to build the new version
60                 <span class="anchor" id="line-15"></span></li>
61         </ul>
62         </li>
63         <li>All C++ files begin with creaImageIO <span class="anchor" id="line-16">
64         </span></li>
65         <li>All creaImageIO classes are in a namespace creaImageIO
66         <span class="anchor" id="line-17"></span><span class="anchor" id="line-18">
67         </span></li>
68 </ul>
69 <p class="line867"></p>
70 <h2 id="head-fd2930d25892babc425be6c8bf5e10dd28f776bb">General stucture</h2>
71 <span class="anchor" id="line-19"></span><span class="anchor" id="line-20">
72 </span>
73 <ul>
74         <li>The main data structure : attributed tree
75         <span class="anchor" id="line-21"></span>
76         <ul>
77                 <li>all related files are of the form : creaImageIOTree
78                 <span class="anchor" id="line-22"></span></li>
79                 <li>all related classes are in a namespace : creaImageIO::tree
80                 <span class="anchor" id="line-23"></span></li>
81         </ul>
82         </li>
83         <li>
84         <p class="line862">The abstract &#39;Model&#39; : <a class="nonexistent">TreeHandler</a> 
85         = manages a data source (read-only; read/write)
86         <span class="anchor" id="line-24"></span></p>
87         <ul>
88                 <li>
89                 <p class="line862">Concrete models : now SQLiteTreeHandler; future 
90                 IRodsTreeHandler, <a class="nonexistent">FavoritesTreeHandler</a>?
91                 <span class="anchor" id="line-25"></span></p>
92                 </li>
93         </ul>
94         </li>
95         <li>
96         <p class="line862">The controller &#39;Gimmick&#39; : controls different
97         <a class="nonexistent">TreeHandlers</a>: <span class="anchor" id="line-26">
98         </span></p>
99         <ul>
100                 <li>Local database handler <span class="anchor" id="line-27"></span>
101                 </li>
102                 <li>Favorites handler <span class="anchor" id="line-28"></span></li>
103                 <li>Other which are open on user demand
104                 <span class="anchor" id="line-29"></span></li>
105         </ul>
106         </li>
107         <li>The Views: <span class="anchor" id="line-30"></span>
108         <ul>
109                 <li>
110                 <p class="line862">Abstract <a class="nonexistent">GimmickView</a> : 
111                 Dialog <span class="anchor" id="line-31"></span></p>
112                 </li>
113                 <li>
114                 <p class="line862">Concrete <a class="nonexistent">GimmickView</a> : now
115                 <a class="nonexistent">WxGimmickView</a>; future QGimmickView ?
116                 <span class="anchor" id="line-32"></span></p>
117                 </li>
118                 <li>
119                 <p class="line862">Do we need to have abstract classes for
120                 <a class="nonexistent">GimmickView</a> components ?
121                 <span class="anchor" id="line-33"></span></p>
122                 <ul>
123                         <li>
124                         <p class="line891"><a class="nonexistent">TreeView</a> : is 
125                         associated with a <a class="nonexistent">TreeHandler</a> to 
126                         visualize its Tree <span class="anchor" id="line-34"></span></p>
127                         </li>
128                         <li>
129                         <p class="line891"><a class="nonexistent">AttributeView</a> : 
130                         visualizes a set of attributes (only one for a
131                         <a class="nonexistent">GimmickView</a>)
132                         <span class="anchor" id="line-35"></span></p>
133                         </li>
134                         <li>
135                         <p class="line891"><a class="nonexistent">ImageView</a> : preview of 
136                         images <span class="anchor" id="line-36"></span>
137                         <span class="anchor" id="line-37"></span>
138                         <span class="anchor" id="line-38"></span></p>
139                         </li>
140                 </ul>
141                 </li>
142         </ul>
143         </li>
144 </ul>
145 <p class="line867"></p>
146 <h2 id="head-b16e3563d729255863452b289e971da6a51d945b">Classes</h2>
147 <span class="anchor" id="line-39"></span><span class="anchor" id="line-40">
148 </span>
149 <p class="line867"></p>
150 <h3 id="head-4b6a5f3be677d7dfd21607ab2394efda67858131">Data structure: 
151 Attributed tree</h3>
152 <span class="anchor" id="line-41"></span><span class="anchor" id="line-42">
153 </span>
154 <p class="line874">in namespace creaImageIO::tree
155 <span class="anchor" id="line-43"></span><span class="anchor" id="line-44">
156 </span></p>
157 <ul>
158         <li>Tree <span class="anchor" id="line-45"></span>
159         <ul>
160                 <li>Attributed tree structure <span class="anchor" id="line-46"></span>
161                 </li>
162                 <li>inherits Node <span class="anchor" id="line-47"></span></li>
163                 <li>
164                 <p class="line862">holds a vector of root <a class="nonexistent">
165                 TreeNode</a> <span class="anchor" id="line-48"></span></p>
166                 </li>
167         </ul>
168         </li>
169         <li>
170         <p class="line891"><a class="nonexistent">TreeData</a>
171         <span class="anchor" id="line-49"></span></p>
172         <ul>
173                 <li>Abstract class to store user data on a tree
174                 <span class="anchor" id="line-50"></span></li>
175         </ul>
176         </li>
177         <li>Node <span class="anchor" id="line-51"></span>
178         <ul>
179                 <li>belong to a Tree, <span class="anchor" id="line-52"></span></li>
180                 <li>holds a pointer on parent Node, <span class="anchor" id="line-53">
181                 </span></li>
182                 <li>holds a vector of children Node <span class="anchor" id="line-54">
183                 </span></li>
184         </ul>
185         </li>
186         <li>
187         <p class="line891"><a class="nonexistent">NodeData</a>
188         <span class="anchor" id="line-55"></span></p>
189         <ul>
190                 <li>Abstract class to store user data on a tree node
191                 <span class="anchor" id="line-56"></span></li>
192         </ul>
193         </li>
194         <li>Descriptor <span class="anchor" id="line-57"></span>
195         <ul>
196                 <li>Descriptor of the structure a tree (number of levels, descriptors of 
197                 each level, ...) <span class="anchor" id="line-58"></span></li>
198                 <li>
199                 <p class="line862">holds a vector of <a class="nonexistent">
200                 LevelDescriptor</a> <span class="anchor" id="line-59"></span></p>
201                 </li>
202         </ul>
203         </li>
204         <li>
205         <p class="line891"><a class="nonexistent">LevelDescriptor</a>
206         <span class="anchor" id="line-60"></span></p>
207         <ul>
208                 <li>
209                 <p class="line862">holds a vector of <a class="nonexistent">
210                 TreeAttributeDescriptor</a> <span class="anchor" id="line-61"></span>
211                 </p>
212                 </li>
213         </ul>
214         </li>
215         <li>
216         <p class="line891"><a class="nonexistent">AttributeDescriptor</a>
217         <span class="anchor" id="line-62"></span></p>
218         <ul>
219                 <li>stores name, dicom group/elem, flags
220                 <span class="anchor" id="line-63"></span></li>
221         </ul>
222         </li>
223         <li>Comparator <span class="anchor" id="line-64"></span>
224         <ul>
225                 <li>Abstract definition of a comparator of Node
226                 <span class="anchor" id="line-65"></span></li>
227                 <li>
228                 <p class="line862">Comparison is done by operator()(Node* const &amp;, Node* 
229                 const &amp;) <span class="anchor" id="line-66"></span></p>
230                 </li>
231         </ul>
232         </li>
233         <li>
234         <p class="line891"><a class="nonexistent">ComparatorWithOrder</a>
235         <span class="anchor" id="line-67"></span></p>
236         <ul>
237                 <li>Abstract Comparator whose order can be reversed
238                 <span class="anchor" id="line-68"></span></li>
239                 <li>
240                 <p class="line862">Concrete comparison is done by method compare(Node* 
241                 const &amp;, Node* const &amp;) <span class="anchor" id="line-69"></span></p>
242                 </li>
243         </ul>
244         </li>
245         <li>
246         <p class="line891"><a class="nonexistent">LexicographicalComparator</a>
247         <span class="anchor" id="line-70"></span></p>
248         <ul>
249                 <li>A Comparator which stores a vector of Comparators and which performs 
250                 lexicographical comparison <span class="anchor" id="line-71"></span>
251                 </li>
252         </ul>
253         </li>
254         <li>
255         <p class="line891"><a class="nonexistent">IntComparator</a> : Compares the 
256         values of a given Attribute of the Nodes which is decoded as an int value
257         <span class="anchor" id="line-72"></span></p>
258         </li>
259         <li>
260         <p class="line891"><a class="nonexistent">FloatComparator</a> : Compares the 
261         values of a given Attribute of the Nodes which is decoded as a float value
262         <span class="anchor" id="line-73"></span></p>
263         </li>
264         <li>
265         <p class="line891"><a class="nonexistent">StringComparator</a> : Compares 
266         the values of a given Attribute of the Nodes which is decoded as a string 
267         value <span class="anchor" id="line-74"></span>
268         <span class="anchor" id="line-75"></span><span class="anchor" id="line-76">
269         </span></p>
270         </li>
271 </ul>
272 <p class="line867"></p>
273 <h3 id="head-df11fea98849928d47fd0fca777300beeb1de441">Models : TreeHandler and 
274 descendants</h3>
275 <span class="anchor" id="line-77"></span><span class="anchor" id="line-78">
276 </span>
277 <ul>
278         <li>
279         <p class="line891"><a class="nonexistent">TreeHandler</a> : Abstract class 
280         which &#39;handles&#39; a Tree structure. <span class="anchor" id="line-79"></span>
281         </p>
282         <ul>
283                 <li style="list-style-type: none;">Can:
284                 <span class="anchor" id="line-80"></span>Load the children of a given 
285                 Node <span class="anchor" id="line-81"></span>
286                 <span class="anchor" id="line-82"></span></li>
287         </ul>
288         </li>
289         <li class="gap">
290         <p class="line862">SQLiteTreeHandler : Concrete <a class="nonexistent">
291         TreeHandler</a> which manages a tree stored in a sqlite database
292         <span class="anchor" id="line-83"></span></p>
293         </li>
294         <li>CppSQLite3.h / CppSQLite3.cpp : C++ interface to sqlite db
295         <span class="anchor" id="line-84"></span></li>
296 </ul>
297 <p class="line874">... <span class="anchor" id="line-85"></span>
298 <span class="anchor" id="line-86"></span></p>
299 <ul>
300         <li>
301         <p class="line891"><a class="nonexistent">ImageFinder</a> : Parses (recursively) 
302         a part of a filesystem to look for known images and load their attributes in 
303         order to add the images to a Tree (submission via a <a class="nonexistent">
304         TreeHandler</a>::<a class="nonexistent">AddBranch</a>)
305         <span class="anchor" id="line-87"></span><span class="anchor" id="line-88">
306         </span><span class="anchor" id="line-89"></span></p>
307         </li>
308 </ul>
309 <p class="line867"></p>
310 <h3 id="head-5d6e60823befe28469fe2d44ec8a889c06ea3b72">Image handling</h3>
311 <span class="anchor" id="line-90"></span><span class="anchor" id="line-91">
312 </span>
313 <ul>
314         <li>creaImageIOImageReader.h/cpp : <span class="anchor" id="line-92"></span>
315         <ul>
316                 <li>
317                 <p class="line891"><a class="nonexistent">SpecificImageReader</a>
318                 <span class="anchor" id="line-93"></span></p>
319                 </li>
320                 <li>
321                 <p class="line891"><a class="nonexistent">ImageReader</a>
322                 <span class="anchor" id="line-94"></span></p>
323                 </li>
324         </ul>
325         </li>
326         <li>creaImageIOMultiThreadImageReader.h/cpp
327         <span class="anchor" id="line-95"></span></li>
328         <li>creaImageIOIndexedHeap.h/txx <span class="anchor" id="line-96"></span>
329         <span class="anchor" id="line-97"></span></li>
330 </ul>
331 <p class="line867"></p>
332 <h3 id="head-6b69e886af29f9ef5bb7eb8b646980dd2963c2cf">Controller</h3>
333 <span class="anchor" id="line-98"></span><span class="anchor" id="line-99">
334 </span>
335 <ul>
336         <li>Gimmick <span class="anchor" id="line-100"></span>
337         <span class="anchor" id="line-101"></span></li>
338 </ul>
339 <p class="line867"></p>
340 <h3 id="head-4e100fce838267c2c7182a13a0137ed08ed1c75a">Views</h3>
341 <span class="anchor" id="line-102"></span><span class="anchor" id="line-103">
342 </span>
343 <ul>
344         <li>
345         <p class="line891"><a class="nonexistent">GimmickView</a> : Abstract
346         <span class="anchor" id="line-104"></span></p>
347         </li>
348         <li>
349         <p class="line891"><a class="nonexistent">WxGimmickView</a>
350         <span class="anchor" id="line-105"></span></p>
351         <ul>
352                 <li>
353                 <p class="line891"><a class="nonexistent">WxTreeVie</a>w</p>
354                 </li>
355                 <li>
356                 <p class="line891"><a class="nonexistent">WxAttributeView</a>
357                 <span class="anchor" id="line-107"></span></p>
358                 </li>
359                 <li>
360                 <p class="line891"><a class="nonexistent">WxImageView</a>
361                 <span class="anchor" id="line-108"></span></p>
362                 </li>
363         </ul>
364         </li>
365         <li>QGimmickView <span class="anchor" id="line-109"></span>
366         <ul>
367                 <li>... </li>
368         </ul>
369         </li>
370 </ul>
371
372 </body>
373
374 </html>