1 -----------------------------------------------------------------------------
2 Proposed Template of an entry in this TODO:
3 (Note: Date is the date of registering of first demand.)
14 -----------------------------------------------------------------------------
15 -----------------------------------------------------------------------------
16 Description: vtk/vtkGdcmReader doesn't positionate the normal to the image
19 Details: vtkGdcmReader::CheckFileCoherence() sets the DataOrigin[i]
20 but doesn't set the plane (image seen in 3D) normal (is it
21 possible any how). This plane normal could be extracted from
22 the "orientation" info of the gdcmHeader ( refer to
23 grep "Orientation" Dicts/dicomV3.dic).
24 Problem exhibiting this defect: cine loop on a pile of images
25 whose Origin is correct, but whose normal is not set will
28 * vtkGdcmReader inherits from vtkImageReader which aggregates
29 a vtkTranform. vtkGdcmReader could store (when the user requires
30 it, see below) the origin/normal taken from the Dicom Header
31 within this vtkTransform (looks like a natural place to store
32 this spacial information).
33 * Both settings of the origin and/OR the normal of the plane (image)
34 should be an option defined with a flag (On/Off) in the
36 -----------------------------------------------------------------------------
37 Description: Fix the Python wrappers
42 -----------------------------------------------------------------------------
43 Description: clean up gdcmFile/gdcmHeader relationship
47 * simplify the API for the user (no need to call GetImageData() before
49 * avoid memory leaks with with Pixel_Data.
51 -----------------------------------------------------------------------------
52 Description: remove all autotools references
57 -----------------------------------------------------------------------------
58 Description: introduce namespace "gdcm"
63 1/ Problem: using enum with name like 'Unknow' on .Net, or LP on cygwin
65 2/ Question: when introducing the namespace, should we remove the gdcm
66 prefix from classes or keep it ?
67 -----------------------------------------------------------------------------
68 Description: complete the doxygen Documentation
73 -----------------------------------------------------------------------------
74 Description: test the private dictionary part.
79 * Frog: where can we obtain such a private/dictionary and the corresponding
80 Dicom file ? Any examples on-line ?
81 -----------------------------------------------------------------------------
82 Description: fix definitively the memory leaks problems.
87 -----------------------------------------------------------------------------
88 Description: test gdcm on a big endian OS.
93 -----------------------------------------------------------------------------
94 Description: More tests !
98 * an example of new test could be to clone a Dicom image by
99 copying gdcmDocEntry one after the other
101 * look at traversal used in Example/FlatHashTablePrint.cxx
102 -----------------------------------------------------------------------------
103 Description: revoir la gestion des resources, win32 permet d'inclure des
104 fichiers texte (=dicomV3.dic) dans une dll ou quelquechose du genre.
109 * Frog: no comprendo !? De plus est-ce portable ?
110 -----------------------------------------------------------------------------
111 Description: Convert the C-like IO to C++ IO:
115 remove all the C-oriented IO references like FILE*, fread...
116 and replace them with the C++ fstream notation.
117 Provide overload of operators << and >> for any gdcm class using file IO.
119 * Question: the underlying jpeg libraries (written in C) use the FILE*
120 notation. Is there a way to still use fstream in gdcm, and
121 build or pass the proper FILE* to jpeg libs ?
122 * Binary IO references are available at
123 http://www.angelfire.com/country/aldev0/cpphowto/cpp_BinaryFileIO.html
124 -----------------------------------------------------------------------------
125 Description: generate methods based on VM.
129 * cmake should parse le DICOM dictionary to generate methods like
130 gdcm???::SetImagePosition(int, int)
132 //generated content do not edit
135 gdcm???::SetImageNumber(int)
137 //generated content do not edit
141 * Regrain: a dicom dictionary entry name is NOT UNIQUE [this means
142 two tags=(group, element) can share the same name].
143 What should the wrapper do in such a case !?
144 * Frog: what does VM stand for ?
145 -----------------------------------------------------------------------------
146 Description: Add information on supported imagers (constructor/model)
149 Details: in order to promote gdcm make a list (on the web pages)
150 of images successfully parsed based on a constructor/model ordering
151 Comments: * frog: gdcmData only lists pathological images. How to collect
152 the ones gdcm works smoothly with (hopefully gdcmData is a small
153 subset of what we would like).
154 -----------------------------------------------------------------------------
155 Description: Add a GetVersion() global function.
158 Details: This is to be used for version assertion with gdcmPython
160 -----------------------------------------------------------------------------
161 -----------------------------------------------------------------------------
162 * vtk/vtkGdcmHeader.cxx: if speed becomes a concern some changes can
163 be made at the cost of memory consumption (refer to header of
164 vtk/vtkGdcmHeader.cxx)
165 -----------------------------------------------------------------------------
166 * gdcmElValSet::SetElValueLengthByNumber IMNSHO should be trashed.
167 It's only purpose is a onliner substitute to calling GetElValueByNumber
168 and then SetLength. This only obfuscates the caller code more than
170 Besides the definition of gdcmElValSet::SetElValueLengthByNumber itself
171 it quite poor since it is a almost exact copy of
172 gdcmElValSet::GetElValueByNumber except for the returned code.
173 gdcmHeader::SetPubElValLengthByNumber (which is based on
174 gdcmElValSet::SetElValueLengthByNumber) is used nowhere...
175 -----------------------------------------------------------------------------
176 * Fix the bug in Test/bug1.cxx (see first comment line): Win32 only.
177 -----------------------------------------------------------------------------
178 * All (or at least many of) the methods of gdcmHeader whose only arguments
179 are an ElValue* (e.g. FindLength, FindVR, LoadElementValue...) can
180 be moved away to ElValue class on condition of transmitting the
181 gdcmHeader.fp attribute. This change should be considered since it
182 would allow those method to avoid artificial calls to ElValue::GetElement(),
184 -----------------------------------------------------------------------------
185 * Eat leading_trailing_whitespace (found in python/gdcmPython/gdcmi) should
186 be used when parsing the dictionary in C++ !
187 -----------------------------------------------------------------------------
188 * Group length is not a unique tag in a file. Hence avoid putting it
189 in the element values dictionary without doing something smarter
190 (say, instead of storing the length store the group and the length
191 so we can related a length to a group).
192 -----------------------------------------------------------------------------
193 * GetPubElValByNumber doit faire la difference entre chaine vide
194 et chaine pas touve''. Eventuellement raiser une exception ?
195 -----------------------------------------------------------------------------
196 * gdcmHeader::LoadElements only loads the element whose length is
197 below the specified size. When accessing the value of such an element
198 the content is unfound ! Find a decent way of loading the value on
200 -----------------------------------------------------------------------------
201 * JPR: fournir une method qui ne fait que lire les elements passes en arguments
202 sous forme d'une liste.
203 -----------------------------------------------------------------------------
204 * JPR: gdcmHeader::CheckSwap() dans le cas ACR pas propre, degager tout de
205 suite si on a deduit que c'en est pas...
206 -----------------------------------------------------------------------------
207 * python /usr/lib/python2.2/site-packages/DaVaW/demo/dvwDcmReader.py
208 and load image /home/frog/cvs/DCMlib/Data/CT-MONO2-16-ankle.dcm
209 will yield wrong coloring scheme as opposed to
210 affim filein=/home/frog/cvs/DCMlib/Data/CT-MONO2-16-ankle.dcm
211 -----------------------------------------------------------------------------
212 * gdcmFile should implement the following API:
214 WriteDicom.SetFileName("MyDicomFile.dcm");
215 string * AllTags = gdcmHeader.GetDcmTagNames();
216 WriteDicom.SetDcmTag(AllTags[5], "253");
217 WriteDicom.SetDcmTag("Patient Name", "bozo");
218 WriteDicom.SetDcmTag("Patient Name", "bozo");
219 WriteDicom.SetImageData(Image);
222 Anonymize(ostream& output) {
223 a = gdcmFile("toto1");
224 a.SetPubValueByName("Patient Name", "");
225 a.SetPubValueByName("Date", "");
226 a.SetPubValueByName("Study Date", "");
229 -----------------------------------------------------------------------------