Skip to content
GitLab
Explore
Sign in
Register
Commits on Source (5)
New upstream version 3.0.3
· dea63293
Gert Wollny
authored
Oct 08, 2019
dea63293
d/p/: Remove patches that were applied upstream
· 60d42c44
Gert Wollny
authored
Oct 08, 2019
60d42c44
d/rules: Fix cmake file patchup code (Thanks Mathieu)
· 16f748cb
Gert Wollny
authored
Oct 08, 2019
16f748cb
Update changelog for new upload
· 55b2a649
Gert Wollny
authored
Oct 08, 2019
55b2a649
rebase and update changelog again
· 81372011
Gert Wollny
authored
Oct 08, 2019
81372011
Show whitespace changes
Inline
Side-by-side
Applications/Cxx/gdcmscanner.cxx
View file @
81372011
...
...
@@ -32,6 +32,10 @@
#include
"gdcmTrace.h"
#include
"gdcmVersion.h"
#include
"gdcmSimpleSubjectWatcher.h"
#include
"gdcmGlobal.h"
#include
"gdcmDicts.h"
#include
"gdcmDict.h"
#include
"gdcmDictEntry.h"
#include
<string>
#include
<iostream>
...
...
@@ -57,10 +61,13 @@ static void PrintHelp()
std
::
cout
<<
"Parameter (required):"
<<
std
::
endl
;
std
::
cout
<<
" -d --dir DICOM directory"
<<
std
::
endl
;
std
::
cout
<<
" -t --tag %d,%d DICOM tag(s) to look for"
<<
std
::
endl
;
std
::
cout
<<
" -k --keyword %s DICOM keyword(s) to look for"
<<
std
::
endl
;
std
::
cout
<<
" -P --private-tag %d,%d,%s DICOM private tag(s) to look for"
<<
std
::
endl
;
std
::
cout
<<
"Options:"
<<
std
::
endl
;
std
::
cout
<<
" -p --print Print output."
<<
std
::
endl
;
std
::
cout
<<
" -r --recursive Recusively descend directory."
<<
std
::
endl
;
std
::
cout
<<
" -r --recursive Recursively descend directory."
<<
std
::
endl
;
std
::
cout
<<
" --strict Use strict parser (faster but less tolerant with bogus DICOM files)."
<<
std
::
endl
;
std
::
cout
<<
" --table Use Table output."
<<
std
::
endl
;
std
::
cout
<<
"General Options:"
<<
std
::
endl
;
std
::
cout
<<
" -V --verbose more verbose (warning+error)."
<<
std
::
endl
;
std
::
cout
<<
" -W --warning print warning info."
<<
std
::
endl
;
...
...
@@ -75,7 +82,7 @@ typedef std::vector<gdcm::PrivateTag> VectorPrivateTags;
template
<
typename
TScanner
>
static
int
DoIt
(
gdcm
::
Directory
const
&
d
,
bool
const
&
print
,
bool
const
&
print
,
int
table
,
VectorTags
const
&
tags
,
VectorPrivateTags
const
&
privatetags
)
{
...
...
@@ -96,7 +103,13 @@ static int DoIt(
std
::
cerr
<<
"Scanner failed"
<<
std
::
endl
;
return
1
;
}
if
(
print
)
s
.
Print
(
std
::
cout
);
if
(
print
)
{
if
(
table
)
s
.
PrintTable
(
std
::
cout
);
else
s
.
Print
(
std
::
cout
);
}
return
0
;
}
...
...
@@ -114,8 +127,12 @@ int main(int argc, char *argv[])
VectorPrivateTags
privatetags
;
gdcm
::
Tag
tag
;
gdcm
::
PrivateTag
privatetag
;
static
const
gdcm
::
Global
&
g
=
gdcm
::
Global
::
GetInstance
();
static
const
gdcm
::
Dicts
&
dicts
=
g
.
GetDicts
();
static
const
gdcm
::
Dict
&
pubdict
=
dicts
.
GetPublicDict
();
int
strict
=
0
;
int
table
=
0
;
int
verbose
=
0
;
int
warning
=
0
;
int
debug
=
0
;
...
...
@@ -127,25 +144,27 @@ int main(int argc, char *argv[])
//int this_option_optind = optind ? optind : 1;
int
option_index
=
0
;
static
struct
option
long_options
[]
=
{
{
"dir"
,
1
,
nullptr
,
0
},
{
"tag"
,
1
,
nullptr
,
0
},
{
"recursive"
,
1
,
nullptr
,
0
},
{
"print"
,
1
,
nullptr
,
0
},
{
"private-tag"
,
1
,
nullptr
,
0
},
{
"strict"
,
0
,
&
strict
,
1
},
{
"dir"
,
required_argument
,
nullptr
,
'd'
},
{
"tag"
,
required_argument
,
nullptr
,
't'
},
{
"recursive"
,
no_argument
,
nullptr
,
'r'
},
{
"print"
,
no_argument
,
nullptr
,
'p'
},
{
"private-tag"
,
required_argument
,
nullptr
,
'P'
},
{
"keyword"
,
required_argument
,
nullptr
,
'k'
},
{
"strict"
,
no_argument
,
&
strict
,
1
},
{
"table"
,
no_argument
,
&
table
,
1
},
// General options !
{
"verbose"
,
0
,
&
verbose
,
1
},
{
"warning"
,
0
,
&
warning
,
1
},
{
"debug"
,
0
,
&
debug
,
1
},
{
"error"
,
0
,
&
error
,
1
},
{
"help"
,
0
,
&
help
,
1
},
{
"version"
,
0
,
&
version
,
1
},
{
"verbose"
,
no_argument
,
nullptr
,
'V'
},
{
"warning"
,
no_argument
,
nullptr
,
'W'
},
{
"debug"
,
no_argument
,
nullptr
,
'D'
},
{
"error"
,
no_argument
,
nullptr
,
'E'
},
{
"help"
,
no_argument
,
nullptr
,
'H'
},
{
"version"
,
no_argument
,
nullptr
,
'v'
},
{
nullptr
,
0
,
nullptr
,
0
}
};
c
=
getopt_long
(
argc
,
argv
,
"d:t:rpP:VWDEhv"
,
c
=
getopt_long
(
argc
,
argv
,
"d:t:rpP:
k:
VWDEhv"
,
long_options
,
&
option_index
);
if
(
c
==
-
1
)
{
...
...
@@ -155,18 +174,10 @@ int main(int argc, char *argv[])
switch
(
c
)
{
case
0
:
if
(
optarg
)
{
//const char *s = long_options[option_index].name;
//printf ("option %s", s);
//if (optarg)
// {
// if( option_index == 0 ) /* input */
// {
// assert( strcmp(s, "input") == 0 );
// }
// printf (" with arg %s", optarg);
// }
//printf ("\n");
const
char
*
s
=
long_options
[
option_index
].
name
;
(
void
)
s
;
assert
(
0
);
}
break
;
...
...
@@ -180,6 +191,20 @@ int main(int argc, char *argv[])
//std::cerr << optarg << std::endl;
break
;
case
'k'
:
{
const
char
*
keyword
=
optarg
;
/*const gdcm::DictEntry &dictentry =*/
pubdict
.
GetDictEntryByKeyword
(
keyword
,
tag
);
if
(
tag
!=
gdcm
::
Tag
(
0xffff
,
0xffff
)
)
tags
.
push_back
(
tag
);
else
{
std
::
cerr
<<
"Invalid keyword: "
<<
keyword
<<
std
::
endl
;
return
1
;
}
}
break
;
case
'P'
:
privatetag
.
ReadFromCommaSeparatedString
(
optarg
);
privatetags
.
push_back
(
privatetag
);
...
...
@@ -290,10 +315,16 @@ int main(int argc, char *argv[])
gdcm
::
Directory
d
;
unsigned
int
nfiles
=
d
.
Load
(
dirname
.
c_str
(),
recursive
);
if
(
!
nfiles
)
{
std
::
cerr
<<
"No files found in: "
<<
dirname
<<
std
::
endl
;
return
1
;
}
if
(
verbose
)
d
.
Print
(
std
::
cout
);
if
(
!
table
)
std
::
cout
<<
"done retrieving file list "
<<
nfiles
<<
" files found."
<<
std
::
endl
;
if
(
strict
)
return
DoIt
<
gdcm
::
StrictScanner
>
(
d
,
print
,
tags
,
privatetags
);
return
DoIt
<
gdcm
::
Scanner
>
(
d
,
print
,
tags
,
privatetags
);
return
DoIt
<
gdcm
::
StrictScanner
>
(
d
,
print
,
table
,
tags
,
privatetags
);
return
DoIt
<
gdcm
::
Scanner
>
(
d
,
print
,
table
,
tags
,
privatetags
);
}
CMakeLists.txt
View file @
81372011
...
...
@@ -17,7 +17,7 @@ endif()
#----------------------------------------------------------------------------
project
(
GDCM
VERSION 3.0.
2
VERSION 3.0.
3
LANGUAGES CXX C
)
## NOTE: the "DESCRIPTION" feature of project() was introduced in cmake 3.10.0
...
...
@@ -590,22 +590,6 @@ if(GDCM_STANDALONE)
else
()
set
(
BUILD_APPLICATIONS OFF
)
endif
()
add_subdirectory
(
Utilities
)
add_subdirectory
(
Source
)
if
(
GDCM_STANDALONE
)
add_subdirectory
(
Wrapping
)
if
(
GDCM_WRAP_CSHARP
)
add_subdirectory
(
Wrapping/Csharp
)
endif
()
endif
()
if
(
GDCM_STANDALONE
)
# After Wrapping please
if
(
BUILD_EXAMPLES
)
add_subdirectory
(
Examples
)
endif
()
endif
()
#-----------------------------------------------------------------------------
# Need pthread for the following class:
...
...
@@ -618,7 +602,7 @@ if(GDCM_STANDALONE)
endif
()
if
(
GDCM_STANDALONE
)
if
(
BUILD_TESTING
)
if
(
GDCM_
BUILD_TESTING
)
configure_file
(
${
GDCM_SOURCE_DIR
}
/CMake/CTestCustom.ctest.in
${
GDCM_BINARY_DIR
}
/CMake/CTestCustom.ctest @ONLY
)
file
(
WRITE
${
GDCM_BINARY_DIR
}
/CTestCustom.cmake
...
...
@@ -635,6 +619,21 @@ if(GDCM_STANDALONE)
endif
()
endif
()
# After enable_testing()
add_subdirectory
(
Utilities
)
add_subdirectory
(
Source
)
if
(
GDCM_STANDALONE
)
add_subdirectory
(
Wrapping
)
endif
()
if
(
GDCM_STANDALONE
)
# After Wrapping please
if
(
BUILD_EXAMPLES
)
add_subdirectory
(
Examples
)
endif
()
endif
()
#-----------------------------------------------------------------------------
if
(
GDCM_STANDALONE
)
option
(
GDCM_DOCUMENTATION
"Build source documentation using doxygen."
OFF
)
...
...
@@ -680,6 +679,11 @@ include(CMake/InstallRequiredVTKLibraries.cmake)
endif
()
endif
()
# Make sure to run doxygen after everything else (in particular vtkgdcm):
if
(
EXISTS
${
CMAKE_CURRENT_SOURCE_DIR
}
/Utilities/doxygen
)
add_subdirectory
(
Utilities/doxygen
)
endif
()
#-----------------------------------------------------------------------------
# CPack stuff
if
(
GDCM_STANDALONE
)
# disabled for ITK distribution of gdcm
...
...
Examples/Cxx/CMakeLists.txt
View file @
81372011
...
...
@@ -35,6 +35,7 @@ set(EXAMPLES_SRCS
PrintLUT
EmptyMask
DumpSiemensBase64
DumpVisusChange
TemplateEmptyImage
MakeTemplate
DeriveSeries
...
...
Examples/Cxx/DumpVisusChange.cxx
0 → 100644
View file @
81372011
/*=========================================================================
Program: GDCM (Grassroots DICOM). A DICOM library
Copyright (c) 2006-2011 Mathieu Malaterre
All rights reserved.
See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
#include
"gdcmReader.h"
#include
"gdcmDirectory.h"
#include
"gdcmStringFilter.h"
#include
<vector>
#include
<algorithm>
/*
*/
static
bool
process
(
std
::
vector
<
gdcm
::
DataElement
>
&
ms
,
const
char
*
filename
)
{
using
namespace
gdcm
;
Tag
pd
(
0x7fe0
,
0x0000
);
std
::
set
<
gdcm
::
Tag
>
skiptags
;
skiptags
.
insert
(
pd
);
gdcm
::
Reader
reader
;
reader
.
SetFileName
(
filename
);
if
(
!
reader
.
ReadUpToTag
(
pd
,
skiptags
)
)
{
std
::
cerr
<<
"Failure to read: "
<<
filename
<<
std
::
endl
;
return
false
;
}
gdcm
::
File
&
file
=
reader
.
GetFile
();
gdcm
::
DataSet
&
ds1
=
file
.
GetDataSet
();
const
gdcm
::
PrivateTag
tseq1
(
0x5533
,
0x33
,
"Visus Change"
);
if
(
!
ds1
.
FindDataElement
(
tseq1
)
)
return
true
;
const
gdcm
::
DataElement
&
seq1
=
ds1
.
GetDataElement
(
tseq1
);
SmartPointer
<
SequenceOfItems
>
sqi1
=
seq1
.
GetValueAsSQ
();
const
size_t
nitems
=
sqi1
->
GetNumberOfItems
();
for
(
size_t
item
=
1
;
item
<
nitems
;
++
item
)
{
Item
&
item1
=
sqi1
->
GetItem
(
item
);
DataSet
&
ds2
=
item1
.
GetNestedDataSet
();
for
(
DataSet
::
ConstIterator
it
=
ds2
.
Begin
();
it
!=
ds2
.
End
();
++
it
)
{
DataElement
const
&
de
=
*
it
;
// cannot simply use std::set here, see there is a discrepancy in between
// operator== and operator<.
// So only use operator== here:
std
::
vector
<
DataElement
>::
iterator
vit
=
std
::
find
(
ms
.
begin
(),
ms
.
end
(),
de
);
if
(
vit
==
ms
.
end
()
)
ms
.
push_back
(
de
);
}
}
return
true
;
}
int
main
(
int
argc
,
char
*
argv
[])
{
bool
usefastpath
=
true
;
if
(
argc
<
2
)
return
1
;
using
namespace
gdcm
;
const
char
*
filename
=
argv
[
1
];
gdcm
::
Directory
::
FilenamesType
filenames
;
if
(
!
gdcm
::
System
::
FileExists
(
filename
)
)
{
std
::
cerr
<<
"Could not find file: "
<<
filename
<<
std
::
endl
;
return
1
;
}
gdcm
::
Directory
dir
;
if
(
gdcm
::
System
::
FileIsDirectory
(
filename
)
)
{
unsigned
int
nfiles
=
dir
.
Load
(
filename
,
false
);
if
(
nfiles
==
0
)
{
std
::
cerr
<<
"Could not find files: "
<<
filename
<<
std
::
endl
;
return
1
;
}
filenames
=
dir
.
GetFilenames
();
}
else
{
filenames
.
push_back
(
filename
);
}
gdcm
::
StringFilter
sf
;
Tag
pd
(
0x7fe0
,
0x0000
);
std
::
set
<
gdcm
::
Tag
>
skiptags
;
skiptags
.
insert
(
pd
);
gdcm
::
Reader
reader
;
reader
.
SetFileName
(
filenames
[
0
].
c_str
()
);
if
(
!
reader
.
ReadUpToTag
(
pd
,
skiptags
)
)
{
std
::
cerr
<<
"Could not read file: "
<<
filename
<<
std
::
endl
;
return
1
;
}
gdcm
::
File
&
file
=
reader
.
GetFile
();
sf
.
SetFile
(
file
);
if
(
usefastpath
)
{
// Heuristic, assume if private tag cannot be found in first file, skip the directory
gdcm
::
DataSet
&
ds1
=
file
.
GetDataSet
();
const
gdcm
::
PrivateTag
tseq1
(
0x5533
,
0x33
,
"Visus Change"
);
if
(
!
ds1
.
FindDataElement
(
tseq1
)
){
std
::
cerr
<<
"Could not find private tag in first file skipping whole directory: "
<<
filename
<<
std
::
endl
;
return
0
;
}
}
std
::
vector
<
DataElement
>
ms
;
for
(
gdcm
::
Directory
::
FilenamesType
::
const_iterator
cit
=
filenames
.
begin
();
cit
!=
filenames
.
end
();
++
cit
)
{
if
(
!
process
(
ms
,
cit
->
c_str
())
)
{
return
1
;
}
}
if
(
!
ms
.
empty
()
)
{
std
::
sort
(
ms
.
begin
(),
ms
.
end
());
std
::
cout
<<
filename
<<
",
\"
"
;
for
(
std
::
vector
<
DataElement
>::
const_iterator
it
=
ms
.
begin
();
it
!=
ms
.
end
();
++
it
)
{
DataElement
const
&
de
=
*
it
;
std
::
string
const
&
s
=
sf
.
ToString
(
de
);
std
::
cout
<<
de
.
GetTag
()
<<
" "
<<
s
<<
std
::
endl
;
}
std
::
cout
<<
"
\"
"
<<
std
::
endl
;
}
return
0
;
}
Source/Common/gdcmDirectory.cxx
View file @
81372011
...
...
@@ -40,7 +40,7 @@ unsigned int Directory::Load(FilenameType const &name, bool recursive)
Toplevel
=
name
;
return
Explore
(
Toplevel
,
recursive
);
}
return
false
;
return
0
;
}
unsigned
int
Directory
::
Explore
(
FilenameType
const
&
name
,
bool
recursive
)
...
...
Source/DataDictionary/gdcmPrivateDefaultDicts.cxx
View file @
81372011
...
...
@@ -38,6 +38,18 @@ typedef struct
} DICT_ENTRY;
static const DICT_ENTRY DICOMV3DataDict [] = {
{0x7fe1,0x0001,"Bioclinica",VR::UT,VM::VM1,"??",false},
{0x7fe1,0x0002,"Bioclinica",VR::LO,VM::VM1,"??",false},
{0x7fe1,0x0003,"Bioclinica",VR::LO,VM::VM1,"??",false},
{0x5533,0x0033,"Visus Change",VR::SQ,VM::VM1,"Visus Data Save Sequence",false},
{0x5533,0x0035,"Visus Change",VR::DA,VM::VM1,"Visus Data Save Date",false},
{0x5533,0x0037,"Visus Change",VR::LO,VM::VM1,"Visus Data Save Originator",false},
{0x5533,0x0039,"Visus Change",VR::FD,VM::VM1,"Visus Data Save ID",false},
{0x5533,0x003b,"Visus Change",VR::TM,VM::VM1,"?Visus Data Save Time?",false},
{0x0071,0x0021,"SIEMENS MED PT",VR::UI,VM::VM1,"Registration Matrix UID",false},
{0x0071,0x0022,"SIEMENS MED PT",VR::DT,VM::VM1,"Decay Correction DateTime",false},
{0x0071,0x0023,"SIEMENS MED PT",VR::FD,VM::VM16,"Registration Matrix",false},
{0x0071,0x0024,"SIEMENS MED PT",VR::CS,VM::VM1,"Table Motion",false},
{0x0021,0x0001,"SIEMENS MR SDR 01",VR::LO,VM::VM1,"??",false},
{0x0021,0x0001,"SIEMENS MR SDS 01",VR::IS,VM::VM1,"??",false},
{0x0021,0x0002,"SIEMENS MR SDR 01",VR::LO,VM::VM1,"??",false},
...
...
@@ -310,6 +322,7 @@ static const DICT_ENTRY DICOMV3DataDict [] = {
{0x0019,0x0050,"PMTF INFORMATION DATA^10",VR::SL,VM::VM2,"?",false },
{0x0019,0x0051,"PMTF INFORMATION DATA^10",VR::SL,VM::VM2,"?",false },
{0x0019,0x0052,"PMTF INFORMATION DATA^10",VR::LO,VM::VM1,"?",false },
{0x0019,0x0052,"PMTF INFORMATION DATA^12",VR::FL,VM::VM2,"?",false },
{0x0019,0x0054,"PMTF INFORMATION DATA^10",VR::US,VM::VM1,"?",false },
{0x0019,0x0055,"PMTF INFORMATION DATA^10",VR::US,VM::VM1,"?",false },
{0x0019,0x0055,"PMTF INFORMATION DATA^11",VR::LO,VM::VM1,"?",false },
...
...
@@ -326,10 +339,13 @@ static const DICT_ENTRY DICOMV3DataDict [] = {
{0x0019,0x005d,"PMTF INFORMATION DATA^11",VR::SL,VM::VM1,"?",false },
{0x0019,0x005e,"PMTF INFORMATION DATA^10",VR::SL,VM::VM1,"?",false },
{0x0019,0x005f,"PMTF INFORMATION DATA^10",VR::FL,VM::VM1,"?",false },
{0x0019,0x005f,"PMTF INFORMATION DATA^11",VR::FL,VM::VM1,"?",false },
{0x0019,0x0060,"PMTF INFORMATION DATA^10",VR::US,VM::VM1,"?",false },
{0x0019,0x0060,"PMTF INFORMATION DATA^11",VR::SL,VM::VM1,"?",false },
{0x0019,0x0061,"PMTF INFORMATION DATA^10",VR::US,VM::VM1,"?",false },
{0x0019,0x0061,"PMTF INFORMATION DATA^11",VR::FL,VM::VM1,"?",false },
{0x0019,0x0062,"PMTF INFORMATION DATA^10",VR::US,VM::VM1,"?",false },
{0x0019,0x0062,"PMTF INFORMATION DATA^11",VR::FL,VM::VM1,"?",false },
{0x0019,0x0063,"PMTF INFORMATION DATA^10",VR::FL,VM::VM1,"?",false },
{0x0019,0x0063,"PMTF INFORMATION DATA^11",VR::SL,VM::VM1,"?",false },
{0x0019,0x0064,"PMTF INFORMATION DATA^10",VR::FL,VM::VM1,"?",false },
...
...
@@ -348,7 +364,10 @@ static const DICT_ENTRY DICOMV3DataDict [] = {
{0x0019,0x006f,"PMTF INFORMATION DATA^10",VR::SL,VM::VM1,"?",false },
{0x0019,0x006f,"PMTF INFORMATION DATA^11",VR::FL,VM::VM1,"?",false },
{0x0019,0x0070,"PMTF INFORMATION DATA^10",VR::LO,VM::VM1,"?",false },
{0x0019,0x0070,"PMTF INFORMATION DATA^11",VR::FL,VM::VM1,"?",false },
{0x0019,0x0071,"PMTF INFORMATION DATA^10",VR::LO,VM::VM1,"?Sequence Options?",false },
{0x0019,0x0071,"PMTF INFORMATION DATA^11",VR::SL,VM::VM1,"?",false },
{0x0019,0x0072,"PMTF INFORMATION DATA^11",VR::FL,VM::VM1,"?",false },
{0x0019,0x0073,"PMTF INFORMATION DATA^10",VR::LO,VM::VM1,"?Sequence Options?",false },
{0x0019,0x0075,"PMTF INFORMATION DATA^10",VR::LO,VM::VM1,"?",false },
{0x0019,0x0076,"PMTF INFORMATION DATA^10",VR::LO,VM::VM1,"?",false },
...
...
@@ -382,8 +401,10 @@ static const DICT_ENTRY DICOMV3DataDict [] = {
{0x0019,0x008a,"PMTF INFORMATION DATA^10",VR::SL,VM::VM1_n,"?",false },
{0x0019,0x008a,"PMTF INFORMATION DATA^11",VR::US,VM::VM1,"?",false },
{0x0019,0x008a,"PMTF INFORMATION DATA^12",VR::US,VM::VM1,"Series Number Global",false },
{0x0019,0x008b,"PMTF INFORMATION DATA^11",VR::SL,VM::VM1,"?",false },
{0x0019,0x008b,"PMTF INFORMATION DATA^12",VR::US,VM::VM1,"?",false },
{0x0019,0x008c,"PMTF INFORMATION DATA^10",VR::UL,VM::VM1,"?",false },
{0x0019,0x008c,"PMTF INFORMATION DATA^11",VR::SL,VM::VM1,"?",false },
{0x0019,0x008d,"PMTF INFORMATION DATA^10",VR::TM,VM::VM1,"?",false },
{0x0019,0x008e,"PMTF INFORMATION DATA^10",VR::SL,VM::VM1,"?",false },
{0x0019,0x008f,"PMTF INFORMATION DATA^11",VR::SL,VM::VM1,"?",false },
...
...
@@ -405,7 +426,7 @@ static const DICT_ENTRY DICOMV3DataDict [] = {
{0x0019,0x009a,"PMTF INFORMATION DATA^12",VR::DS,VM::VM1,"Series Number Local",false },
{0x0019,0x009b,"PMTF INFORMATION DATA^10",VR::FL,VM::VM3,"?",false },
{0x0019,0x009b,"PMTF INFORMATION DATA^11",VR::US,VM::VM1,"?",false },
{0x0019,0x009b,"PMTF INFORMATION DATA^12",VR::DS,VM::VM1,"?",false },
{0x0019,0x009b,"PMTF INFORMATION DATA^12",VR::DS,VM::VM1,"?",false },
// Sometimes IS
{0x0019,0x009c,"PMTF INFORMATION DATA^10",VR::SL,VM::VM1,"?",false },
{0x0019,0x009c,"PMTF INFORMATION DATA^11",VR::FL,VM::VM1,"?",false },
{0x0019,0x009c,"PMTF INFORMATION DATA^12",VR::DS,VM::VM1,"?num?",false },
...
...
@@ -443,6 +464,7 @@ static const DICT_ENTRY DICOMV3DataDict [] = {
{0x0019,0x00ab,"PMTF INFORMATION DATA^12",VR::FL,VM::VM3,"?",false },
{0x0019,0x00ac,"PMTF INFORMATION DATA^10",VR::US,VM::VM1,"?",false },
{0x0019,0x00ac,"PMTF INFORMATION DATA^12",VR::FL,VM::VM3,"?",false },
{0x0019,0x00ad,"PMTF INFORMATION DATA^10",VR::FL,VM::VM1,"?",false },
{0x0019,0x00ad,"PMTF INFORMATION DATA^11",VR::SL,VM::VM1,"?",false },
{0x0019,0x00ad,"PMTF INFORMATION DATA^12",VR::FL,VM::VM3,"?",false },
{0x0019,0x00ae,"PMTF INFORMATION DATA^10",VR::FL,VM::VM1,"?",false },
...
...
@@ -451,6 +473,7 @@ static const DICT_ENTRY DICOMV3DataDict [] = {
{0x0019,0x00af,"PMTF INFORMATION DATA^10",VR::SL,VM::VM1,"?",false },
{0x0019,0x00af,"PMTF INFORMATION DATA^12",VR::FL,VM::VM3,"?",false },
{0x0019,0x00b0,"PMTF INFORMATION DATA^10",VR::SL,VM::VM1,"?",false },
{0x0019,0x00b0,"PMTF INFORMATION DATA^11",VR::FL,VM::VM1,"?",false },
{0x0019,0x00b1,"PMTF INFORMATION DATA^10",VR::SL,VM::VM1,"?",false },
{0x0019,0x00b1,"PMTF INFORMATION DATA^11",VR::SL,VM::VM1,"?",false },
{0x0019,0x00b2,"PMTF INFORMATION DATA^11",VR::US,VM::VM1,"?",false },
...
...
@@ -468,9 +491,14 @@ static const DICT_ENTRY DICOMV3DataDict [] = {
{0x0019,0x00b9,"PMTF INFORMATION DATA^11",VR::US,VM::VM1,"?",false },
{0x0019,0x00ba,"PMTF INFORMATION DATA^10",VR::FL,VM::VM1,"?",false },
{0x0019,0x00bb,"PMTF INFORMATION DATA^10",VR::FL,VM::VM1,"?",false },
{0x0019,0x00bb,"PMTF INFORMATION DATA^11",VR::FL,VM::VM1,"?",false },
{0x0019,0x00bc,"PMTF INFORMATION DATA^10",VR::FL,VM::VM2,"?",false },
{0x0019,0x00bc,"PMTF INFORMATION DATA^11",VR::SL,VM::VM1,"?",false },
{0x0019,0x00bd,"PMTF INFORMATION DATA^10",VR::SL,VM::VM1,"?",false },
{0x0019,0x00bd,"PMTF INFORMATION DATA^11",VR::SL,VM::VM1,"?",false },
{0x0019,0x00be,"PMTF INFORMATION DATA^10",VR::SL,VM::VM1,"Acquisition Duration",false },
{0x0019,0x00be,"PMTF INFORMATION DATA^11",VR::FL,VM::VM1_n,"?",false },
{0x0019,0x00bf,"PMTF INFORMATION DATA^11",VR::SL,VM::VM1,"?",false },
{0x0019,0x00c0,"PMTF INFORMATION DATA^11",VR::SL,VM::VM1,"?",false },
{0x0019,0x00c1,"PMTF INFORMATION DATA^10",VR::SL,VM::VM1,"?",false },
{0x0019,0x00c1,"PMTF INFORMATION DATA^11",VR::US,VM::VM1,"?",false },
...
...
@@ -488,10 +516,12 @@ static const DICT_ENTRY DICOMV3DataDict [] = {
{0x0019,0x00ca,"PMTF INFORMATION DATA^10",VR::LO,VM::VM1,"Sequence Name",false },
{0x0019,0x00cb,"PMTF INFORMATION DATA^10",VR::UL,VM::VM1,"?",false },
{0x0019,0x00cc,"PMTF INFORMATION DATA^10",VR::UL,VM::VM1,"?",false },
{0x0019,0x00cc,"PMTF INFORMATION DATA^12",VR::SS,VM::VM1,"?",false },
{0x0019,0x00cc,"PMTF INFORMATION DATA^12",VR::SS,VM::VM1
_n
,"?",false },
{0x0019,0x00cd,"PMTF INFORMATION DATA^10",VR::SL,VM::VM1,"?",false },
{0x0019,0x00cd,"PMTF INFORMATION DATA^11",VR::SL,VM::VM3,"?",false },
{0x0019,0x00cd,"PMTF INFORMATION DATA^12",VR::LO,VM::VM1,"?",false },
{0x0019,0x00ce,"PMTF INFORMATION DATA^10",VR::SL,VM::VM1,"?",false },
{0x0019,0x00ce,"PMTF INFORMATION DATA^12",VR::UL,VM::VM1,"?",false },
{0x0019,0x00cf,"PMTF INFORMATION DATA^10",VR::SL,VM::VM1,"?acquired series (vs postproc)?",false },
{0x0019,0x00cf,"PMTF INFORMATION DATA^12",VR::FL,VM::VM1,"?",false },
{0x0019,0x00d0,"PMTF INFORMATION DATA^10",VR::US,VM::VM1,"?",false },
...
...
@@ -540,8 +570,10 @@ static const DICT_ENTRY DICOMV3DataDict [] = {
{0x0019,0x00ef,"PMTF INFORMATION DATA^12",VR::DS,VM::VM1,"?",false },
{0x0019,0x00f0,"PMTF INFORMATION DATA^10",VR::SL,VM::VM1,"?",false },
{0x0019,0x00f0,"PMTF INFORMATION DATA^11",VR::SL,VM::VM1_n,"?",false },
{0x0019,0x00f0,"PMTF INFORMATION DATA^12",VR::LO,VM::VM1,"?",false },
{0x0019,0x00f1,"PMTF INFORMATION DATA^10",VR::FL,VM::VM1,"?",false },
{0x0019,0x00f1,"PMTF INFORMATION DATA^11",VR::SL,VM::VM3,"Diffusion b-value x Toshiba Orientation",false },
{0x0019,0x00f1,"PMTF INFORMATION DATA^12",VR::LO,VM::VM1,"?",false },
{0x0019,0x00f2,"PMTF INFORMATION DATA^10",VR::FL,VM::VM1,"?",false },
{0x0019,0x00f2,"PMTF INFORMATION DATA^11",VR::FL,VM::VM3,"?",false },
{0x0019,0x00f3,"PMTF INFORMATION DATA^10",VR::SL,VM::VM1,"?",false },
...
...
@@ -563,10 +595,13 @@ static const DICT_ENTRY DICOMV3DataDict [] = {
{0x0019,0x00fb,"PMTF INFORMATION DATA^11",VR::FL,VM::VM1,"?",false },
{0x0019,0x00fc,"PMTF INFORMATION DATA^10",VR::FL,VM::VM1,"?",false },
{0x0019,0x00fc,"PMTF INFORMATION DATA^11",VR::FL,VM::VM1,"?",false },
{0x0019,0x00fc,"PMTF INFORMATION DATA^12",VR::FL,VM::VM1,"?",false },
{0x0019,0x00fd,"PMTF INFORMATION DATA^10",VR::FL,VM::VM1,"?",false },
{0x0019,0x00fd,"PMTF INFORMATION DATA^11",VR::SL,VM::VM1,"?",false },
{0x0019,0x00fd,"PMTF INFORMATION DATA^12",VR::SL,VM::VM1,"?",false },
{0x0019,0x00fe,"PMTF INFORMATION DATA^10",VR::SL,VM::VM1,"?",false },
{0x0019,0x00fe,"PMTF INFORMATION DATA^11",VR::SL,VM::VM1,"?",false },
{0x0019,0x00fe,"PMTF INFORMATION DATA^12",VR::SL,VM::VM1,"?",false },
{0x0019,0x00ff,"PMTF INFORMATION DATA^10",VR::SL,VM::VM3,"?",false },
{0x0019,0x00ff,"PMTF INFORMATION DATA^11",VR::SL,VM::VM1,"?",false },
{0x0021,0x0002,"PMTF INFORMATION DATA^10",VR::SL,VM::VM1,"?num?",false },
...
...
@@ -600,6 +635,7 @@ static const DICT_ENTRY DICOMV3DataDict [] = {
{0x0029,0x0054,"PMTF INFORMATION DATA^10",VR::LO,VM::VM1,"?study filepath?",false },
{0x0029,0x0067,"PMTF INFORMATION DATA^10",VR::FD,VM::VM4,"Series Diffusion Info (b-value,x,y,z)",false },
{0x0029,0x0068,"PMTF INFORMATION DATA^10",VR::SS,VM::VM1,"?num 1?",false },
{0x0029,0x006e,"PMTF INFORMATION DATA^10",VR::OB,VM::VM1,"?",false },
//{0x0029,0x0089,"PMTF INFORMATION DATA",VR::LO,VM::VM1,"?",false }, /* defined below */
{0xe201,0x0002,"PMTF INFORMATION DATA^10",VR::US,VM::VM1,"?",false },
{0xe301,0x0000,"PMTF INFORMATION DATA^10",VR::SH,VM::VM1,"Series Description",false },
...
...
@@ -609,6 +645,7 @@ static const DICT_ENTRY DICOMV3DataDict [] = {
{0xe401,0x0003,"PMTF INFORMATION DATA^10",VR::US,VM::VM1,"?num?",false },
{0xe401,0x0004,"PMTF INFORMATION DATA^10",VR::US,VM::VM1,"?num?",false },
{0xe401,0x0005,"PMTF INFORMATION DATA^10",VR::OB,VM::VM1,"?blob?",false },
{0xe401,0x0007,"PMTF INFORMATION DATA^10",VR::FL,VM::VM1,"?",false },
{0xe401,0x0008,"PMTF INFORMATION DATA^10",VR::FL,VM::VM1,"?ADC factor?",false },
{0xe401,0x0012,"PMTF INFORMATION DATA^10",VR::FL,VM::VM1,"?num?",false },
{0xe401,0x0013,"PMTF INFORMATION DATA^10",VR::OB,VM::VM1,"Icon DIB (Microsoft Windows 3.X Packed Device-Independent Bitmap)",false },
...
...
Source/DataStructureAndEncodingDefinition/gdcmByteValue.cxx
View file @
81372011
...
...
@@ -30,7 +30,7 @@ namespace gdcm_ns
++
l
;
}
#else
assert
(
!
l
.
IsUndefined
()
&&
!
l
.
IsOdd
()
);
gdcmAssertAlwaysMacro
(
!
l
.
IsUndefined
()
&&
!
l
.
IsOdd
()
);
#endif
// I cannot use reserve for now. I need to implement:
// STL - vector<> and istream
...
...
Source/DataStructureAndEncodingDefinition/gdcmElement.h
View file @
81372011
...
...
@@ -236,10 +236,10 @@ public:
char
sep
;
//std::cout << "GetLength: " << af->GetLength() << std::endl;
for
(
unsigned
long
i
=
1
;
i
<
length
;
++
i
)
{
assert
(
_is
);
//
assert( _is );
// Get the separator in between the values
_is
>>
std
::
ws
>>
sep
;
//_is.get(sep);
assert
(
sep
==
'\\'
);
// FIXME: Bad use of assert
//
assert( sep == '\\' ); // FIXME: Bad use of assert
_is
>>
std
::
ws
>>
data
[
i
];
}
}
...
...
Source/MediaStorageAndFileFormat/gdcmAnonymizer.cxx
View file @
81372011
...
...
@@ -743,7 +743,7 @@ catch(...)
}
bool
IsVRUI
(
Tag
const
&
tag
)
static
bool
IsVRUI
(
Tag
const
&
tag
)
{
static
const
Global
&
g
=
Global
::
GetInstance
();
static
const
Dicts
&
dicts
=
g
.
GetDicts
();
...
...
Source/MediaStorageAndFileFormat/gdcmScanner.cxx
View file @
81372011
...
...
@@ -202,6 +202,51 @@ void Scanner::Print( std::ostream & os ) const
}
}
static
bool
IsVRUI
(
Tag
const
&
tag
)
{
static
const
Global
&
g
=
Global
::
GetInstance
();
static
const
Dicts
&
dicts
=
g
.
GetDicts
();
const
DictEntry
&
dictentry
=
dicts
.
GetDictEntry
(
tag
);
if
(
dictentry
.
GetVR
()
==
VR
::
UI
)
return
true
;
//if( tag == Tag(0x0020,0x000d) // Study Instance UID : UI
// || tag == Tag(0x0020,0x0052) //
// || tag == Tag(0x0020,0x000e) ) // Series Instance UID : UI
// {
// return true;
// }
return
false
;
}
void
Scanner
::
PrintTable
(
std
::
ostream
&
os
)
const
{
Directory
::
FilenamesType
::
const_iterator
file
=
Filenames
.
begin
();
for
(;
file
!=
Filenames
.
end
();
++
file
)
{
const
char
*
filename
=
file
->
c_str
();
assert
(
filename
&&
*
filename
);
bool
b
=
IsKey
(
filename
);
const
char
*
comment
=
!
b
?
"could not be read"
:
"could be read"
;
os
<<
'"'
<<
filename
<<
'"'
<<
"
\t
"
;
//const FilenameToValue &mapping = Mappings[*tag];
TagsType
::
const_iterator
tag
=
Tags
.
begin
();
const
TagToValue
&
mapping
=
GetMapping
(
filename
);
for
(
;
tag
!=
Tags
.
end
();
++
tag
)
{
const
Tag
&
t
=
*
tag
;
bool
isui
=
IsVRUI
(
t
);
const
char
*
value
=
""
;
if
(
mapping
.
find
(
t
)
!=
mapping
.
end
()
)
{
const
char
*
v
=
mapping
.
find
(
t
)
->
second
;
//const char* value = this->GetValue(filename, *tag);
if
(
v
)
value
=
v
;
}
os
<<
'"'
<<
(
isui
?
String
<>::
Trim
(
value
)
:
value
)
<<
'"'
;
os
<<
"
\t
"
;
}
os
<<
"
\n
"
;
}
}
Scanner
::
TagToValue
const
&
Scanner
::
GetMapping
(
const
char
*
filename
)
const
{
// assert( Mappings.find(filename) != Mappings.end() );
...
...
Source/MediaStorageAndFileFormat/gdcmScanner.h
View file @
81372011
...
...
@@ -89,6 +89,8 @@ public:
/// Print result
void
Print
(
std
::
ostream
&
os
)
const
override
;
void
PrintTable
(
std
::
ostream
&
os
)
const
;
/// Check if filename is a key in the Mapping table.
/// returns true only of file can be found, which means
/// the file was indeed a DICOM file that could be processed
...
...
Source/MediaStorageAndFileFormat/gdcmStrictScanner.cxx
View file @
81372011
...
...
@@ -211,6 +211,51 @@ void StrictScanner::Print( std::ostream & os ) const
}
}
static
bool
IsVRUI
(
Tag
const
&
tag
)
{
static
const
Global
&
g
=
Global
::
GetInstance
();
static
const
Dicts
&
dicts
=
g
.
GetDicts
();
const
DictEntry
&
dictentry
=
dicts
.
GetDictEntry
(
tag
);
if
(
dictentry
.
GetVR
()
==
VR
::
UI
)
return
true
;
//if( tag == Tag(0x0020,0x000d) // Study Instance UID : UI
// || tag == Tag(0x0020,0x0052) //
// || tag == Tag(0x0020,0x000e) ) // Series Instance UID : UI
// {
// return true;
// }
return
false
;
}
void
StrictScanner
::
PrintTable
(
std
::
ostream
&
os
)
const
{
Directory
::
FilenamesType
::
const_iterator
file
=
Filenames
.
begin
();
for
(;
file
!=
Filenames
.
end
();
++
file
)
{
const
char
*
filename
=
file
->
c_str
();
assert
(
filename
&&
*
filename
);
bool
b
=
IsKey
(
filename
);
const
char
*
comment
=
!
b
?
"could not be read"
:
"could be read"
;
os
<<
'"'
<<
filename
<<
'"'
<<
"
\t
"
;
//const FilenameToValue &mapping = Mappings[*tag];
TagsType
::
const_iterator
tag
=
Tags
.
begin
();
const
TagToValue
&
mapping
=
GetMapping
(
filename
);
for
(
;
tag
!=
Tags
.
end
();
++
tag
)
{
const
Tag
&
t
=
*
tag
;
bool
isui
=
IsVRUI
(
t
);
const
char
*
value
=
""
;
if
(
mapping
.
find
(
t
)
!=
mapping
.
end
()
)
{
const
char
*
v
=
mapping
.
find
(
t
)
->
second
;
//const char* value = this->GetValue(filename, *tag);
if
(
v
)
value
=
v
;
}
os
<<
'"'
<<
(
isui
?
String
<>::
Trim
(
value
)
:
value
)
<<
'"'
;
os
<<
"
\t
"
;
}
os
<<
"
\n
"
;
}
}
StrictScanner
::
TagToValue
const
&
StrictScanner
::
GetMapping
(
const
char
*
filename
)
const
{
// assert( Mappings.find(filename) != Mappings.end() );
...
...
Source/MediaStorageAndFileFormat/gdcmStrictScanner.h
View file @
81372011
...
...
@@ -89,6 +89,8 @@ public:
/// Print result
void
Print
(
std
::
ostream
&
os
)
const
override
;
void
PrintTable
(
std
::
ostream
&
os
)
const
;
/// Check if filename is a key in the Mapping table.
/// returns true only of file can be found, which means
/// the file was indeed a DICOM file that could be processed
...
...
Testing/CMakeLists.txt
View file @
81372011
...
...
@@ -2,6 +2,21 @@
find_package
(
DCMTK
)
find_package
(
DICOM3TOOLS
)
# Special CMake Module required when doing Python Testing
if
(
GDCM_WRAP_PYTHON
)
include
(
${
GDCM_SOURCE_DIR
}
/CMake/UsePythonTest.cmake
)
endif
()
# Special CMake Module required when doing Java Testing
if
(
GDCM_WRAP_JAVA
)
include
(
${
GDCM_SOURCE_DIR
}
/CMake/UseJavaTest.cmake
)
endif
()
# Special CMake Module required when doing C# Testing
if
(
GDCM_WRAP_CSHARP
)
include
(
${
GDCM_SOURCE_DIR
}
/CMake/UseCSharpTest.cmake
)
endif
()
add_subdirectory
(
Source
)
...
...
Testing/Source/Common/Python/CMakeLists.txt
View file @
81372011
# Define the tests for gdcm-python
# gdcm-python
set
(
GDCM_PYTHON_TEST_SRCS
TestTesting
)
...
...
Utilities/CMakeLists.txt
View file @
81372011
...
...
@@ -80,10 +80,6 @@ if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/getopt)
endif
()
endif
()
if
(
EXISTS
${
CMAKE_CURRENT_SOURCE_DIR
}
/doxygen
)
add_subdirectory
(
doxygen
)
endif
()
# you could be running mingw32 on linux in which case you do NOT want the gdcmuuid lib
APPEND_COPYRIGHT
(
${
CMAKE_CURRENT_SOURCE_DIR
}
/gdcmuuid/COPYING
)
if
(
NOT WIN32 AND NOT MINGW
)
...
...
Utilities/VTK/Applications/gdcmviewer.cxx
View file @
81372011
...
...
@@ -754,7 +754,7 @@ void PrintHelp()
std
::
cout
<<
"Options:"
<<
std
::
endl
;
std
::
cout
<<
" --force-rescale force rescale."
<<
std
::
endl
;
std
::
cout
<<
" --force-spacing force spacing."
<<
std
::
endl
;
std
::
cout
<<
" -r --recursive Recusively descend directory."
<<
std
::
endl
;
std
::
cout
<<
" -r --recursive Recu
r
sively descend directory."
<<
std
::
endl
;
std
::
cout
<<
"General Options:"
<<
std
::
endl
;
std
::
cout
<<
" -V --verbose more verbose (warning+error)."
<<
std
::
endl
;
std
::
cout
<<
" -W --warning print warning info."
<<
std
::
endl
;
...
...
Utilities/VTK/CMakeLists.txt
View file @
81372011
...
...
@@ -613,7 +613,7 @@ if(GDCM_WRAP_CSHARP)
OUTPUT
${
GDCM_LIBRARY_DIR
}
/vtkgdcm-sharp.dll
COMMAND
${
CMAKE_CSHARP_COMPILER
}
ARGS
"/t:library"
"/out:
${
GDCM_LIBRARY_DIR
}
/vtkgdcm-sharp.dll"
"*.cs"
WORKING_DIRECTORY
${
CMAKE_CURRENT_BINARY_DIR
}
DEPENDS
"
${
swig_generated_file_fullname
}
"
DEPENDS
${
SWIG_MODULE_vtkgdcmsharpglue_REAL_NAME
}
${
CMAKE_CURRENT_BINARY_DIR
}
/AssemblyInfo.cs
COMMENT
"csc *.cs"
)
...
...
Utilities/VTK/vtkgdcm.i
View file @
81372011
...
...
@@ -31,12 +31,17 @@
#
endif
%
{
//#define VTK_MAJOR_VERSION
6
//#define VTK_MINOR_VERSION
2
//#define VTK_BUILD_VERSION
0
//#define VTK_VERSION "
6.2.0
"
//#define VTK_MAJOR_VERSION
7
//#define VTK_MINOR_VERSION
1
//#define VTK_BUILD_VERSION
1
//#define VTK_VERSION "
7.1.1
"
%}
#
define
VTK_OVERRIDE
override
#
define
VTK_FINAL
final
#
define
VTK_DELETE_FUNCTION
=
delete
#
define
VTK_NEWINSTANCE
#
define
VTK_LEGACY
(
X
)
%
{
// Let's reproduce the stack of include, when one would include vtkSetGet:
...
...
Utilities/doxygen/CMakeLists.txt
View file @
81372011
...
...
@@ -124,12 +124,12 @@ if(GDCM_DOCUMENTATION)
COMMAND
${
SED_EXECUTABLE
}
ARGS -i.tmp -e
"'s/
${
sed_gdcm_source_dir
}
/gdcm/g'"
${
CMAKE_CURRENT_BINARY_DIR
}
/latex/*.tex
# Command #3
COMMAND
${
CMAKE_MAKE_PROGRAM
}
COMMAND make
ARGS -C
${
CMAKE_CURRENT_BINARY_DIR
}
/latex
DEPENDS
#${CMAKE_CURRENT_BINARY_DIR}/latex/refman.tex
${
CMAKE_CURRENT_BINARY_DIR
}
/latex/Makefile
#${GDCM_DOC_TARBALL}
COMMENT
"GDCM: Creating (patched) pdf of documentation"
WORKING_DIRECTORY
${
CMAKE_CURRENT_BINARY_DIR
}
/latex
)
if
(
PDFOPT_EXECUTABLE
)
add_custom_command
(
...
...
Prev
1
2
Next