X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=inline;f=Doc%2FWebsite%2FNews.html;h=97ce724411f263eb76548d6151b5387d5c9155a2;hb=2352f408c4e96bb21ee38596e75617894621f4e7;hp=20d3a74c81c6ff01656007459bd12ad8dfe2e1bf;hpb=6cde43ffac8542b354238d04bc2544a87ae58dcd;p=gdcm.git diff --git a/Doc/Website/News.html b/Doc/Website/News.html index 20d3a74c..97ce7244 100644 --- a/Doc/Website/News.html +++ b/Doc/Website/News.html @@ -24,25 +24,27 @@ Any contribution is welcome.
+ ValEntry(DictEntry *e); + BinEntry(DictEntry *e); +-->DataEntry *New(uint16_t group,uint16_t elem, VRKey const &vr); + + std::string const &ValEntry::GetValue() const; + std::string const &BinEntry::GetValue() const; +-->std::string const &DataEntry::GetString() const; + + uint8_t *BinEntry::GetBinArea(); +-->uint8_t *DataEntry::GetBinArea(); + + void ValEntry::SetValue(std::string const &value); + void BinEntry::SetValue(std::string const &value); +-->void DataEntry::SetString(std::string const &value); + + void BinEntry::SetBinArea( uint8_t *area, bool self = true ); +-->void DataEntry::SetBinArea( uint8_t *area, bool self = true ); + + void ValEntry::CopyValEntry(uint16_t gr, uint16_t el); +-->void DataEntry::CopyDataEntry(uint16_t gr, uint16_t el, VRKey const &vr); ++
+ DataEntry *FileHelper::CopyDataEntry(uint16_t group, uint16_t elem); +-->DataEntry *FileHelper::CopyDataEntry(uint16_t group, uint16_t elem, + const VRKey &vr = GDCM_VRUNKNOWN); + + void FileHelper::CheckMandatoryEntry(uint16_t group, uint16_t elem, std::string value); +-->void FileHelper::CheckMandatoryEntry(uint16_t group, uint16_t elem, std::string value, + const VRKey &vr = GDCM_VRUNKNOWN); + + void FileHelper::SetMandatoryEntry(uint16_t group, uint16_t elem, std::string value); +-->void FileHelper::SetMandatoryEntry(uint16_t group, uint16_t elem, std::string value, + const VRKey &vr = GDCM_VRUNKNOWN); + + void FileHelper::CopyMandatoryEntry(uint16_t group, uint16_t elem, std::string value); +-->void FileHelper::CopyMandatoryEntry(uint16_t group, uint16_t elem, std::string value, + const VRKey &vr = GDCM_VRUNKNOWN); ++CopyMandatoryEntry(0x0002,0x0003,sop) +
+For multivaluated numeric DataEntries +-->void DataEntry::SetValue(const uint32_t &id,const double &val); +-->double DataEntry::GetValue(const uint32_t &id) const; +-->uint32_t DataEntry::GetValueCount() const; + +For converting 'Decimal String' +-->bool GetDSValue(std::vector <double> &valueVector); ++
+ gdcm::SerieHelper *sh= new gdcm::SerieHelper(); + // if user wants *not* to load some parts of the file headers + sh->SetLoadMode(loadMode); + + // if user wants *not* to load some files + sh->AddRestriction(group, element, value, operator); + sh->AddRestriction( ... + sh->SetDirectory(directoryWithImages); + + // if user *knows* how to order his files + sh->SetUserLessThanFunction(userSuppliedComparisonFunction); + // or/and + // if user wants to sort reverse order + sh->SetSortOrderToReverse(); + + // here, we suppose only the first 'Single SerieUID' Fileset is of interest + // Just iterate using sh->NextSingleSerieUIDFileSet() + // if you want to get all of them + gdcm::FileList *l = sh->GetFirstSingleSerieUIDFileSet(); + + // if user is doesn't trust too much the files with same Serie UID + if ( !sh->IsCoherent(l) ) + return; // not same sizes, or not same 'pixel type' -> stop + + sh->OrderFileList(l); // sort the list + + vtkGdcmReader *reader = vtkGdcmReader::New(); + // if user wants to modify pixel order (Mirror, TopDown, ...) + // he has to supply the function that does the job + // (a *very* simple example is given in vtkgdcmSerieViewer.cxx) + reader->SetUserFunction (userSuppliedFunction); + + // to pass a 'Single SerieUID' Fileset as produced by gdcm::SerieHelper + reader->SetCoherentFileList(l); + reader->Update(); ++ You can see a full example in vtk/vtkgdcmSerieViewer.cxx
gdcmSerieHelper *sh = new gdcmSerieHelper(); @@ -134,17 +460,20 @@ Any contribution is welcome. s->OrderFileList(l); vtkGdcmReader *gr = new vtkGdcmReader(); - gr->SetCoherentFileList(l); + gr->SetCoherentFileList(l); + gr->Update();This works with a directory that contains only one 'Serie' (same Serie UID for all the images).
gdcm::DicomDir *d = new gdcm::DicomDir(); d->SetDirectoryName(dirName); @@ -173,15 +502,17 @@ Any contribution is welcome.
- gdcm::File *f = new gdcm::File(); + he doesn't want to deal with SeqEntry + (every time it's possible, i.e for 'true length' Sequences)
+ and/or he doesn't want to deal with Shadow groups + (every time it's possible i.e. when element 0x0000 + exists for this Group)
+ or he doesn't want to deal with SeqEntry that belong to a + Shadow group (every time it's possible + -'true length' Sequence-)
+ use :
++ gdcm::File *f = new gdcm::File(); f->SetLoadMode(NO_SEQ); | depending on what f->SetLoadMode(NO_SHADOW); | you want *not* f->SetLoadMode(NO_SEQ | NO_SHADOW);| to load from the @@ -194,23 +525,24 @@ Any contribution is welcome. gdcm::File *f = new gdcm::File(fileName);
- gdcm::DicomDir *f = new gdcm::DicomDir(); + he doesn't want to deal with SeqEntry + (every time it's possible, i.e for 'true length' Sequences)
+ and/or he doesn't want to deal with Shadow groups + (every time it's possible i.e. when element 0x0000 + exists for this Group)
+ or he doesn't want to deal with SeqEntry that belong to a + Shadow group (every time it's possible + -'true length' Sequence-)
+ when he parses all the Dicom files within a given directory.
+ use :
++ gdcm::DicomDir *f = new gdcm::DicomDir(); f->SetLoadMode(NO_SEQ); | depending on what f->SetLoadMode(NO_SHADOW); | you want *not* f->SetLoadMode(NO_SEQ | NO_SHADOW);| to load from the files f->SetLoadMode(NO_SHADOWSEQ); | within the root directory - f->SetDirectoryName(rootDirectoryName); - f->Load( ); + f->SetDirectoryName(rootDirectoryName); + f->Load( );Don't use any longer old deprecated style:
@@ -220,32 +552,32 @@ Any contribution is welcome.- Bug fixes
+
- No more trouble when the 'endianess' switches within Sequences. +
- No more trouble with 'no length Sequences' belonging to a + Shadow Group when they are 'Implicit VR'.
- The difference between MONOCHROME1 (low values = bright, high values = dark) and MONOCHROME2 (low values = dark, high values = bright) is now taken into account.
It's no longer up to the user to change the pixels value- Writing a 'True Dicom' image after reading an ACR-NEMA image does not request any longer from the user to build up - 'manually' the Meta Elements group (Ox0002) + 'manually' the Meta Elements group (0x0002)
- Old '24 Bits' ACR-NEMA are now correctly re-written in DICOM V3 mode.
- Element 0x0000 of Shadow groups is always forced to be a ValEntry and its VR is forced to UL -
- +
- A.P.I. breaking modifications (since previous version : 1.0)
- NEVER more API breaking modifications !!! - +
- Known bugs
-
- Use of Implicit Value Representation writting mode may - causes troubles, when there are some SQ belonging to a - Shadow Group.
- Better you use Explicit Value Representation writting mode ... +