+2004-09-17 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * ENH: added some utility method that builds a flat dictionnary
+ holding all the Dicom entries contained in the recursive structure
+ of a gdcmElementSet. Refer to add FlatHashTablePrint.cxx for
+ an example of usage.
+ - src/gdcmDocument.[h|cxx] added BuildFlatHashTableRecurse() and
+ BuildFlatHashTable() that build a flat dictionary.
+ - src/gdcmElementSet.h: added a new private GetTag() accessor.
+ gdcmDocument is now a friend of gdcmElementSet.
+ - src/gdcmElementSet.cxx: clean up.
+ - Example/FlatHashTablePrint.cxx added.
+ - Example/CmakeLists.txt changed accordingly
+
+2004-09-16 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * gdcmDocEntrySet::SQDepthLevel and gdcmDocEntrySet::BaseTagKey attributes
+ moved away from gdcmDocEntrySet (since this class is an abstract class
+ acting like an interface). SQDepthLevel and BaseTagKey are now
+ in class
+ - src/gdcmDocEntrySet.[h|cxx] removal of SQDepthLevel and BaseTagKey
+ and associated accessors. Doxygenation of the class.
+ - src/gdcmSQItem.[h|cxx] SQDepthLevel and BaseTagKey and associated
+ accessors added.
+ - src/gdcmSeqEntry.[h|cxx]: constructor doesn't handle depth anymore.
+ Use SQDepthLevel accessor instead. ::Print() adapted.
+ - src/gdcmElementSet.cxx changed according to changes in gdcmSeqEntry.
+ - src/gdcmDocument.cxx changed accordingly.
+
+2004-09-13 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * Preparation of writing a gdcmHeader iterator: generalisation of gdcmTagKey
+ - The following is the doxygen comment of the typedef declaration
+ of gdcmagKey in src/gdcmCommon.h:
+ gdcmTagKey is made to old an "universal" (as in URL, Universal
+ Ressource Locator) key to a gdcmDocEntry i.e. a dicom tag.
+ A dicom tag allways has a group and an element, but a set of tags
+ embeded in various (optionally nested) sequences and sharing
+ the same group and element all share the same (group, element)
+ "identifier". Hence the (group, element) cannot be used as an
+ identifier (in gdcm we shall refer to a "TagKey") of a tag.
+ In order to construct a proper tag identifier (i.e. a key) we
+ consider the following definition of a TagKey:
+ - let Group, Element be the string representation of the
+ group and element dicom tag members,
+ - let ItemNumber be the string representation of the integer
+ index of the considered item number of a sequence,
+ Let the key of a tag embeded in a sequence, noted SeqTag, be
+ the form:
+ /ItemNumber#Group|Element
+ where "/", "#" and "|" are characters acting as separators.
+ Then the general form of a gdcmTagKey is given by:
+ Group|Element<SeqTag>
+ where <SeqTag> means NO or many instances of SeqTag.
+ Hence the gdcmTagKey of a tag not "leaving" in a sequence is the
+ string e.g.
+ 0028|1201
+ but the gdcmTagKey of a tag "embeded" is the first item of
+ a sequence, itself nested in the third item of a sequence is the
+ string e.g.
+ 0004|1220/2#0008|0082/0#0008|0090
+ - src/gdcmDocEntry.h: added a new Key (of type gdcmTagKey) member, in
+ order to hold the new sequence compatible key. Previously, the
+ GetKey() method would look in the underlying gdcmDictEntry.
+ - src/gdcmDocEntry.cxx:
+ -- constructor now copies the underlying DictEntry key, in the local
+ Key member.
+ -- ::Print: displays the member Key, instead of the (group, element).
+ - src/gdcmCommon.h: added some comments on typedef gdcmTagKey.
+ - src/gdcmDocEntrySet.h:xi
+ -- ::ParseDES() now setups the gdcmTagKey of the sequence it is parsing.
+ -- now has a new BaseTagKey member.
+ -- STYLE.
+ * src/gdcmValEntry.[h|cxx], src/gdcmBinEntry.[h|cxx]: the member VoidArea,
+ previously a member of gdcmValEntry, moved to gdcmBinEntry were is
+ truly belongs.
+ This poses the problem with the semantics of the following lines
+ LoadEntryVoidArea(0x0028,0x1201); // R LUT
+ LoadEntryVoidArea(0x0028,0x1202); // G LUT
+ LoadEntryVoidArea(0x0028,0x1203); // B LUT
+ in gdcmDocument::gdcmDocument(std::string const & ). Please refer
+ to the long FIXME note for what the problem is. Nevertheless in
+ order to get things working the dicom dictionary was altered !
+ Please fix things urgently...
+ * Dicts/dicomV3.dic WRONGLY altered (this means we introduced a uncorrect
+ information), see above note on moving the member VoidArea. Nevertheless
+ the following entries previously correctly set as US are now inproperly
+ set to OW:
+ 0028 1201 OW IMG Red Palette Color Lookup Table Data
+ 0028 1202 OW IMG Green Palette Color Lookup Table Data
+ 0028 1203 OW IMG Blue Palette Color Lookup Table Data
+ * src/gdcmDocEntry.[h|cxx], src/gdcmSeqEntry.h: SQDepthLevel member
+ of gdcmDocEntry moved to gdcmSeqEntry.
+ * src/gdcmSeqEntry.cxx: STYLE.
+
+2004-08-04 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * Test/TestAllEntryVerify.cxx minor fix and added comments.
+
+2004-08-03 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * gdcmPython/testSuite.py: all the test suite in python is now moved
+ to it's C++ version (see gdcmData/TestAllEntryVerifyReference.txt)
+ * Test/CMakeLists.txt adapted to renaming of files in gdcmData
+ * gdcm/TODO and src/gdcmDictSet.h cleaned up frow the "TODO Swig" oldies
+
+2004-08-02 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * gdcmPython/CMakeLists.txt: SWIG_FLAGS doesn't declare includeall
+ to avoid inclusion recursion until STL is reached.
+ * src/gdcmDocument.[h|cxx]: exceptions substituted to errno C-style
+ mecanism. errno.h is not included in gdcm anymore.
+ * src/gdcmException.h: introduced new gdcmFormatUnexpected class
+ (gdcmFormatError now inherits from gdcmFormatUnexpected).
+ * TODO updated
+ * gdcmPython/testSuite.py checks on CR-MONO1-10-chest.dcm moved to
+ gdcmData/TestAllEntryVerifyReference.txt
+ * Test/TestAllEntryVerify.cxx is now effective (used allways return true)
+ * src/gdcmDocument.[cxx|h]: constructors no longer use the bool
+ exception_on_error parameter.
+ - src/gdcmFile.[cxx|h], src/gdcmHeader.[cxx|h] changed accordingly,
+ - vtk/vtkGdcmReader.cxx changed accordingly,
+ - Example/*.cxx and Test/*.cxx changed accordingly.
+
+2004-07-06 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * src/gdcmDicomDir.cxx, gdcmDocEntrySet.cxx: removed inclusion of errno.h
+ * src/gdcmDocument.[h|cxx], gdcmFile.[h|cxx], gdcmHeader.[h|cxx]:
+ enable_sequences removed from gdcmHeader constructor and dependencies.
+ * Example/PrintHeader.cxx: fixed accordingly (enable_sequences removal).
+ * gdcmPython/demo/PrintHeader.py: dummy fix.
+ * src/gdcmDocument.[h|cxx], gdcmFile.[h|cxx], gdcmHeader.[h|cxx]:
+ skip_shadow removed from gdcmHeader constructor and dependencies.
+ * Example/*.cxx and Test/*.cxx changed accordingly.
+
+2004-07-27 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * Test/CMakeLists.txt: newly re-introduced SIEMENS_Sonata-12-MONO2-SQ.dcm
+ in gdcmData (previously known as E00001S03I0015.dcm) is blacklisted.
+
+2004-07-21 Jean-Pierre Roux
+ * FIX Now, Parsing and Printing a DICOMDIR do work!
+ ( troubles remain in makeDicomDir and BuildUpDicomDir :-(
+
+2004-07-20 Jean-Pierre Roux
+ * FIX Some brain damaged headers have Zero-Lenght fields
+ for 'Transfert Syntax UID', or 'Media Stored SOP Class UID'.
+
+2004-07-19 Benoit Regrain <Benoit.Regrain@creatis.insa-lyon.fr>
+ * src/gdcmCommon.h, gdcmDict.cxx, gdcmTS.cxx : bug fix for msvc6 compilation
+ * src/gdcmDebug.[h|cxx] : bug fix for msvc6 compilation. Replace the dbg
+ variable (instance of gdcmDebug) by a definition macro, and the instance
+ is now in static in the gdcmDebug class
+ * src/gdcmSQItem.h : (FIXME) remove an undefined method
+ * Test/PrintAllDocument.cxx : bug fix in the result of the test
+
+2004-07-06 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * WARNING: ctest now depends more tightly on gdcmData. You should
+ check out gdcmData properly for things to run smoothly...
+ * src/gdcmDocument.cxx MAX_SIZE_LOAD_ELEMENT_VALUE is set back to 0xfff
+ (4096) for "ctest -R TestAllEntryVerify" to be able to run (i.e.
+ we need the pixels not be loaded in order to use the ValEntry
+ that displays position and size).
+ * Test/TestAllEntryVerify.cxx a new low level test now seems fair.
+ This is a C++ based equivalent of gdcmPython/testSuite.py that should
+ be deprecated. If you have any doubts about the advantages of a
+ modern scripting language (read Python) versus grass root C++ (i.e.
+ without lex + yacc, because of gdcm commitement to MS-VC++, sighhh),
+ I suggest you compare TestAllEntryVerify.cxx (639 lines, without the
+ reference file gdcmData/TestAllEntryVerifyReference.txt) and testSuite.py.
+ Anyhow, consider documenting the gdcmData images in
+ gdcmData/TestAllEntryVerifyReference.txt (and please run ctest before
+ commiting changes).
+ * Test/CMakeLists.txt:
+ - now uses TestAllEntryVerify.cxx
+ - specific comments on oldACR00001.ima (now renamed in gdcmData
+ to SIEMENS_GBS_III-16-ACR_NEMA_1.acr) moved away to
+ gdcmData/TestAllEntryVerifyReference.txt
+ * TODO updated.
+
+2004-07-02 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * src/*.[h|cxx] : typedef clean up
+ - guint16 and guint32 removed. Use ISO C uint16_t, uint32_t instead.
+ - TagKey renamed to gdcmTagKey (for external usage)
+ - VRKey renamed to gdcmVRKey (for external usage)
+ - removal of typedef duplication.
+ - Removed all unecessary inline keyword from class inline definitions.
+ - Some method|function(void) declarations replaced with method|function().
+ * src/jpeg/libijg12/jdhuff12.c:
+ - printf polluting ctest removed.
+ - TAB removal for comminting
+ * Test:
+ - TestAllReadCompareDicom.cxx: added a test that compares all the
+ images in gdcmDataImages.h with corresponding images in
+ gdcmData/BaselineDicom/. When baseline images are not present
+ this test creates them.
+ Note: we need to validate each reference image, but before that
+ I'd like to rename them with a more explicit name...
+ - CMakeLists.txt: changed accordingly.
+ * Example/*.cxx: examples now only include gdcm.h (as opposed to
+ including each header needed).
+
+2004-07-01 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * Test/*.cxx and Example/*.cxx: moved some examples away from the
+ test suite to the Example directory. Are concerned:
+ - PrintHeader.cxx
+ - TestDcm2Acr.cxx
+ - TestFindTags.cxx
+ - TestWrite.cxx was
+ - TestWriteSimple.cxx
+ * Test/CMakeLists.txt: added some comments on reasons for black listing
+ image gdcmData/oldACR00001.ima
+
+2004-06-30 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * Test/CmakeList.txt: removed the following from black list (to be coherent
+ with removal from gdcmData):
+ - gdcm-MR-PHILIPS-16-Multi-Seq.fixed.dcm
+ - gdcm-MR-PHILIPS-16.dcm
+ - US.3405.1.dcm
+ Added the following because after last cvs update, they cause
+ ctest -R TestReadWriteReadCompare
+ to segfault:
+ - gdcm-MR-SIEMENS-16-1.acr
+ - oldACR00001.ima
+ * Test/TestReadWriteReadCompare.cxx was properly written (with a call
+ to gdcmFile::SetImageData()) BUT since gdcmFile is brain damaged (see
+ new comments in this file) we temporarily (sigh) move to a weaker
+ form of test...
+ * Test/CmakeList.txt: with the change to Test/TestReadWriteReadCompare.cxx
+ we don't need to black list the following images anymore:
+ - 8BitsUncompressedColor.dcm
+ - OT-PAL-8-face.dcm
+ - US-PAL-8-10x-echo.dcm
+ * src/gdcmDocument.[h|cxx]: RE-Reverting to version 1.42 with the proper
+ fixes and the beautified code ;-)
+ This fixes the bug introduced in version 1.42 (when beautifying)
+ that made the parsing of 8BitsRunLengthColor.dcm unproper.
+ Note: ctest was blind to this bug (this means we need to still
+ improve the test suite). The bug could be detected by using
+ gdcmbin/bin/PrintDocument $GDCM_DATA/8BitsRunLengthColor.dcm
+ or by using
+ gdcmbin/bin/ReadWrite $GDCM_DATA/8BitsRunLengthColor.dcm
+ and by displaying the (garbage) produced file temp.XDCM...
+
+2004-06-29 Jean-Pierre Roux
+ FIX : - remove Frog's beautified, but never checked 'Parse7FE0' code,
+ - replace by uggly but working old code :-(
+ A lot of things should be OK again.
+ It's really urgent to have a test suite that *tests*,
+ to prevent Frog's beautifying sessions to break all the stuff
+ (twice, withing a fortnigh ...)
+
+2004-06-28 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * Test/TestWriteRead.cxx and TestReadWrite.cxx merged (because of
+ redundancy) to added Test/TestReadWriteReadCompare.cxx
+ * Test/CmakeList.txt: because the compare test of
+ Test/TestReadWriteReadCompare.cxx fails, the following images are
+ black listed: - 8BitsUncompressedColor.dcm
+ - OT-PAL-8-face.dcm
+ - US-PAL-8-10x-echo.dcm
+ * src/gdcmDocument.cxx: for broken (non DICOM V3 conformal) images
+ (e.g. gdcm-JPEG-LossLess3a.dcm see comments in
+ gdcm/gdcmPython/testSuite.py for details) ::FindDocLengthOB() had
+ and ad-hoc kludge. This kludge is now removed, and on encountering
+ such an image (OB field brain damaged) we set errno. Then in
+ ::FindDocLength() we "fix" the length as being ALL what remains
+ in the file (until EOF). We then proceed, hoping for the best...
+ This fixes a SegFault in ShowDicom when trying to write such an
+ image.
+ * Test/CmakeList.txt: 8BitsRunLengthColor.dcm is now blacklisted
+ (because TestWriteRead breaks on it, after a non conformal commit?).
+ ctest now runs properly, except for MakeDicomDir (which was allways
+ broken) and the Python related stuff (still not fixed).
+
+2004-06-24 Jean-Pierre Roux
+ ADD : Examples/WriteRead, that acts like the former Test/TestWriteRead
+ FIX : Test/TestReadWrite now iterates on all the file names
+ (instead of infinite loop)
+ ENH : Test/TestWriteRead now iterates on all the file names
+
+2004-06-28 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * Test/TestReadWrite.cxx: now uses all the images of gdcmData.
+
+2004-06-24 Jean-Pierre Roux
+ FIX : - now Write drops LUT Descriptors and LUTs (if any)
+ when SamplesPerPixel =3
+ - now Write is no longer confused by
+ 'BitsAllocated = 12" and 'BitsStored=12"
+ - "UN" value representation Elements are now written correctly
+ (their legth is stored on 4 bytes -just like OB, OW, and SQ-)
+ ENH : - now gdcmHeader has its own Write methods
+ (in order to split the job that has not to be done
+ for gdcmDicomDir)
+
+2004-06-23 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * Test/PrintAllDocument.cxx: looping on files is now effective. It used to
+ loop on the same image until memory went out.
+ Note: this means we still have gobs of memory loss in PrintDocument
+ * src/gdcmDocument.cxx: fixes problem on parsing on file
+ gdcmData/16BitsJpegLosslessGrayScale.dcm.
+
+2004-06-24 Jean-Pierre Roux
+ FIX : Write - All the Sequences and Sequence Item are now written
+ as 'no length' stuff, and a Sequence Delimitor aor an Item Delimitor
+ is added a the end, when necessary.
+ - A lot of brain-damaged images, that were read correctly are
+ now written correctly
+ - length compatible BinEntry are now loaded correctly
+ (even for odd groups)
+ Note : only Explicit Value Representation was checked.
+ (question : is implicit VR really necessary for gdcm ?)
+
+2004-06-23 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * DEVELOPPER: added a proposition of coding style.
+ * src/gdcmDocEntry.h: removed every inline declaration (for test of
+ coding style).
+
+2004-06-23 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * gdcmDocEntry::PrintCommonPart() and ::WriteCommonPart() removed.
+ Use the gdcmDocEntry::Print() and Write() instead.
+ * src/gdcmDocument.cxx: bug fix.
+
+2004-06-22 Jean-Pierre Roux
+ FIX : gdcmDocument.cxx
+ - Now we do recognize the JpegLossLess format (there was a misstyping in
+ code 'beautyfication' :-(
+ - Now we automaticaticaly load the Luts, if any
+
+2004-06-22 Jean-Pierre Roux
+ In order : to write Sequences, whatever their imbrication level,
+ : to allow user to create his own Sequences
+ a lot of modif where necessary (adding, moving, or virtualising methods)
+
+WARNING : save your own sources *before* cvs up !
+
+ - gdcmBinEntry
+ ADD virtual void Write(FILE *fp, FileType filetype);
+
+ - gdcmDocEntry
+ ADD virtual void Write(FILE *fp, FileType filetype);
+ ADD void gdcmDocEntry::WriteCommonPart(FILE *fp, FileType filetype);
+
+ - gdcmDocEntrySet
+ ADD virtual void Write (FILE *fp, FileType filetype)=0;
+ ADD virtual gdcmDocEntry *GetDocEntryByNumber(guint16 group,guint16 element) = 0;
+ ADD gdcmDocEntry *GetDocEntryByName(std::string name);
+ ADD virtual std::string GetEntryByNumber(guint16 group,guint16 element) = 0;
+ ADD std::string GetEntryByName(TagName name);
+ ADD gdcmDictEntry *NewVirtualDictEntry(guint16 group,
+ guint16 element,
+ std::string vr = "unkn",
+ std::string fourth = "unkn",
+ std::string name = "unkn");
+ ADD gdcmValEntry *NewValEntryByNumber(guint16 group, guint16 element);
+ ADD gdcmBinEntry *NewBinEntryByNumber(guint16 group, guint16 element);
+ ADD gdcmDocEntry *NewDocEntryByNumber(guint16 group, guint16 element);
+ ADD gdcmDocEntry *NewDocEntryByName (std::string Name);
+ ADD gdcmDictEntry *GetDictEntryByName (std::string Name);
+ ADD gdcmDictEntry *GetDictEntryByNumber(guint16, guint16);
+ REM virtual gdcmDocEntry *NewDocEntryByNumber(guint16 group, guint16 element)=0;
+ REM virtual gdcmDocEntry *NewDocEntryByName (std::string Name)=0;
+
+ - gdcmDocument
+ ADD virtual bool WriteF(FileType type); // New stuff, with recursive exploration
+ ADD virtual std::string GetEntryByName (TagName tagName);
+ ADD virtual std::string GetEntryVRByName (TagName tagName);
+ REM virtual bool Write(FILE *, FileType);
+ REM virtual void WriteEntryTagVRLength(gdcmDocEntry *tag,
+ FILE *_fp, FileType type);
+ REM virtual void WriteEntryValue(gdcmDocEntry *tag,FILE *_fp,FileType type);
+ REM virtual bool WriteEntry(gdcmDocEntry *tag,FILE *_fp,FileType type);
+ REM virtual bool WriteEntries(FILE *_fp,FileType type);
+ REM virtual std::string GetEntryByName (std::string tagName);
+ REM virtual std::string GetEntryVRByName (std::string tagName);
+ REM gdcmDictEntry *GetDictEntryByName (std::string Name);
+ REM gdcmDictEntry *GetDictEntryByNumber(guint16, guint16);
+ REM gdcmDictEntry *NewVirtualDictEntry(guint16 group,
+ guint16 element,
+ std::string vr = "unkn",
+ std::string fourth = "unkn",
+ std::string name = "unkn");
+ REM gdcmDocEntry *NewDocEntryByNumber(guint16 group, guint16 element);
+ REM gdcmDocEntry *NewDocEntryByName (std::string Name);
+ REM gdcmValEntry *NewValEntryByNumber(guint16 group, guint16 element);
+ REM gdcmBinEntry *NewBinEntryByNumber(guint16 group, guint16 element);
+
+ - gdcmElementSet
+ ADD virtual void Write(FILE *fp, FileType filetype);
+
+ - gdcmSeqEntry
+ ADD virtual void Write(FILE *fp,FileType filetype);
+
+ - gdcmSQItem
+ ADD virtual void Write(FILE *fp, FileType filetype);
+ ADD virtual std::string GetEntryByNumber(guint16 group, guint16 element);
+ REM std::string GetEntryByNumber(guint16 group, guint16 element);
+ REM std::string GetEntryByName(TagName name);
+
+ - gdcmValEntry
+ ADD virtual void gdcmValEntry::Write(FILE *fp, FileType filetype);
+
+2004-06-21 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * Test/TestWriteSimple.cxx: fix to gdcmHeader-gdcmHeaderHelper revamping.
+ The default constructor invoked by the line
+ gdcmHeader *f1 = new gdcmHeader( header );
+ was gdcmHeader::gdcmHeader(bool) instead of the expected
+ gdcmHeader::gdcmHeader(std::string const &, bool = false, bool, bool).
+ Hence the parsing wasn't executed... See also below.
+ * src/gdcmHeader.h: the declaration of gdcmHeader::gdcmHeader(bool)
+ as explicit constructor didn't do the trick to fix the above problem.
+ Could anyone explain why ?
+ * src/gdcmBinEntry.cxx, gdcmValEntry.cxx: gdcmBinEntry::Print() now
+ properly calls gdcmValEntry::Print() (that was weed out from
+ code related to gdcmBinEntry).
+
+2004-06-20 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * In order to fix memory leaks:
+ - Test/TestWriteSimple.cxx: added cleaning of free store through
+ some delete calls.
+ - src/gdcmBinEntry.cxx: fix to avoid SegFault.
+ - src/gdcmDicomDir.[cxx|h]: fixed initialisation in constructor
+ gdcmDicomDir::gdcmDicomDir(bool) [either the constructor itself
+ (through the call to ::AddDicomDirMeta()) or the destructor
+ would crash when deleting uninitialized ::metaElems].
+ - src/gdcmDictEntry.cxx: annotation of ununderstood memory leak.
+ - src/gdcmDocument.cxx:
+ -- ::~gdcmDocument() destructor now cleans up all dictionary entries
+ from dynamic stores.
+ -- ::ParseDES() misplaced deletion of temporary NewDocEntry
+ was causing memory leaks.
+ - src/gdcmSQItem.cxx:
+ -- ::~gdcmSQItem() dummy code cleaned (learned that deletion is
+ cleanly handled with polymophism: sorry but my milage is low).
+ -- ::SetEntryByNumber(string, guint16, guint16) now cleanly allocates
+ a gdcmValENtry, and makes no assumption on type (gdcmDocEntry,
+ gdcmSeqEntry vs gdcmValEntry) of existing entry (when present).
+ This avoids SegFaulting.
+ - src/gdcmSQItem.h: coding style.
+ * Conclusion:
+ - Test/TestWriteSimple still severely sucks. The output image content
+ (when $(GDCMDATA_HOME)/012345.002.050.dcm in input) is brain
+ damaged when displayed with vtkgdcmViewer.
+ - on memory leaks: TestWriteSimple leaks really less (see entry
+ of 2004-06-18 in Changelog file for the call to valgrind).
+ - on segfaults: ctest now passes all the tests but one (no more
+ segfaults).
+ * Erroneous leading white fix:
+ - src/gdcmDict.cxx: getline(from,xxx) doesn't remove the leading
+ white[s] (as opposed to from >> xxx, that removes it [them].
+ - src/gdcmTS.cxx: ditto.
+ - gdcmPython/testSuite.py: dirty related kludge removed.
+ * src/*: remaining references to gdcmParser removed.
+ * src/*[cxx|h]: added copy[way]left header.
+
+
+2004-06-18 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * In order to fix writing of dicom files:
+ - Test/TestWriteSimple.cxx: a simpler example of writing.
+ - Test/CMakeLists.txt changed accordingly.
+ - src/gdcmDocument.cxx:
+ -- The destructor now recursilvely removes potential sequences.
+ -- Bug fix in ::IsJPEG2000()
+ -- ::ReplaceOrCreateByNumber(std::string, guint16, guint16)
+ now handles promotion of gdcmDocEntry to gdcmValEntry in a cleaner
+ manner.
+ -- ::GetValEntryByNumber(guint16, guint16) now defined (as opposed
+ to only declared) and build on top of
+ ::GetDocEntryByNumber(guint16, guint16).
+ -- ::SetEntryByNumber() now uses GetValEntryByNumber(group, element)
+ - src/gdcmElementSet.[h|cxx]: added ::RemoveEntry(gdcmDocEntry *)
+ for usage in destructor and treatement of promotion in
+ ::ReplaceOrCreateByNumber().
+ - src/gdcmSQItem.cxx: destructor should better handle his job.
+ Test/TestWriteSimple now runs (or at least it DOES something).
+ * We can now start hutting memory links. A good starting point is:
+ valgrind -q --skin=memcheck --leak-check=yes --leak-resolution=high
+ --num-callers=100 --show-reachable=yes gdcmTests TestWriteSimple
+ $(GDCMDATA_HOME)/012345.002.050.dcm foo.dcm
+
+2004-06-18 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * Valgrind note: after Mathieu Malaterre teached me how to read
+ the valgrind FAQ ;-] (see http://valgrind.kde.org/faq.html), I
+ learned that:
+ Using gcc, you can force the STL to use malloc and to free memory as
+ soon as possible by globally disabling memory caching.
+ With 3.2.2 and later, you should export the environment variable
+ GLIBCPP_FORCE_NEW before running your program.
+ By setting GLIBCPP_FORCE_NEW, STL related memory leak messages of gdcm
+ simply vanish (it is still not clear to me, whether this means that
+ STL std::string leaks or if valgrind believes it leaks...).
+ * Fixing of SegFault of Test/makeDicomDir (as shown by ctest or by
+ running bin/gdcmTests makeDicomDir):
+ - src/gdcmDicomDir.cxx: dynamic casting used + clean up.
+ - Test/makeDicomDir.cxx now properly traps empty lists and returns
+ with 1.
+ NOW, makeDicomDir cleanly fails (in ctest terminology) instead of
+ SegFaulting (I drowned in DicomDir related code when trying to
+ understand why the list is empty...).
+ * src/gdcmDocument.h: first BSD license header try.
+ * Doc/License.txt added.
+
+2004-06-15 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * src/gdcmDocument.[h|cxx]:
+ - Clean up of the Transfer related predicates. They are now all based
+ on new method isGivenTransferSyntax, that (should) handle properly
+ the padding problem.
+ - general clean up, simplification, and coding style.
+ - Specific clean up of Parse7FE0() (umproperly named actually).
+ * gdcmPython/testSuite.py: an odd temporary kludge introduced.
+
+2004-06-14 Jean-Pierre Roux
+ * gdcmSeqEntry.cxx
+ - fix the display of Sequence Delimitor (SQDepthLevel pb)
+ - fix the display of SQItem ordinal number
+ - add the GetSQItemByOrdinalNumber method
+ - remove some useless never written private methods
+
+2004-06-14 Jean-Pierre Roux
+ * gdcmBinEntry.cxx
+ - adding a constructor taking a gdcmDocEntry as an input param
+ - ReplaceOrCreateByNumber now returns :
+ a gdcmBinEntry * if a Binary (void *) value is passed as a param
+ a gdcmValEntry * if a string value is passed as a param
+ * dcmDocument.cxx
+ - SetEntryByNumber now allows setting gdcmValEntry or gdcmBinEntry,
+ according to the param type (no longer sets a gdcmDocEntry)
+ - GetValEntryByNumber, GetBinEntryByNumber added
+ - NewValEntryByNumber and NewBinEntryByNumber added
+ * gdcmFile.cxx
+ - Pixel Data are now linked to the (7fe0,0010) elements, after reading
+ * gdcmSQItem.h
+ - GetSQItemNumber and SetSQItemNumber added, to provide
+ a (relative) Item identier inside a given Sequence
+ \warning : some pb remaining around this number
+ will be solved asap
+ - AddEntry now takes the Item Number as a param
+ * gdcmValEntry.cxx
+ - adding a constructor taking a gdcmDocEntry as an input param
+
+2004-06-14 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * Memory leak hunt with the following command:
+ valgrind --leak-check=yes --leak-resolution=high --num-callers=40
+ --show-reachable=yes gdcmTests PrintDocument
+ It looks like many (all?) leaks are due to the STL (or a bad usage
+ of the STL. The lines producing the leaks now have a comment with
+ a "MEMORY LEAK" tag: you can retrieve them with
+ grep "MEMORY LEAK" src/*
+ Here are two typical examples which I can't help fixing:
+ -----
+ #include <string>
+ int main() {
+ std::string name;
+ char * test = "babo";
+ name = test; //// <--- valgrind detects 960 bytes lost in
+ //// call to std::string::operator=(char const*)
+ name.clear(); //// Doesn't help !
+ return 0;
+ }
+ -----
+ #include <string>
+ #include <iostream>
+ int main() {
+ std::string line;
+ std::cout << "Type a bunch of characters followed by RETURN: ";
+ getline(std::cin, line); //// <--- valgrind dectects a loss
+ //// of 1320 bytes in call to
+ /// std::basic_istream<>& std::getline<>
+ return 0;
+ }
+ -----
+
+
+2004-06-10 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * src/gdcmHeader.[cxx|h]:
+ - Predicates on the Transfer syntax (of the form Is[JPEG|RLE]*)
+ and related, moved away to gdcmDocument.
+ - Accessors (on the form [Get|Set]Entry*) set up to expose publicly
+ the corresponding protected accessors of inherited class
+ gdcmDocument, removed ! As a consequence gdcmFile had to be
+ declared friend of class gdcmDocument (see below).
+ - operator< moved to gdcmDocument (in fact it belongs to gdcmDicomDir).
+ - Clean up of undefined or unused methods.
+ * src/gdcmFile.[cxx|h]: added SetEntryByNumber (in order to take into
+ account the changes to gdcmHeader.h).
+ * src/gdcmDocument.h:
+ - gdcmFile is now a friend class (in order to take into account the
+ changes to gdcmHeader.h).
+ - Predicates on the Transfer syntax (of the form Is[JPEG|RLE]*) added
+ (see changes to gdcmHeader.h).
+ - Accessors (reading on the form GetEntry*) are now public.
+ - Clean up of undefined or unused methods.
+ * src/gdcmDocument.cxx:
+ - adaptation to changes to gdcmDocument.h
+ - ::OpenFile now writes a verbose message when file cannot be opened.
+ - some std::string properly set to VRKey
+ * src/gdcmDicomDir.h: historical references to gdcmHeader changed to
+ references to gdcmDocument.
+ * Test/TestFindTags.cxx: changed accordingly to above changes.
+ * gdcmPython/testSuite.py: adapted to renaming of acr files in
+ cvs repository gdcmData.
+
+2004-06-09 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * src/gdcmValEntry.h: member voidArea type changed from char* to void*.
+ * src/gdcmBinEntry.h: member voidArea commented out, since it potentially
+ conflicts with gdcmValEntry::voidArea.
+ * src/gdcmValEntry.cxx: unmatching comment wiped out.
+ * src/gdcmVR.[h|cxx]: added two predicates that partition the possible
+ Value representation between StringRepresentable and BinaryRepresentable.
+ * src/gdcmDocument.cxx:
+ - method ParseDES: proper indentation restored and usage of
+ gdcmVR::IsVROfGdcmStringRepresentable wired in.
+ - method LoadDocEntry: the fingerprint left in the SetValue() of
+ unloaded entries (length > MaxSizeLoadEntry) had curiously been
+ removed. Reverting to previous code segment with the proper
+ dynamic_cast< gdcmValEntry* >.
+ Note: this was (partially) breaking the python test suite
+ (gdcmPython/testSuite.py) that made usage of the above
+ fingerprint to check presence of "Pixel Data".
+ * src/gdcmDocEntry.h: coding style.
+ * gdcmPython/__init__.py: environement variable GDCM_DATA_PATH is
+ now taken into account.
+ * gdcmPython/gdcm.i: adaptation to the new internal representation
+ of gdcm (exit gdcmParser, hello gdcmDocument).
+ * gdcmPython/testSuite.py: quick and dirty fix for loading vtkgdcmPython
+ on posix.
+ * gdcmPython/demo/PrintHeader.py: doesn't use the gdcmDocument::Print()
+ anymore, but instead prints the loaded Python dictionary.
+ * .... alas, the python testSuite is still broken.
+
+2004-05-18 Benoit Regrain <Benoit.Regrain@creatis.insa-lyon.fr>
+ * gdcmPython/gdcm.i : remove useless lines concerning the gdcmGlobal
+ gdcmGlob
+ * gdcmPython/setup.py : replace the use of cvar.gdcmGlob to gdcmGlobal
+ * src/gdcmUtil.h : export methods
+
+2004-05-16 Mathieu Malaterre <Mathieu.Malaterre@creatis.insa-lyon.fr>
+ * Some more cleanup/enhancement in gdcmPython/CMakeLists.txt getting close
+ to right behavior
+ * Initial addition of automatic python testing
+ * Initial addition of automatic image comparison
+
+2004-05-04 Benoit Regrain <Benoit.Regrain@creatis.insa-lyon.fr>
+ * src/gdcmCommon.h, gdcmDicomDir.cxx, gdcmFile.cxx, gdcmHeaderHelper.h,
+ gdcmParser.cxx, gdcmParser.h : bug fix for the Microsoft .Net compilation
+
+2004-05-04 Benoit Regrain <Benoit.Regrain@creatis.insa-lyon.fr>
+ * src/gdcmFile.cxx, gdcmHeader.cxx : bug fix for the msvc compilation
+ * Test/ShowDicom.cxx : bug fix for msvc compilation
+ * vtk/vtkgdcmViewer.cxx : bug fix for msvc compilation
+
+2004-05-04 Jean-Pierre Roux
+ * ADD Taking into account the 'Dicom Sequences' leads up to introduce
+ new concepts (and new classes) :
+ a 'gdcmDocument' is composed of a set of Doc Entries, that are
+ - elementary gdcmDocEntries (former gdcmHeaderEntries)
+ - Sequence Doc Entries (gdcmSeqEntries)
+ a Sequence is composed of Items.
+ Each item is a set of Doc Entries (this is recursive)
+ The non uniqueness of the 'Dicom tag' is due to this recursivity
+ (never taken into account)
+ Our unability to add a new 'entry' in the header
+ at the proper location (neither in the H-Table (map or multimap),
+ nor in the Chained List is also due to this recursivity.
+ Don't try, right now, to use/modify/compile these new sources :
+ nothing is finished.
+ We just commit all the stuff, 'as is', in order not to loose it.
+
+2004-05-04 Benoit Regrain <Benoit.Regrain@creatis.insa-lyon.fr>
+ * vtk/vtkGdcmReader.cxx : bug fix in the setting of file name
+
+2004-05-03 Benoit Regrain <Benoit.Regrain@creatis.insa-lyon.fr>
+ * vtk/vtkGdcmReader.cxx : bug fix when loading a list of files using the
+ file prefix (SetFilePrefix)
+
+2004-05-02 Mathieu Malaterre <Mathieu.Malaterre@creatis.insa-lyon.fr>
+ * Add a new test: ShowDicom, for now this is just the c++ version of
+ checkRead.sh, later it will be able to compare the image read against a
+ baseline.
+ * Replace the DEBUG on the stack with a global entry in cmake interface:
+ GDCM_DEBUG, so you can turn verbosity ON/OFF for debug statement.
+
+2004-04-30 Mathieu Malaterre <Mathieu.Malaterre@creatis.insa-lyon.fr>
+ * Add an example subdir, with a real example on how to read + write a
+ dicom image
+
+2004-04-30 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * Doc/gdcmUML.xmi added raw UML class view (umbrello format)
+ * Doc/CMakeLists.txt: the main page is now properly differentiated
+ between the developper and user version.
+ * Doc/doxygen.config.in: dropped search related obsolete flags
+ * src/gdcmParser.h, gdcmHeader.h: doxygenation
+
+2004-04-29 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+ * DEVELOPPER: added some helpfull comments for compile/test/install
+ when using cmake.
+
+2004-04-29 Mathieu Malaterre <Mathieu.Malaterre@creatis.insa-lyon.fr>
+ * ENH: 1. Remove remp solution of gdcmTests.cxx+ gdcmMain directly in
+ src directory, now generated in the build dir.
+ 2. Tests as mentionned smarter
+ 3. Some clean up
+ 4. Add a new method in gdcmDict that return the PubDict by name
+ this is interesting for 3rd party lib like ITK,
+ where we could set the institution name / patient name...
+
+ * ENH: 1. Now the test suite is working for real
+ 2. All binaries are now output in the gdcm-bin directory
+ (this was not true before)
+
+2004-04-28 Jean-Pierre Roux
+ * ENH add the provisional gdcmHeader::SQDepthLevel to allow
+ SeQuence indented printing of Dicom Header.
+ * ENH merge methods gdcmParser::Parse and gdcmParser::LoadHeaderEntries
+ into the single gdcmParser::LoadHeaderEntries for efficiency purpose.
+ Computation of SQDepthLevel is now part of gdcmHeader constructor
+ * ENH add self defined param 'new' to PrintHeader to 'show' the SeQuence
+ tree-like structure of a Dicom Header.
+ * FIX Test code cleaning
+
+2004-04-25 Mathieu Malaterre <Mathieu.Malaterre@creatis.insa-lyon.fr>
+ * ENH: Adding automatic testing
+ 1. Need a DartConfig.cmake to submit to public
+ 2. Add a test driver gdcmTest.cxx
+ 3. gdcmTestMain, an helper for the main test driver gdcmTest
+ 4. Files in Test don't have a main anymore, this becomes interesting
+ when we add more and more tests, thus dsw don't have to load
+ too many projects
+ * ENH: Adding a GDCM_DATA_ROOT for testing
+ * ENH: Remove redundancie about GDCM_DICT stuff, now we only need to modify
+ one file instead of seven + some small cleanup
+
+2004-04-22 Jean-Pierre Roux
+ * ENH Minor changes to the Print() methods.
+ * ADD gdcmParser::PrintEntryNiceSQ() to allow SQ-indented
+ Header printing. Example given with :
+ > PrintHeader fileName 2 new
+ (SQ based tree-like structure still to be done for the Header ...)
+
+2004-04-22 Mathieu Malaterre <Mathieu.Malaterre@creatis.insa-lyon.fr>
+ * ENH: Some cosmetic clean up for compilation with -W -Wall -Werror
+ 1. I have added some unsigned where needed
+ 2. Some function parameter not used -> (void)
+ 3. In gdcmDicomDir.cxx, add GDCM_DICOMDIR_NONE case
+ 4. g++ don't like character '\' in comment
+ 5. #define jpeg_create_decompress jCreaDecompress
+ this really need to be fixed
+ 6. virtualize destructor of gdcmObject ... leakage
+ 7. sscanf(g->first.c_str(),"%x",&gr_bid);
+ this also really need to be fixed
+ 8. gdcm/src/jpeg/libijg8/CMakeLists.txt,
+ remove compression file
+ (as we only do decompression, right ?)
+ * ENH: Change malloc/calloc/free with c++ equivalent
+
+2004-04-21 Jean-Pierre Roux
+ * FIX gdcmHeaderHelper::GetXSpacing
+ when a single value is found (bug ?), xpacing is now
+ defaulted to yspacing
+
+2004-04-19 Jean-Pierre Roux
+ * ADD gdcmData/Wrist.pap (PAPYRUS 3.0 -single frame-) for checking purpose
+ * ENH add parameters :
+ bool exception_on_error = false,
+ bool enable_sequences = false,
+ bool ignore_shadow = false
+ to the gdcmFile constructors to be full gdcmParser compliant
+ * FIX vtk/vtkGdcmReader.cxx now uses enable_sequences = true in gdcmFile
+ to allow reading of PAPYRUS 3.0 files
+
+2004-04-06 Jean-Pierre Roux
+ * ADD gdcmData/E00001S03I0015.dcm for SQ checking purpose
+
+2004-04-02 Jean-Pierre Roux
+ * ADD : Test/checksequence.sh, for a general recap on SQ pb
+ * FIX : gdcmParser::WriteEntryTagVRLength emprovement of special treatement
+ for Philips spurious Tag fffe|0000 while rewritting Dicom files
+
+2004-03-30 Jean-Pierre Roux
+ * FIX gdcmParser::ReplaceOrCreateByNumber shouldn't seg fault any more
+ for ACR file, written out as DICOM files (hope so...)
+
2004-03-30 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
* src/gdcmParser.[cxx|h] and gdcmHeader.[cxx.h]: gdcmHeader::Write split
in WriteEntryTagVRLength and WriteEntryValue. Those methods were
in gdcmHeader.
* src/gdcmParser.[cxx|h]: ReplaceOrCreateByNumber(char*, guint16, guint16)
trashed out (because ReplaceOrCreateByNumber(string, guint16, guint16)
- allready does the job.
+ already does the job.
* src/gdcmDicomDir.[cxx|h]: WriteDicomDirEntries renamed to WriteEntries
(to be consistent with gdcmParser::WriteEntries).
of gdcmDicomDirImage::NewImage as empty function.
2004-02-28 Jean-Pierre Roux
-<<<<<<< ChangeLog
* ENH add gdcmDicomDir:NewPatient
add gdcmDicomDirPatient:NewStudy
add gdcmDicomDirStudy:NewSerie
* Update Windows projects and .cvsignore files
2003-11-12 Jean-Pierre Roux
- * ENH gdcmHeader constructor has one more parameter (default value : false)
+ * ENH gdcmHeader constructor has one more parameter (default value : false)
that allows the user to 'go inside' the SeQuences only
if he wants to.
gdcmElValSet:Print takes it into account
2003-10-24 Mathieu Malaterre <Mathieu.Malaterre@creatis.insa-lyon.fr>
* ENH: vtkGdcmReader.cxx can now read multiframe dicom
* FIX: remove a call to ->Modified ... see comments
- * FIX: vtkgdcmViewer.cxx was writting ASCII file...this is so slooooooow !
+ * FIX: vtkgdcmViewer.cxx was writting ASCII file...this is so slooooow !
2003-10-23 Mathieu Malaterre <Mathieu.Malaterre@creatis.insa-lyon.fr>
* FIX: Problem with path for libvtkgdcmPython
* ENH: Try adding a search script for python site-package
* RMV: Remove some file from medcon lib that are not necessary
* FIX: gdcm/Makefile.am fix for generating ljpg medcon
- * ENH: CMakeLists.txt now generate 'pygdcm.so' instead of 'libpygdcm.so'
+ * ENH: CMakeLists.txt now generate 'pygdcm.so' instead of 'libpygdcm.so'
* FIX: More pragma disable fro VC++,
- I don't think I break something as it is also disable in VTK/ITK.
+ I don't think I break something as it is also disable in VTK/ITK.
But it fasten debug compilation time.
2003-10-23 Jean-Pierre Roux
no longer seg faults when file is not found
2003-10-14 Jean-Pierre Roux
- * Emprovement of reading for Dicom encapsulated Jpeg LossLess MultiFrame images
+ * Emprovement of reading for Dicom encapsulated Jpeg LossLess
+ MultiFrame images
2003-10-14 Mathieu Malaterre <Mathieu.Malaterre@creatis.insa-lyon.fr>
* TODO: *.in file to genereate a UseGDCM later
- deals with MultiFrames MultiFragments Run Length Encoded files
- deals with YcBcR (YBR_FULL) files
- deals with YBR_YBR_FULL_422 files (they work as RBG files ?!?)
- WARNING : nothing was checked for YBR_PARTIAL_422, YBR_ICT, YBR_RCT files.
+ WARNING : nothing was checked for YBR_PARTIAL_422, YBR_ICT,
+ YBR_RCT files.
(no sample found :-(
2003-10-02 Mathieu Malaterre <Mathieu.Malaterre@creatis.insa-lyon.fr>
* vtk/win32/vtkgdcm.dsp : added /nodefaultlib "mscvrt" for debug mode
2003-08-29 Mathieu Malaterre <Mathieu.Malaterre@creatis.insa-lyon.fr>
- * Corrected a leak in vtkGdcmREader.cxx, the pSource was find thanks to valgrind.
+ * Corrected a leak in vtkGdcmREader.cxx, the pSource was find thanks
+ to valgrind.
2003-07-29 Mathieu Malaterre <Mathieu.Malaterre@creatis.insa-lyon.fr>
* src/win32/libgdcmjpeg12.dsp was not dos format
- * src/win32/libgdcmjpeg12.dsp : libgdcmijpeg12_EXPORTS -> LIBGDCMIJPEG12_EXPORTS
+ * src/win32/libgdcmjpeg12.dsp :
+ libgdcmijpeg12_EXPORTS -> LIBGDCMIJPEG12_EXPORTS
* src/win32/gdcmdll.dsp: + /I "..\jpeg\libijg12"
2003-07-29 Benoit Regrain <Benoit.Regrain@creatis.insa-lyon.fr>