Add the command line argument manager option
dict=fullPathNamePricateDictionaryFile
to allow user to see with no extra coding what differences makes the use or not
of a private Dicom Dictionary.
e.g.
Add the methods Dict:AddDict(fullPathPrivateDictionaryFileName)
and Dict::RemoveDict(fullPathPrivateDictionaryFileName)
to allow user to choose the 'Private Dictionary' he wants to work with.
One can dream about a better API;
This one allow right now anybody to see very easyly
if the use of a given private dicom dictionary is of any help or not.
jpr [Wed, 31 Aug 2005 16:36:08 +0000 (16:36 +0000)]
Replace
< <LI> Allow parsing the <TT>Shadow groups</TT> against a user supplied
< private <TT>Dicom Dictionary</TT> (pfff!...)
By
> <LI> Allow manual adjunction / automatic recognition (pfff!...)
> of the private <TT>Dicom Dictionary</TT>
> to be used to parse <TT>Shadow groups</TT> against.
jpr [Wed, 31 Aug 2005 16:32:37 +0000 (16:32 +0000)]
Comments: It shouldn't be too difficult to 'manualy' ask memory merging
of a Private Dict into the public one (I can do it soon).
Automatic recognition of the Private Dict to be used seems hopeless.
jpr [Wed, 31 Aug 2005 09:29:10 +0000 (09:29 +0000)]
Replace stupid method names :
DicomDir::WriteDicomDir and DicomDir::AnonymizeDicomDir
by
DicomDir::Write and DicomDir::Anonymize
Thx to Benoit for repporting oddity
jpr [Wed, 31 Aug 2005 08:37:53 +0000 (08:37 +0000)]
Add examples of use of
SerieHelper::SetUserLessThanFunction(userSuppliedLessThanFunction)
use
order=group1-elem1,group2-elem2,...
(in hexa, no space)
if you want to use them as a sort criterium
Right now : ValEntries only -just an example-
or
order=name
if you want to sort on the file name (Why not? Just an example...)
jpr [Wed, 31 Aug 2005 08:28:32 +0000 (08:28 +0000)]
Fix Benoit's bug :
Passing the right number of files should help vtkGdcmReader to work
with the result of SerieHelper
Well ...
TestSerieHelper has to be enforced ;-)
regrain [Tue, 30 Aug 2005 14:40:28 +0000 (14:40 +0000)]
* Rename the NO_SEQ, NO_SHADOW, NO_SHADOWSEQ to
GDCM_LD_NOSEQ, GDCM_LD_NOSHADOW,
GDCM_LD_NOSHADOWSEQ
* Now vtkgdcmReader parses only one time each files
-- BeNours
malaterre [Mon, 29 Aug 2005 14:55:09 +0000 (14:55 +0000)]
BUG: A SQ is always VM=1, corrected typo from document: www.medical.philips.com/main/company/connectivity/assets/docs/dicomcs/mr91.pdf, thanks to JP for report
jpr [Mon, 29 Aug 2005 13:05:01 +0000 (13:05 +0000)]
Add
void Document::AddForceLoadElement(uint16_t group, uint16_t elem); method
to allow forcing the loading of some elements, even if they exceed
the current MAX_SIZE_LOAD_ELEMENT_VALUE (default : 4096)
jpr [Sun, 28 Aug 2005 17:10:49 +0000 (17:10 +0000)]
// ------------------------------------------------------------------------
// gdcm mechanisms don't allow user to read an image
// whose header contains wrong physical info (say : wrong Row Number ...)
// and re-write with a right value.
// This program does the job by brutally overwritting the wrong values.
// It may be usefull to save a set of images ...
// (It dosn't allow to *add* a missing field)
// ------------------------------------------------------------------------
"\n PatchHeader :\n ",
" Allows aware user to patch an image header, without loading image. ",
" Warning : the image(s) is/are overwritten ",
" to preserve image(s) integrity, use a copy. ",
" WARNING : *NO CHECK* is performed on the new values. ",
" Use only if you are sure the original values are wrong ",
" *and* your values are right... ",
"usage: PatchHeader {filein=inputFileName|dirin=inputDirectoryName} ",
" [ { [size=] | [rows=][columns=] } ] [planes=] ",
" [bitsallocated=] [bitsstored=] ",
" [highbit=] [samplesperpixel=] ",
" [pixelrepresentation=] [samplesperpixel=] ",
" [ { [noshadowseq] | [noshadow][noseq] } ] [debug] ",
" ",
" inputFileName : Name of the (single) file user wants to modify ",
" inputDirectoryName : user wants to modify *all* the files ",
" within the directory ",
" size : new (square) size, to owerwrite old (wrong) one ",
" or ",
" rows : new Rows number, to owerwrite old (wrong) one ",
" columns : new Columns number, to owerwrite old (wrong) one ",
" planes : new Planes number, ... ",
" bitsallocated : new Bits Allocated number, ... ",
" bitsstored : new Bits Stored number, ... ",
" highbit : new High Bit number, ... ",
" samplesperpixel : new Samples Per Pixel, ... ",
" pixelrepresentation : new Pixel Representation, ... ",
" ",
" noshadowseq: user doesn't want to load Private Sequences ",
" noshadow : user doesn't want to load Private groups (odd number) ",
" noseq : user doesn't want to load Sequences ",
" debug : user wants to run the program in 'debug mode' ",
jpr [Thu, 25 Aug 2005 14:59:49 +0000 (14:59 +0000)]
Now Print displays the BinEntry Content (if it's printable, and loaded)
Usefull for a lot od Implicit VR 'Bin'Entry (if we knew there VR, they wouldn't
be Bin ...)
Appreciate the difference having a look at PrintFile result for
gdcmData/SIEMENS_MAGNETOM-12-MONO2-FileSeq0.dcm.
jpr [Tue, 23 Aug 2005 12:57:49 +0000 (12:57 +0000)]
Brutal patch, waiting till we find a clever way to guess
if a doc entry is a Sequence,
- when it's odd number
- and the file is Implicit VR Transfert Syntax
It solves temporarily some Philips Medical Systems image problems
jpr [Mon, 22 Aug 2005 12:30:36 +0000 (12:30 +0000)]
Replace
void SetCheckFileCoherenceLight();
by
vtkSetMacro(AllowLightChecking, int);
vtkGetMacro(AllowLightChecking, int);
vtkBooleanMacro(AllowLightChecking, int);
to be vtk compliant
vtkgdcmSerieViewer shows an example for using user supplied function.
(it uses now the Argument Manager)
vtkgdcmSerieViewer :
Display a Serie within a Directory
You can navigate through the stack by hitting any character key.
usage: vtkgdcmSerieViewer filein=fileName [noshadowseq][noshadow][noseq]
[reverse] [{[mirror]|[topdown]|[rotate]}]
[check][debug]
User is now allowed to pass a Pointer to a function of his own
to allow modification of pixel order (i.e. : Mirror, TopDown, )
to gdcm::FileHeleper, using SetUserFunction(userSuppliedFunction)
described as : void userSuppliedFunction(uint8_t *im, gdcm::File *f);
NB : the "uint8_t *" type of first param is just for prototyping.
User will Cast it according what he founds with f->GetPixelType()
See ctkgdcmSerieViewer for an example