3 #include "gdcmCommon.h"
4 #include "gdcmDictEntry.h"
6 #include "gdcmDictSet.h"
7 #include "gdcmParser.h"
8 #include "gdcmHeaderEntry.h"
9 #include "gdcmHeader.h"
10 #include "gdcmHeaderHelper.h"
13 #include "gdcmObject.h"
14 #include "gdcmDicomDir.h"
15 #include "gdcmDicomDirElement.h"
16 #include "gdcmPatient.h"
17 #include "gdcmStudy.h"
18 #include "gdcmSerie.h"
19 #include "gdcmImage.h"
23 // Utility functions on strings for removing leading and trailing spaces
24 void EatLeadingAndTrailingSpaces(string & s) {
25 while ( s.length() && (s[0] == ' ') )
27 while ( s.length() && (s[s.length()-1] == ' ') )
28 s.erase(s.length()-1, 1);
31 typedef unsigned short guint16;
32 typedef unsigned int guint32;
34 ////////////////////////////////////////////////////////////////////////////
35 // Global variables get exported to cvar in Python
37 extern gdcmGlobal gdcmGlob;
40 ////////////////////////////////////////////////////////////////////////////
41 %typemap(out) std::list<std::string> * {
42 PyObject* NewItem = (PyObject*)0;
43 PyObject* NewList = PyList_New(0); // The result of this typemap
44 for (list<string>::iterator NewString = ($1)->begin();
45 NewString != ($1)->end(); ++NewString) {
46 NewItem = PyString_FromString(NewString->c_str());
47 PyList_Append( NewList, NewItem);
52 ////////////////////////////////////////////////////////////////////////////
53 // Convert a c++ hash table in a python native dictionary
54 %typemap(out) std::map<std::string, std::list<std::string> > * {
55 PyObject* NewDict = PyDict_New(); // The result of this typemap
56 PyObject* NewKey = (PyObject*)0;
57 PyObject* NewVal = (PyObject*)0;
59 for (map<string, list<string> >::iterator tag = ($1)->begin();
60 tag != ($1)->end(); ++tag) {
61 string first = tag->first;
62 // Do not publish entries whose keys is made of spaces
63 if (first.length() == 0)
65 NewKey = PyString_FromString(first.c_str());
66 PyObject* NewList = PyList_New(0);
67 for (list<string>::iterator Item = tag->second.begin();
68 Item != tag->second.end(); ++Item) {
69 NewVal = PyString_FromString(Item->c_str());
70 PyList_Append( NewList, NewVal);
72 PyDict_SetItem( NewDict, NewKey, NewList);
77 ////////////////////////////////////////////////////////////////////////////
78 // Convert a c++ hash table in a python native dictionary
79 %typemap(out) TagHeaderEntryHT & {
80 PyObject* NewDict = PyDict_New(); // The result of this typemap
81 string RawName; // Element name as gotten from gdcm
82 PyObject* NewKey = (PyObject*)0; // Associated name as python object
83 string RawValue; // Element value as gotten from gdcm
84 PyObject* NewVal = (PyObject*)0; // Associated value as python object
86 for (TagHeaderEntryHT::iterator tag = $1->begin(); tag != $1->end(); ++tag) {
88 // The element name shall be the key:
89 RawName = tag->second->GetName();
90 // gdcm unrecognized (including not loaded because their size exceeds
91 // the user specified treshold) elements are exported with their
93 if (RawName == "Unknown")
94 RawName = tag->second->GetKey();
95 NewKey = PyString_FromString(RawName.c_str());
97 // Element values are striped from leading/trailing spaces
98 RawValue = tag->second->GetValue();
99 EatLeadingAndTrailingSpaces(RawValue);
100 NewVal = PyString_FromString(RawValue.c_str());
102 PyDict_SetItem( NewDict, NewKey, NewVal);
107 ////////////////////////////////////////////////////////////////////////////
108 %typemap(out) ListPatient & {
109 PyObject* NewItem = (PyObject*)0;
110 $result = PyList_New(0); // The result of this typemap
112 for (list<gdcmPatient *>::iterator New = ($1)->begin();
113 New != ($1)->end(); ++New) {
114 NewItem = SWIG_NewPointerObj(*New,SWIGTYPE_p_gdcmPatient,1);
115 PyList_Append($result, NewItem);
119 %typemap(out) ListStudy & {
120 PyObject* NewItem = (PyObject*)0;
121 $result = PyList_New(0); // The result of this typemap
123 for (list<gdcmStudy *>::iterator New = ($1)->begin();
124 New != ($1)->end(); ++New) {
125 NewItem = SWIG_NewPointerObj(*New,SWIGTYPE_p_gdcmStudy,1);
126 PyList_Append($result, NewItem);
130 %typemap(out) ListSerie & {
131 PyObject* NewItem = (PyObject*)0;
132 $result = PyList_New(0); // The result of this typemap
134 for (list<gdcmSerie *>::iterator New = ($1)->begin();
135 New != ($1)->end(); ++New) {
136 NewItem = SWIG_NewPointerObj(*New,SWIGTYPE_p_gdcmSerie,1);
137 PyList_Append($result, NewItem);
141 %typemap(out) ListImage & {
142 PyObject* NewItem = (PyObject*)0;
143 $result = PyList_New(0); // The result of this typemap
145 for (list<gdcmImage *>::iterator New = ($1)->begin();
146 New != ($1)->end(); ++New) {
147 NewItem = SWIG_NewPointerObj(*New,SWIGTYPE_p_gdcmImage,1);
148 PyList_Append($result, NewItem);
152 ////////////////////////////////////////////////////////////////////////////
154 ////////////////////////////////////////////////////////////////////////////
155 // Deals with function returning a C++ string.
156 %typemap(out) string, std::string {
157 $result = PyString_FromString(($1).c_str());
160 %typemap(python, in) const std::string, std::string
162 $1 = PyString_AsString($input);
165 ////////////////////////////////////////////////////////////////////////////
166 %include "gdcmCommon.h"
167 %include "gdcmDictEntry.h"
168 %include "gdcmDict.h"
169 %include "gdcmDictSet.h"
170 %include "gdcmParser.h"
171 %include "gdcmHeaderEntry.h"
172 %include "gdcmHeader.h"
173 %include "gdcmHeaderHelper.h"
174 %include "gdcmFile.h"
175 %include "gdcmUtil.h"
176 %include "gdcmObject.h"
177 %include "gdcmDicomDir.h"
178 %include "gdcmDicomDirElement.h"
179 %include "gdcmPatient.h"
180 %include "gdcmStudy.h"
181 %include "gdcmSerie.h"
182 %include "gdcmImage.h"