X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=ChangeLog;h=a27a533dce5e0b11e517cf5b70b02f4c6d4c4c8c;hb=5bf7c51796867388334836847a6874640bc83f89;hp=af0044e06dce1c7ded3f33ab6c95ba48a766d7a3;hpb=57004629a0ede8f68c4b8498f74456d9e557791d;p=gdcm.git diff --git a/ChangeLog b/ChangeLog index af0044e0..a27a533d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,895 @@ +2004-10-20 Eric Boix + * src/gdcmDocument.cxx ftell() return properly stored in a long (i.e. + no longer depends on's programmers PMS = Preposterous Mood Swings ;). + * CLEANUP_ROUND (13) for gdcmPixelConvert + Substituted File::ParsePixelData() with PixelConvert::Print() new + method: + - src/gdcmParsePixels.cxx removed (only contained File::ParsePixelData()) + - src/gdcmRLEFrame.cxx, gdcmJPEGFragment.cxx added. Added a ::Print() + method to those classes. + - src/gdcmFile.[cxx|h]: + -- Added a ::Print() method. + -- PixelConverter is now a reference instead of a member. + -- gdcmPython/gdcm.i: added "using namespace gdcm" in order for + gdcm_wrap.cxx to "understand" File::GetPixelConverter() + +2004-10-18 Eric Boix + * Doc/CMakeLists.txt, doxygen.config.in: when dot is present the + collaboration diagram and inheritance diagram should be generated with + doxygen. + * Doc/Website/Sidebar.html: Dashboard is now also in the sidebar. + * gdcmPython/gdcm.i: gdcmRLEFramesInfo.h gdcmJPEGFragmentsInfo.h are + pointlessly wrapped (see + http://www.creatis.insa-lyon.fr/pipermail/dcmlib/2004-October/000692.html ) + * CLEANUP_ROUND (12) for gdcmPixelConvert (sugar is my friend stage) + - Header::GetLUTRGBA() moved to PixelConvert::GetLutRGBA() + - vtk/vtkGdcmReader.cxx: adapted to displacment of Header::GetLUTRGBA() + - Document::RLEInfo and JPEGInfo are now pointer members (Swig thing) + - src/gdcmFile.[cxx|h] and gdcmPixelConvert.[cxx|h]: + -- File::Initialise: PixelConverter setup moved away to + PixelConverter::GrabInformationsFromHeader() + -- File::GetImageDataIntoVector(): Lut R + Lut G + Lut B color table + interpretation moved away to PixelConverter::BuildRGBImage() + +2004-10-16 Mathieu Malaterre + * Remove GDCM_EXPORT keyword from gdcm::DirList due to : + http://support.microsoft.com/support/kb/articles/Q168/9/58.ASP + +2004-10-15 Eric Boix + * src/gdcmDebug.cxx last ditch attempt to get warning/error messages + displayed on Win32 when a brutal abort() occurs (because of uncatched + exception). See TODO new entry of this commit for more on this. + * TODO added new entry. + * CLEANUP_ROUND (12) for gdcmPixelConvert (nicotine is my friend stage) + src/gdcmFile.[cxx|h] and gdcmPixelConvert.[cxx|h]: + - HandleColor is no longer called from gdcmFile.cxx + - gdcmPixelConvert.cxx clean up on method arguments and internal + variable names for semantical coherence. + +2004-10-14 Mathieu Malaterre + * Finished lossless transition, not only do we now read all lossless jpeg + images, without the need of the Cornwell lib, but we do read them properly now + * To reduce code (well to avoid code duplication), I defined a common place + for jpeg read/write: gdcmJpeg.cxx. Now gdcmJpeg[8,12 16] include this file and + redefine symbols. This is not prefect but this the best solution I found for a + compilation time jpeg option. + +2004-10-13 Mathieu Malaterre + * Update jpeg ijg lib to support lossless jpeg implementation + For more info look in jpeg/libijg/README.GDCM.txt for necessary steps to + reproduce at home. + * Also added a special copyright for dcmtk since we use their bugfixes. + Thanks dcmtk crew ! + +2004-10-13 Eric Boix + * Doc/Website/MailingList.html added (Sidebar.html changed accordingly). + * gdcmPython/gdcm.i: fix for compilation of wrappers (Note: %include order + matters, as stated in warning note at begining of %include section). + * src/gdcmDicomDir*.[cxx|h]: coding style + * src/gdcmDocument.h: doxygen \ref seems uncompatible with \todo. + * src/gdcmJpeg8.cxx: doxygen fix. + * CLEANUP_ROUND (12) for gdcmPixelConvert (seing the ligth stage) + src/gdcmFile.[cxx|h] and gdcmPixelConvert.[cxx|h]: color handling moved + from File:: to PixelConvert::. + +2004-10-12 Eric Boix + * CLEANUP_ROUND (11) for gdcmPixelConvert (cafeine is my friend stage) + src/gdcmFile.[cxx|h] and gdcmPixelConvert.[cxx|h]: + - more code moved away from File:: to PixelConvert:: + - fat setup of PixelConverter set in place in File::Initialise. + +2004-10-12 Mathieu Malaterre + * Apply patch for namespace in gdcm. Didn't rename files for keeping a sort of + namespace at the file system level. So now you should convert your examples + like this: + gdcmHeader -> gdcm::Header + It would be nice if people keep in mind to no open the namespace, since it + allows compilation on broken plateform which were defining common symbol in + the standart namespace (like LP, Unknown ...) + +2004-10-10 Eric Boix + * CLEANUP_ROUND (10) for gdcmPixelConvert (Xanax is my friend stage) + The JPEG fragments are now parsed at the same stage than the RLE + information. All code related to JPEG is now in gdcmPixelConvert: + - src/gdcmJPEGFragment.h and gdcmJPEGFragmentsInfo.[h|cxx] added + - src/gdcmJpeg12.cxx, gdcmJpeg2000.cxx and gdcmJpeg8.cxx no longer + export a gdcmFile:: method. Those are simply global functions + (for the time being this is better than having them attach to + either gdcmFile:: or gdcmPixelConvert::). + - src/gdcmDocument.[cxx|h], gdcmDocument:: now parser the JPEG fragments + and stores the result in a gdcmJPEGFragmentsInfo. + - src/gdcmFile.[cxx|h] and gdcmPixelConvert.[cxx|h]: all JPEG related + code (among other stuff) moved away from gdcmFile:; to + gdcmPixelConvert:: + +2004-10-08 Eric Boix + * src/gdcmCommon.h now declares int8_t for non stdint.h plateforms. + * CLEANUP_ROUND (7) for gdcmPixelConvert (lost at sea) + - src/gdcmFile.h gdcmPixelConvert.cxx gdcmPixelConvert.h gdcmRLE.cxx: + clean up of RLE related code. + * CLEANUP_ROUND (8) for gdcmPixelConvert (end of RLE nigthmare) + - src/gdcmRLE.cxx removed + - src/gdcmPixelConvert.cxx all RLE code is now in PixelConvert:: + - src/CMakeLists.txt gdcmFile.[cxx|h] changed accordingly + - src/gdcmRLEFrame*.h gdcmPixelConvert is now a friend class. + * CLEANUP_ROUND (9) for gdcmPixelConvert + - src/gdcmFile.[cxx|h} gdcmPixelConvert.[cxx|h], SwapZone(), + ConvertReorderEndianity(), ConvertDecmpres12BitsTo16Bits() moved + away from gdcmFile:: to gdcmPixelConvert::. + +2004-10-07 Eric Boix + * CLEANUP_ROUND (5) for gdcmPixelConvert (Upshit creek without a paddle) + - src/gdcmDocument.[cxx|h] Parse7Fe0 renamed to ComputeRLEInfo. + This is because Parse7Fe0 used to parse the pixels to compute the + length. This task was passed over to FindDocEntryLengthOB() a long + time ago, EXCEPT I had forgotten the OW case... + Hence Parse7Fe0 was no longer necessary. When renaming to ComputeRLEInfo + we just recylce the code for parsing RLE fragments and computing + offsets. + * CLEANUP_ROUND (6) for gdcmPixelConvert (man, I need a paddle bad) + - src/gdcmRLE.cxx: is now much simpler and avoids code replication + with the retired Parse7Fe0(). + - src/gdcmRLEFrame.h: type fix for properly computing OffSet[] + - src/gdcmDocument.cxx: segments offset are now correct + clean up. + +2004-10-06 Eric Boix + * CLEANUP_ROUND (3) for gdcmPixelConvert (nightmare stage) + - src/gdcmRLEFramesInfo.[cxx|h], gdcmRLEFrame.h added + - src/gdcmDocument.[cxx|h] ::Parse7FE0 now sets up the RLEInfo. + - src/CMakeLists.txt: alphabetic order reodering + new entries. + * CLEANUP_ROUND (4) for gdcmPixelConvert + - src/gdcmDocument.[cxx|h] ::ParseDES and ::ParseSQ no longer bother + to return an unused length. + +2004-10-09 Mathieu Malaterre + * Remove all sprintf from the code to centralize in one spot in gdcmUtil + this should be cleanner from the plane view. The iostream are erally a pain + to use to do simple stuff. + +2004-10-04 Mathieu Malaterre + * Redo the compilation of the ijg jpeg library. Now only one source is + necesseray. No need to rename file by hand what so ever. CMake handle the + copying of the file within different directory, configure header file to + modify some symbol. The only addition made to ijg wasd a mangle table so + that symbol are different wether we are within 8bits or 12bits. + +2004-10-01 Eric Boix + * Added documentation of vtkgdcmReader on Website: + - testvtkGdcmReader.cxx renamed to vtkGdcmDemo.cxx (to be compatible + with it's binary name). + - vtk/vtkGdcmDemo.cxx and vtkgdcmViewer.cxx: added comments for + the Website to be more complete. + - Doc/doxygen.config.in: vtk/vtkGdcmReader.cxx now appears on + doxygenated documentation. + - Doc/DoxyVtkGdcmReaderExamples.txt added + (see http://www.creatis.insa-lyon.fr/Public/Gdcm/html.developper/ + DoxyVtkGdmReaderExamples.html ) + * src/win32, vtk/win32 manually maintained .dsp and .dsw removed. + * CLEANUP_ROUND (3) for gdcmPixelConvert + - src/gdcmFile.cxx, gdcmFile.h splitting GetImageDataIntoVectorRaw + +2004-09-29 Eric Boix + * CLEANUP_ROUND (2) for gdcmPixelConvert + - src/gdcmFile.cxx, gdcmFile.h splitting GetImageDataIntoVectorRaw + +2004-09-29 Eric Boix + * CLEANUP_ROUND for gdcmPixelConvert: + - src/gdcmFile.cxx, gdcmFile.h, gdcmHeader.cxx, gdcmHeader.h clean up + - src/gdcmPixelStuff[h|cxx] removed + - src/gdcmPixelConvert[h|cxx] added. Preparatory work included. + - src/CMakeLists.txt changed accordingly + * GDCMHOME clean up: + - MANIFEST.in, WrapSwig.py, WrapVTK.py, distutilsWrapping.py and + gdcmVersion.py moved to newly created ATTIC related + gdcmPython/SetupOldies/ directory. + * Autotools clean up: + - */*/Makefile.am removed AT EXCEPTION of gdcmPython/Makefile.am + - autogen.sh configure.in acinclude.m4 python.m4 removed + +2004-09-27 Eric Boix + * src/*.cxx *.h Reference to License.htm fixed to License.html. + * Doc/CMakeLists.txt, doxygen.config.in: fix. + * Doc/Website/ConformanceSummary.html, minimal conformance statement added. + +2004-09-24 Eric Boix + * TODO updated with Mathieu suggestions. I proposed a template for + describing TODO entries and used it for new entries. + * Added Doc/Website/CodingStyle.html, Developpers.html, + DeveloppersPython.html, GdcmDataCvs.html and + DownloadVersion0_1.html, DownloadVersion0_3.html. + * Some Doc/*.txt Doxygen files (which do not really concern the + documentation itself, but the website) moved to html and + placed in directory Doc/Website: + - Doc/DoxyDevelInstal.txt moved to Doc/Website/Developpers.html + - Doc/DoxyInstallation.txt moved to Doc/Website/Installation.html + - Doc/DoxyIntroduction.txt included in Doc/Website/Main.html + * Doc/DoxyfileDeveloppers, DoxyfileUsers, Makefile.am oldies removed. + * CMakeLists.txt changed accordingly. + * DEVELOPPER spread out in Doc/Website/Developpers.html, CodingStyle.html, + DeveloppersPython.html + * INSTALL nows refers to Doc/Website/Installation.html + +2004-09-23 Eric Boix + * Added Doc/Website directory, that contains a first raw version + of gdcm Web site. + +2004-09-23 Jean-Pierre Roux + * FIX In order not to be poluted any longer by casting problems, + the member VoidArea of gdcmBinEntry is now uint8_t* (instead of void *) + we can now delete[] it safely + * VoidArea is now called BinArea (less confusing name), + and all the methods called ...VoidArea... are now ... BinArea... + * class gdcmObject is now called gdcmDicomDirObject (less confusing name) + +2004-09-22 Eric Boix + * src/gdcmDocument.cxx: gdcmDocument::~gdcmDocument() doesn't clear (nor + clear) TagHT, which is an inherited member of gdcmElementSet. It is + up to the destructor of gdcmElementSet to clean up TagHt and it's + pointed content. + +2004-09-21 Eric Boix + * Test/CMakeLists.txt: update to follow gdcmData renamings. + * src/gdcmCommon.h, gdcmDocument.cxx: doxygen typos + +2004-09-17 Eric Boix + * 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 + * 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 + * 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 + where 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 + * Test/TestAllEntryVerify.cxx minor fix and added comments. + +2004-08-03 Eric Boix + * 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 + * 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 + * 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 + * 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 + * 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 + * 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 + * 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 + * 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 + * 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 + * 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 + * 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 + * 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 + * DEVELOPPER: added a proposition of coding style. + * src/gdcmDocEntry.h: removed every inline declaration (for test of + coding style). + +2004-06-23 Eric Boix + * 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 + * 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 + * 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 + * 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 + * 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 + * 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 + * 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 + 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 + #include + 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 + * 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 + * 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 + * 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 + * 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 + * 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 + * 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 * vtk/vtkGdcmReader.cxx : bug fix in the setting of file name @@ -33,12 +925,12 @@ 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... + 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) + (this was not true before) 2004-04-28 Jean-Pierre Roux * ENH add the provisional gdcmHeader::SQDepthLevel to allow