From: frog Date: Wed, 15 Jan 2003 11:30:47 +0000 (+0000) Subject: * python subdir moved to gdcmPython (preparation of distutils packaging). X-Git-Tag: April2003~54 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=9676e37a52824da2f69d22c721178a4b5dc12191;p=gdcm.git * python subdir moved to gdcmPython (preparation of distutils packaging). --- diff --git a/ChangeLog b/ChangeLog index 6fc41f7e..eeee478b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2003-01-15 Eric Boix + * python subdir moved to gdcmPython (preparation of distutils packaging). + 2002-12-16 Eric Boix * src/gdcm.h, src/gdcmHeader.cxx: added GetPubTagNames() resp. GetPubTagNamesByCategory() to gdcmHeader that return a list of the diff --git a/gdcmPython/.cvsignore b/gdcmPython/.cvsignore new file mode 100644 index 00000000..e276414d --- /dev/null +++ b/gdcmPython/.cvsignore @@ -0,0 +1,3 @@ +gdcm.py +*.pyc +gdcm_wrap.cxx diff --git a/gdcmPython/Makefile b/gdcmPython/Makefile new file mode 100644 index 00000000..b7f21273 --- /dev/null +++ b/gdcmPython/Makefile @@ -0,0 +1,43 @@ +.SECONDARY: + +SWIG = swig +SWIGFLAGS= -python -c++ + +TARGET=_gdcm.so + +GDCMDIR=../src +GDCMLIB=$(GDCMDIR)/libgdcm.a +GDCMINCLUDES=-I$(GDCMDIR) + +PYTHON=python +PYTHON_PREFIX =`$(PYTHON) -c "import sys; print sys.exec_prefix"` +PYTHON_VERSION =`$(PYTHON) -c "import sys; print sys.version[:3]"` +PYTHON_INCLUDES="-I$(PYTHON_PREFIX)/include/python$(PYTHON_VERSION)" + +CXXFLAGS=$(GDCMINCLUDES) +CPPFLAGS=-g -Wall -Wunused-variable +LDFLAGS=-g + +%_wrap.o : %_wrap.cxx + $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(PYTHON_INCLUDES) $< -o $@ +%_wrap.cxx : %.i + $(SWIG) $(SWIGFLAGS) $(PYTHON_INCLUDES) $(GDCMINCLUDES) -o $@ $< +%.o : %.cxx + $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@ + + +all: gdcm_wrap.o $(GDCMLIB) + g++ -shared $^ -o $(TARGET) $(LDFLAGS) + +test: + $(PYTHON) -c"import _gdcm" + +clean: + rm -f *_wrap* *.so *.o *.pyc gdcm.py + +$(GDCMLIB): FORCE + cd $(GDCMDIR); make + +FORCE: + +#.SECONDARY: dcm_wrap.cxx diff --git a/gdcmPython/demo/.cvsignore b/gdcmPython/demo/.cvsignore new file mode 100644 index 00000000..0d20b648 --- /dev/null +++ b/gdcmPython/demo/.cvsignore @@ -0,0 +1 @@ +*.pyc diff --git a/gdcmPython/demo/explore.py b/gdcmPython/demo/explore.py new file mode 100644 index 00000000..c11a9aeb --- /dev/null +++ b/gdcmPython/demo/explore.py @@ -0,0 +1,18 @@ +from load import * + +########## Real usage of Pygdcm starts here +toRead = gdcm.gdcmHeader(FileName) +toRead.LoadElements() +ValDict = toRead.GetPubElVal() +ExploreElements = ["Patient Name", "Patient ID", + "Study Date", "Study Time", "Study ID", + "Study Instance UID", + "Series Number", + "Modality"] + +for elem in ExploreElements: + print "[%s] = " % elem, + try: + print "[%s]" % ValDict[elem] + except KeyError: + print "NOT FOUND" diff --git a/gdcmPython/demo/load.py b/gdcmPython/demo/load.py new file mode 100644 index 00000000..0b13db8d --- /dev/null +++ b/gdcmPython/demo/load.py @@ -0,0 +1,33 @@ +import os, sys + +### Defaulting the path to the dictionaries +# WARNING: this needs to be done before importation of gdcm ! +# FIXME: this needs to be put in a wrapper of the swig generated +# shadow classes (say Pygdcm.py?) +try: + os.environ["GDCM_DICT_PATH"] +except KeyError: + os.environ["GDCM_DICT_PATH"]="../../Dicts/" + +### When not properly installed (like in a cvs hierachy) try +# to handle properly the import of gdcm +try: + import gdcm +except ImportError: + import sys, os + PreInstallPath = os.path.join(os.getcwd(), "..") + sys.path.append(PreInstallPath) + try: + import gdcm + except ImportError,e: + raise ImportError, "gdcm extension module not found" + sys.exit() + +### Get filename from command line or default it +try: + FileName = sys.argv[1] +except IndexError: + FileName = os.path.join("..", "..", "Test", "test.acr") +if not os.path.isfile(FileName): + print "Cannot open file ", FileName + sys.exit() diff --git a/gdcmPython/demo/printGroupedPublicDict.py b/gdcmPython/demo/printGroupedPublicDict.py new file mode 100644 index 00000000..86a086b6 --- /dev/null +++ b/gdcmPython/demo/printGroupedPublicDict.py @@ -0,0 +1,14 @@ +from load import * +toRead = gdcm.gdcmHeader(FileName) +toRead.LoadElements() + +print "##############################################################" +print "### Display all the possible tags of the current public" +print "### dictionary, but grouped by using the Fourth field" +print "##############################################################" +AllDictFields = toRead.GetPubTagNamesByCategory() +for fourth in AllDictFields.keys(): + print " ############ Fourth group = ", fourth, " ##############" + for entry in AllDictFields[fourth]: + print " ", entry + diff --git a/gdcmPython/demo/test.py b/gdcmPython/demo/test.py new file mode 100644 index 00000000..6a854291 --- /dev/null +++ b/gdcmPython/demo/test.py @@ -0,0 +1,11 @@ +from load import * +toRead = gdcm.gdcmHeader(FileName) +toRead.LoadElements() + +print "##############################################################" +print "### Display all the elements and their respective values" +print "## found in the ", FileName, " file." +print "##############################################################" +ValDict = toRead.GetPubElVal() +for key in ValDict.keys(): + print "[%s] = [%s]" %(key, ValDict[key]) diff --git a/gdcmPython/demo/testAll.py b/gdcmPython/demo/testAll.py new file mode 100644 index 00000000..68274262 --- /dev/null +++ b/gdcmPython/demo/testAll.py @@ -0,0 +1,38 @@ +from load import * + +# Where all the test images are +TestFileDir = os.path.join("..", "..", "Data") + +AllFiles = [ + "CR-MONO1-10-chest.dcm", + "CT-MONO2-16-brain.dcm", + "CT-MONO2-16-ort.dcm", + "CT-MONO2-16-ankle.dcm", + "CT-MONO2-8-abdo.dcm", + "CT-MONO2-12-lomb-an2.acr2", + "CT-MONO2-16-chest.dcm", + "MR-MONO2-12-angio-an1.acr1", + "MR-MONO2-12-an2.acr2", + "MR-MONO2-16-head.dcm", + "MR-MONO2-12-shoulder.dcm", + "OT-PAL-8-face.dcm", + "OT-MONO2-8-a7.dcm", + "US-RGB-8-esopecho.dcm", + "US-RGB-8-epicard.dcm", + "MR-MONO2-8-16x-heart.dcm", + "NM-MONO2-16-13x-heart.dcm", + "US-MONO2-8-8x-execho.dcm", + "US-PAL-8-10x-echo.dcm", + "XA-MONO2-8-12x-catheter.dcm", + ] + +if __name__ == '__main__': + for file in AllFiles: + fileName = os.path.join(TestFileDir, file) + print "############## file :", fileName + toRead = gdcm.gdcmHeader(fileName) + toRead.LoadElements() + ValDict = toRead.GetPubElVal() + for key in ValDict.keys(): + print " [%s] = [%s]" %(key, ValDict[key]) + diff --git a/gdcmPython/gdcm.i b/gdcmPython/gdcm.i new file mode 100644 index 00000000..46c2ec1e --- /dev/null +++ b/gdcmPython/gdcm.i @@ -0,0 +1,75 @@ +%module gdcm +%{ +#include "gdcm.h" + +// Utility functions on strings for removing leading and trailing spaces +void EatLeadingAndTrailingSpaces(string & s) { + while ( s.length() && (s[0] == ' ') ) + s.erase(0,1); + while ( s.length() && (s[s.length()-1] == ' ') ) + s.erase(s.length()-1, 1); +} +%} +typedef unsigned short guint16; +typedef unsigned int guint32; + +%typemap(out) list * { + PyObject* NewItem = (PyObject*)0; + PyObject* NewList = PyList_New(0); // The result of this typemap + for (list::iterator NewString = ($1)->begin(); + NewString != ($1)->end(); ++NewString) { + NewItem = PyString_FromString(NewString->c_str()); + PyList_Append( NewList, NewItem); + } + $result = NewList; +} + +%typemap(out) map > * { + PyObject* NewDict = PyDict_New(); // The result of this typemap + PyObject* NewKey = (PyObject*)0; + PyObject* NewVal = (PyObject*)0; + + for (map >::iterator tag = ($1)->begin(); + tag != ($1)->end(); ++tag) { + NewKey = PyString_FromString(tag->first.c_str()); + PyObject* NewList = PyList_New(0); + for (list::iterator Item = tag->second.begin(); + Item != tag->second.end(); ++Item) { + NewVal = PyString_FromString(Item->c_str()); + PyList_Append( NewList, NewVal); + } + PyDict_SetItem( NewDict, NewKey, NewList); + } + $result = NewDict; +} + +// Return an hash table as a python native dictionary +%typemap(out) TagElValueHT & { + PyObject* NewDict = PyDict_New(); // The result of this typemap + string RawName; // Element name as gotten from gdcm + PyObject* NewKey = (PyObject*)0; // Associated name as python object + string RawValue; // Element value as gotten from gdcm + PyObject* NewVal = (PyObject*)0; // Associated value as python object + + for (TagElValueHT::iterator tag = $1->begin(); tag != $1->end(); ++tag) { + + // The element name shall be the key: + RawName = tag->second->GetName(); + // gdcm unrecognized (including not loaded because their size exceeds + // the user specified treshold) elements are exported with their + // TagKey as key. + if (RawName == "Unknown") + RawName = tag->second->GetKey(); + NewKey = PyString_FromString(RawName.c_str()); + + // Element values are striped from leading/trailing spaces + RawValue = tag->second->GetValue(); + EatLeadingAndTrailingSpaces(RawValue); + NewVal = PyString_FromString(RawValue.c_str()); + + PyDict_SetItem( NewDict, NewKey, NewVal); + } + $result = NewDict; +} + +%include gdcm.h diff --git a/gdcmPython/testSuite.py b/gdcmPython/testSuite.py new file mode 100644 index 00000000..d6c4dd2c --- /dev/null +++ b/gdcmPython/testSuite.py @@ -0,0 +1,530 @@ +import unittest +import os + +# Where all the test images are +TestFileDir = os.path.join("..", "Data") + +### Defaulting the path to the dictionaries +# WARNING: this needs to be done before importation of gdcm ! +# FIXME: this needs to be put in a wrapper of the swig generated +# shadow classes (say Pygdcm.py?) +try: + os.environ["GDCM_DICT_PATH"] +except KeyError: + os.environ["GDCM_DICT_PATH"] = os.path.join("..", "Dicts/") + +### When not properly installed (like in a cvs hierachy) try +# to handle properly the import of gdcm +try: + import gdcm +except ImportError: + import sys, os + PreInstallPath = os.path.join(os.getcwd(), "..") + sys.path.append(PreInstallPath) + try: + import gdcm + except ImportError,e: + raise ImportError, "gdcm extension module not found" + sys.exit() + +class gdcmTestCase(unittest.TestCase): + # The files whose name starts with a modality (e.g. CR-MONO1-10-chest.dcm) + # come from Sebastien Barre's Dicom2 highly recommendable site + # http://www.barre.nom.fr/medical/samples/index.html + BarreFiles = [ + #################################### + # CR modality examples: + #################################### + ["CR-MONO1-10-chest.dcm", + [ ["Modality", "CR"], + #"Transfer Syntax UID" is absent. + ["Rows", "440"], + ["Columns", "440"], + ["Bits Stored", "10"], + ["Bits Allocated", "16"], + ["High Bit", "9"], + ["Pixel Representation", "0"], + ["Manufacturer", "FUJI PHOTO FILM CO. LTD."], + ["Manufacturer Model Name", "9000"], + ["7fe0|0010", "gdcm::NotLoaded. Address:776 Length:387200"] ] ], + #################################### + # CT modality examples: + #################################### + ["CT-MONO2-16-brain.dcm", + [ ["Transfer Syntax UID", "1.2.840.10008.1.2.1"], # Explicit VR, LE + ["Modality", "CT"], + ["Rows", "512"], + ["Columns", "512"], + ["Bits Stored", "16"], + ["Bits Allocated", "16"], + ["High Bit", "15"], + ["Pixel Representation", "1"], + ["Manufacturer", "Picker International, Inc."], + ["Manufacturer Model Name", "PQ5000"], + ["7fe0|0010", "gdcm::NotLoaded. Address:1680 Length:524288"] ] ], + ["CT-MONO2-16-ort.dcm", + [ ["Transfer Syntax UID", "1.2.840.10008.1.2"], # Implicit VR, LE + ["Modality", "CT"], + ["Rows", "512"], + ["Columns", "512"], + ["Bits Stored", "16"], + ["Bits Allocated", "16"], + ["High Bit", "15"], + ["Pixel Representation", "1"], + ["Manufacturer", "GE MEDICAL SYSTEMS"], + ["Manufacturer Model Name", "HiSpeed CT/i"], + ["7fe0|0010", "gdcm::NotLoaded. Address:1674 Length:524288"] ] ], + ["CT-MONO2-16-ankle.dcm", + [ ["Transfer Syntax UID", "1.2.840.10008.1.2"], # Implicit, little + ["Modality", "CT"], + ["Rows", "512"], + ["Columns", "512"], + ["Bits Stored", "16"], + ["Bits Allocated", "16"], + ["High Bit", "15"], + ["Pixel Representation", "1"], + ["Manufacturer", "GE MEDICAL SYSTEMS"], + ["Manufacturer Model Name", "GENESIS_ZEUS"], + ["7fe0|0010", "gdcm::NotLoaded. Address:1148 Length:524288"] ] ], + ["CT-MONO2-8-abdo.dcm", + [ ["Transfer Syntax UID", "1.2.840.10008.1.2"], # Implicit, little + ["Modality", "CT"], + ["Rows", "512"], + ["Columns", "512"], + ["Bits Stored", "8"], + ["Bits Allocated", "8"], + ["High Bit", "7"], + ["Pixel Representation", "0"], + ["Manufacturer", "FUJI"], + ["7fe0|0010", "gdcm::NotLoaded. Address:796 Length:262144"] ] ], + ["CT-MONO2-12-lomb-an2.acr2", + [ ["Modality", "CT"], + #"Transfer Syntax UID" and "Photometric Interpretation" are absent. + ["Rows", "512"], + ["Columns", "512"], + ["Bits Stored", "12"], + ["Bits Allocated", "16"], + ["High Bit", "11"], + ["Pixel Representation", "0"], + ["Manufacturer", "SIEMENS"], + ["7fe0|0010", "gdcm::NotLoaded. Address:1230 Length:524288"] ] ], + ["CT-MONO2-16-chest.dcm", + [ ["Transfer Syntax UID", "1.2.840.10008.1.2.4.70"], # jpeg... + ["Modality", "CT"], + ["Photometric Interpretation", "MONOCHROME2"], + ["Rows", "400"], + ["Columns", "512"], + ["Bits Stored", "16"], + ["Bits Allocated", "16"], + ["High Bit", "15"], + ["Pixel Representation", "1"], + ["Manufacturer", "GE MEDICAL SYSTEMS"], + ["7fe0|0010", "gdcm::NotLoaded. Address:1638 Length:143498"] ] ], + #################################### + ### MR modality examples: + #################################### + ["MR-MONO2-12-angio-an1.acr1", + [ ["Recognition Code", "ACR-NEMA 1.0"], + ["Modality", "MR"], + #"Transfer Syntax UID" and "Photometric Interpretation" are absent. + ["Rows", "256"], + ["Columns", "256"], + ["Bits Stored", "12"], + ["Bits Allocated", "12"], + ["High Bit", "11"], + ["Pixel Representation", "0"], + ["Manufacturer", "Philips"], + # Note: 256*256*12/8 = 98304 + ["7fe0|0010", "gdcm::NotLoaded. Address:650 Length:98304"] ] ], + ["MR-MONO2-12-an2.acr2", + [ ["Modality", "MR"], + ["Photometric Interpretation", "MONOCHROME2"], + ["Rows", "256"], + ["Columns", "256"], + ["Bits Stored", "12"], + ["Bits Allocated", "16"], + ["High Bit", "11"], + ["Pixel Representation", "0"], + ["Manufacturer", "SIEMENS"], + ["Manufacturer Model Name", "MAGNETOM VISION"], + ["7fe0|0010", "gdcm::NotLoaded. Address:1866 Length:131072"] ] ], + ["MR-MONO2-16-head.dcm", + [ ["Transfer Syntax UID", "1.2.840.10008.1.2"], # Imp VR, LE + ["Modality", "MR"], + ["Photometric Interpretation", "MONOCHROME2"], + ["Rows", "256"], + ["Columns", "256"], + ["Bits Stored", "16"], + ["Bits Allocated", "16"], + ["High Bit", "15"], + ["Pixel Representation", "1"], + ["Manufacturer", "GE MEDICAL SYSTEMS"], + ["Manufacturer Model Name", "GENESIS_SIGNA"], + ["7fe0|0010", "gdcm::NotLoaded. Address:1804 Length:131072"] ] ], + # MR-MONO2-12-shoulder example is present in the Jpeg section. + # MR-MONO2-16-knee is not present in the test suite since it is too + # closely related to MR-MONO2-16-head.dcm to be of interest. + #################################### + # OT modality examples: + #################################### + # OT-MONO2-8-hip is not present in the test suite since it is too + # closely related to OT-MONO2-8-a7 to be of interest. + ["OT-PAL-8-face.dcm", + # Interest: has a color palette + [#"Transfer Syntax UID", and "Manufacturer" are absent. + ["Modality", "OT"], + ["Photometric Interpretation", "PALETTE COLOR"], + ["Rows", "480"], + ["Columns", "640"], + ["Bits Stored", "8"], + ["Bits Allocated", "8"], + ["High Bit", "7"], + ["Pixel Representation", "0"], + ["7fe0|0010", "gdcm::NotLoaded. Address:1654 Length:307200"] ] ], + # OT-MONO2-8-colon is not present in the test suite since it is too + # closely related to OT-MONO2-8-a7 to be of interest. + ["OT-MONO2-8-a7.dcm", + [#"Transfer Syntax UID" is absent. + ["Modality", "OT"], + ["Photometric Interpretation", "MONOCHROME2"], + ["Rows", "512"], + ["Columns", "512"], + ["Bits Stored", "8"], + ["Bits Allocated", "8"], + ["High Bit", "7"], + ["Pixel Representation", "0"], + ["Manufacturer", "Philips Medical Systems"], + ["7fe0|0010", "gdcm::NotLoaded. Address:438 Length:262144"] ] ], + #################################### + # US (Ultra Sound) modality examples: + #################################### + ["US-RGB-8-esopecho.dcm", + # Interest: RGB image + [ ["Transfer Syntax UID", "1.2.840.10008.1.2.1"], # Exp VR, LE + ["Modality", "US"], + ["Photometric Interpretation", "RGB"], + ["Rows", "120"], + ["Columns", "256"], + ["Bits Stored", "8"], + ["Bits Allocated", "8"], + ["High Bit", "7"], + ["Pixel Representation", "0"], + ["Manufacturer", "Acme Products"], + # FIXME: 92160 / (120*256) = 3 bytes per pixel NOT 1. Maybe + # it has something to do with [Samples Per Pixel] = [3] ??? + ["7fe0|0010", "gdcm::NotLoaded. Address:904 Length:92160"] ] ], + ["US-RGB-8-epicard.dcm", + # Interest: Big endian transfert syntax + [ ["Transfer Syntax UID", "1.2.840.10008.1.2.2"], # Big endian + ["Modality", "US"], + ["Photometric Interpretation", "RGB"], + ["Rows", "480"], + ["Columns", "640"], + ["Bits Stored", "8"], + ["Bits Allocated", "8"], + ["High Bit", "7"], + ["Pixel Representation", "0"], + ["Manufacturer", "G.E. Medical Systems"], + ["Manufacturer Model Name", "LOGIQ 700"], + # FIXME: 921600/(480*640) = 3 bytes per pixel NOT 1. Maybe + # it has something to do with [Samples Per Pixel] = [3] ??? + ["Implementation Version Name", "OFFIS-DCMTK-311"], + ["7fe0|0010", "gdcm::NotLoaded. Address:1012 Length:921600"] ] ], + ] + + MultiFrameFiles = [ + # The number of images is contained in the "Number of Frames" element + ["MR-MONO2-8-16x-heart.dcm", + # Interest: multi-frame + [ ["Transfer Syntax UID", "1.2.840.10008.1.2.1"], # ExpVR, LE + ["Number of Frames", "16"], + ["Modality", "MR"], + ["Photometric Interpretation", "MONOCHROME2"], + ["Rows", "256"], + ["Columns", "256"], + ["Bits Stored", "8"], + ["Bits Allocated", "8"], + ["High Bit", "7"], + ["Pixel Representation", "0"], + ["Manufacturer", "Philips"], + # Note: 256*256*16=1048576 (16 is the number of Frames) + ["7fe0|0010", "gdcm::NotLoaded. Address:920 Length:1048576"] ] ], + ["NM-MONO2-16-13x-heart.dcm", + # Interest: NM modality, multi-frame + [ ["Transfer Syntax UID", "1.2.840.10008.1.2.1"], # ExpVR, LE + ["Number of Frames", "13"], + ["Modality", "NM"], + ["Photometric Interpretation", "MONOCHROME2"], + ["Rows", "64"], + ["Columns", "64"], + ["Bits Stored", "16"], + ["Bits Allocated", "16"], + ["High Bit", "15"], + ["Pixel Representation", "0"], + ["Manufacturer", "ACME Products"], + # Note: 64*64*13*2=106496 + ["7fe0|0010", "gdcm::NotLoaded. Address:1234 Length:106496"] ] ], + ["US-MONO2-8-8x-execho.dcm", + # Interest: multi-frame + [ ["Transfer Syntax UID", "1.2.840.10008.1.2.1"], # ExpVR, LE + ["Number of Frames", "8"], + ["Modality", "US"], + ["Photometric Interpretation", "MONOCHROME2"], + ["Rows", "120"], + ["Columns", "128"], + ["Bits Stored", "8"], + ["Bits Allocated", "8"], + ["High Bit", "7"], + ["Pixel Representation", "0"], + ["Manufacturer", "Acme Products"], + ["7fe0|0010", "gdcm::NotLoaded. Address:976 Length:122880"] ] ], + ["US-PAL-8-10x-echo.dcm", + # Interest: RLE (Run Length Encoded) compression, multiframe + [ ["Transfer Syntax UID", "1.2.840.10008.1.2.5"], # RLE + ["Number of Frames", "10"], + ["Modality", "US"], + ["Photometric Interpretation", "PALETTE COLOR"], + ["Rows", "430"], + ["Columns", "600"], + ["Bits Stored", "8"], + ["Bits Allocated", "8"], + ["High Bit", "7"], + ["Pixel Representation", "0"], + ["Manufacturer", "ACME Products"], + ["7fe0|0010", "gdcm::NotLoaded. Address:2428 Length:481182"] ] ], + ["XA-MONO2-8-12x-catheter.dcm", + # Interest: XA modality, multi-frame + [ ["Transfer Syntax UID", "1.2.840.10008.1.2.4.70"], # jpeg + ["Number of Frames", "12"], # 12 images + ["Modality", "XA"], + ["Photometric Interpretation", "MONOCHROME2"], + ["Rows", "512"], + ["Columns", "512"], + ["Bits Stored", "8"], + ["Bits Allocated", "8"], + ["High Bit", "7"], + ["Pixel Representation", "0"], + ["Manufacturer", "Acme Products"], + ["7fe0|0010", "gdcm::NotLoaded. Address:1006 Length:920072"] ] ], + ] + + GdcmFiles = [ + ["gdcm-MR-SIEMENS-16.acr1", + # Interest: good old Acr-Nema Version 1, see also Oddities below + [ ["Recognition Code", "ACR-NEMA 1.0"], + ["Modality", "MR"], + ["Rows", "256"], + ["Columns", "256"], + ["Bits Stored", "12"], + ["Bits Allocated", "16"], + ["High Bit", "11"], + ["Pixel Representation", "0"], + ["Manufacturer", "SIEMENS"], + ["Manufacturer Model Name", "GBS III"], + # FIXME: this image looks padded at the end. The length of the file + # is 140288. Notice that, 256*256*2 + 1024 = 131072 + 1024 = 132096 + ["7fe0|0010", "gdcm::NotLoaded. Address:8192 Length:132096"], + # Oddities: "Study ID" and "Series Number" are empty + ["Study ID", ""], + ["Series Number", ""] ] ], + # Oddities: "Study" and "Serie Instance UID" are not present + ["gdcm-MR-SIEMENS-16.acr2", + # Interest: Acr-Nema Version 2 + [ ["Recognition Code", "ACR-NEMA 2.0"], + ["Modality", "MR"], + ["Rows", "512"], + ["Columns", "512"], + ["Bits Stored", "12"], + ["Bits Allocated", "16"], + ["High Bit", "11"], + ["Pixel Representation", "0"], + ["Manufacturer", "SIEMENS"], + ["Manufacturer Model Name", "MAGNETOM VISION"], + ["Study Instance UID", + "1.3.12.2.1107.5.2.4.7630.20000918174641000"], + ["Study ID", "1"], + ["Series Instance UID", + "1.3.12.2.1107.5.2.4.7630.20000918175714000007"], + ["Series Number", "7"], + ["7fe0|0010", "gdcm::NotLoaded. Address:6052 Length:524288"] ] ], + ["gdcm-US-ALOKA-16.dcm", + # Interest: - possesses 3 LUTS: a Green (checked), a Red and BLue. + # - announced as implicit VR, but really explicit VR. + [ ["Transfer Syntax UID", "1.2.840.10008.1.2"], # Implicit VR, LE + ["Modality", "US"], + ["Photometric Interpretation", "PALETTE COLOR"], + ["Segmented Green Palette Color LUT Data", + "gdcm::NotLoaded. Address:89576 Length:113784"], + ["Rows", "480"], + ["Columns", "640"], + ["Bits Stored", "16"], + ["Bits Allocated", "16"], + ["High Bit", "15"], + ["Pixel Representation", "0"], + ["Manufacturer", "ALOKA CO., LTD."], + ["Manufacturer Model Name", "SSD-4000"], + ["7fe0|0010", "gdcm::NotLoaded. Address:258740 Length:614400"] ] ], + ["gdcm-MR-PHILIPS-16.dcm", + # Interest: - possesses a sequence + # - dicom file, with a recognition code of ACR-NEMA1 + [ ["Transfer Syntax UID", "1.2.840.10008.1.2"], # Implicit VR, LE + ["Recognition Code", "ACR-NEMA 1.0"], + ["Modality", "MR"], + ["Photometric Interpretation", "MONOCHROME2"], + ["Rows", "256"], + ["Columns", "256"], + ["Bits Stored", "8"], + ["Bits Allocated", "16"], + ["High Bit", "7"], + ["Pixel Representation", "0"], + ["Manufacturer", "Philips Medical Systems"], + ["Manufacturer Model Name", "Gyroscan Intera"], + ["Sequence Variant", "OTHER"], + ["7fe0|0010", "gdcm::NotLoaded. Address:6584 Length:131072"] ] ], + ["gdcm-MR-PHILIPS-16-NonRectPix.dcm", + # Interest: - pixels are non rectangular + # - private elements are in explicit VR (which is normal) + [ ["Transfer Syntax UID", "1.2.840.10008.1.2.1"], # Explicit VR, LE + ["Modality", "MR"], + ["Photometric Interpretation", "MONOCHROME2"], + ["Rows", "64"], + ["Columns", "160"], + ["Bits Stored", "12"], + ["Bits Allocated", "16"], + ["High Bit", "11"], + ["Pixel Representation", "0"], + ["Manufacturer", "Philips Medical Systems"], + ["Manufacturer Model Name", "Gyroscan Intera"], + ["Pixel Spacing", "0.487416\\0.194966"], + ["7fe0|0010", "gdcm::NotLoaded. Address:5010 Length:20480"] ] ], + ["gdcm-CR-DCMTK-16-NonSamplePerPix.dcm", + # Interest: - Misses the "Samples Per Pixel" element which prevents + # e-film from reading it. + # - Misses the Manufacturer related info + [ ["Transfer Syntax UID", "1.2.840.10008.1.2.1"], # Explicit VR, LE + ["Modality", "CR"], + ["Photometric Interpretation", "MONOCHROME2"], + ["Rows", "750"], + ["Columns", "750"], + ["Bits Stored", "8"], + ["Bits Allocated", "8"], + ["High Bit", "7"], + ["Pixel Representation", "0"], + ["Implementation Version Name", "OFFIS_DCMTK_341"], + ["7fe0|0010", "gdcm::NotLoaded. Address:740 Length:562500"] ] ], + ] + + GdcmJpegFiles = [ + ["gdcm-JPEG-Extended.dcm", + # Interest: Jpeg compression [Extended (2,4)] + [ ["Transfer Syntax UID", "1.2.840.10008.1.2.4.51"], + ["Modality", "CT"], + ["Photometric Interpretation", "MONOCHROME2"], + ["Rows", "512"], + ["Columns", "512"], + ["Bits Stored", "12"], + ["Bits Allocated", "16"], + ["High Bit", "11"], + ["Pixel Representation", "0"], + ["Manufacturer", "SIEMENS"], + ["Manufacturer Model Name", "Volume Zoom"], + ["7fe0|0010", "gdcm::NotLoaded. Address:2946 Length:192218"] ] ], + ["MR-MONO2-12-shoulder.dcm", + # Interest: Jpeg compression [Lossless, non-hierar. (14)] + [ ["Transfer Syntax UID", "1.2.840.10008.1.2.4.57"], + ["Modality", "MR"], + ["Photometric Interpretation", "MONOCHROME2"], + ["Rows", "1024"], + ["Columns", "1024"], + ["Bits Stored", "12"], + ["Bits Allocated", "16"], + ["High Bit", "11"], + ["Pixel Representation", "0"], + ["Manufacturer", "Philips Medical Systems"], + ["Manufacturer Model Name", "Gyroscan NT"], + ["7fe0|0010", "gdcm::NotLoaded. Address:1580 Length:718948"] ] ], + ["gdcm-JPEG-LossLess3a.dcm", + # Interest: - Jpeg compression [Lossless, hierar., first-order + # pred. 14, Select. Val. 1] + # - contains a sequence [circa (0008,2112)] + # - contains additional data after the pixels ??? + [ ["Transfer Syntax UID", "1.2.840.10008.1.2.4.70"], + ["Modality", "CT"], + ["Photometric Interpretation", "MONOCHROME2"], + ["Rows", "512"], + ["Columns", "512"], + ["Bits Stored", "12"], + ["Bits Allocated", "16"], + ["High Bit", "11"], + ["Pixel Representation", "0"], + ["Manufacturer", "SIEMENS"], + ["Manufacturer Model Name", "Volume Zoom"] ] ], + # FIXME: the pixel data looks like corrupted. As stated by "od -A d -c" + # 0002528 à 177 020 \0 O B \0 \0 ÿ ÿ ÿ ÿ þ ÿ \0 à + # 0002544 \0 \0 \0 \0 þ ÿ \0 à 202 ? 003 \0 ÿ Ø ÿ Ã + # which we interpret as follows: + # - 2528: (à 177, 020 \0) = (0x7fe0, 0x0010) i.e. Pixel Data tag, + # - 2532: OB i.e. encapsulated encoded Pixel Data, + # - 2534: Two bytes reserved, + # - 2536: ÿ ÿ ÿ ÿ = 0xffffffff i.e. data element length is undefined. + # - 2540: (þ ÿ, \0 à) = (0xfffe, 0xe000) i.e. basic offset table + # item tag + # - 2544: \0 \0 \0 \0 i.e. offset table as length zero, i.e. no + # item value for offset table. + # - 2548: (þ ÿ, \0 à) = (0xfffe, 0xe000) i.e. item tag of first + # fragment of (encoded) pixel data. + # - 2552: 202 ? 003 \0 = 212866 bytes i.e. length of first fragment + # of (encoded) pixel data. + # and so the next item tag should be found at the 2556+212866 th + # octet i.e. at address 215422. But, as stated by od, we find: + # 0215408 E u Ö 026 Î É 7 ¬ Ã ¸ ó ¿ ÿ Ù \f ° + # 0215424 ¶ 016 P Ñ 002 016 + # and (\f °, ¶ 016) is NOT an OB item TAG which is required to be + # present (at least there should be a sequence delimiter), refer to + # PS 3.5-2001 page 50. + ["gdcm-JPEG-LossLess3b.dcm", + # Interest: - Jpeg compression [Lossless, hierar., first-order + # pred. 14, Select. Val. 1] + # - encoding is sligthly different from LossLess3a.dcm ??? + [ ["Transfer Syntax UID", "1.2.840.10008.1.2.4.70"], + ["Modality", "CR"], + ["Photometric Interpretation", "MONOCHROME2"], + ["Rows", "2076"], + ["Columns", "1876"], + ["Bits Stored", "15"], + ["Bits Allocated", "16"], + ["High Bit", "14"], + ["Pixel Representation", "0"], + ["Manufacturer", "Philips Medical Systems"], + ["Manufacturer Model Name", "Cassette Holder Type 9840 500 35201"], + ["7fe0|0010", "gdcm::NotLoaded. Address:3144 Length:4795668"] ] ], + ] + + def _BaseTest(self, FileSet): + for entry in FileSet: + fileName = os.path.join(TestFileDir, entry[0]) + toRead = gdcm.gdcmHeader(fileName) + toRead.LoadElements() + valDict = toRead.GetPubElVal() + for subEntry in entry[1]: + element = subEntry[0] + value = subEntry[1] + self.assertEqual(valDict[element], value, + ("Wrong %s for file %s (got %s, shoud be %s)" + % (element,fileName, valDict[element], value)) ) + + def testBarre(self): + gdcmTestCase._BaseTest(self, gdcmTestCase.BarreFiles) + + def testMultiFram(self): + gdcmTestCase._BaseTest(self, gdcmTestCase.MultiFrameFiles) + + def testFiles(self): + gdcmTestCase._BaseTest(self, gdcmTestCase.GdcmFiles) + + def testJpeg(self): + gdcmTestCase._BaseTest(self, gdcmTestCase.GdcmJpegFiles) + +if __name__ == '__main__': + unittest.main() + diff --git a/gdcmPython/win32/gdcmpy.dsp b/gdcmPython/win32/gdcmpy.dsp new file mode 100644 index 00000000..9474b69e --- /dev/null +++ b/gdcmPython/win32/gdcmpy.dsp @@ -0,0 +1,146 @@ +# Microsoft Developer Studio Project File - Name="gdcmpy" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=gdcmpy - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "gdcmpy.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "gdcmpy.mak" CFG="gdcmpy - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "gdcmpy - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "gdcmpy - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "gdcmpy - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GDCMPY_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MD /w /W0 /GX /O2 /I "c:\creatis\python21\include" /I "..\..\src" /I "$(CREATIS)\glib-1.3\src\glib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GDCMPY_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x40c /d "NDEBUG" +# ADD RSC /l 0x40c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib c:/creatis/python21/libs/python21.lib /nologo /dll /machine:I386 /out:"../_gdcm.dll" +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=copy gdcm.py ..\*.* +# End Special Build Tool + +!ELSEIF "$(CFG)" == "gdcmpy - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GDCMPY_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /w /W0 /Gm /GX /ZI /Od /I "c:\creatis\python21\include" /I "..\..\src" /I "$(CREATIS)\glib-1.3\src\glib" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GDCMPY_EXPORTS" /YX /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x40c /d "_DEBUG" +# ADD RSC /l 0x40c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib c:/creatis/python21/libs/python21_d.lib /nologo /dll /debug /machine:I386 /out:"../_gdcm_d.dll" /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "gdcmpy - Win32 Release" +# Name "gdcmpy - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\gdcm.i + +!IF "$(CFG)" == "gdcmpy - Win32 Release" + +# Begin Custom Build +ProjDir=. +InputPath=..\gdcm.i +InputName=gdcm + +"$(ProjDir)\$(InputName)_wrap.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + C:\creatis\SWIG-1.3.16\swig -python -c++ -I..\..\src -o $(ProjDir)\$(InputName)_wrap.cxx $(InputPath) + +# End Custom Build + +!ELSEIF "$(CFG)" == "gdcmpy - Win32 Debug" + +# Begin Custom Build - C:\creatis\SWIG-1.3.16\swig -python -c++ -I ..\..\src -o $(ProjDir)\$(InputName)_wrap.c $(InputPath) +ProjDir=. +InputPath=..\gdcm.i +InputName=gdcm + +"$(ProjDir)\$(InputName)_wrap.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + C:\creatis\SWIG-1.3.16\swig -python -c++ -I..\..\src -o $(ProjDir)\$(InputName)_wrap.cxx $(InputPath) + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\gdcm_wrap.cxx +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\src\win32\gdcmdll\Release\gdcmdll.lib +# End Source File +# End Target +# End Project diff --git a/gdcmPython/win32/gdcmpycomplet.dsp b/gdcmPython/win32/gdcmpycomplet.dsp new file mode 100644 index 00000000..76d2bdaf --- /dev/null +++ b/gdcmPython/win32/gdcmpycomplet.dsp @@ -0,0 +1,174 @@ +# Microsoft Developer Studio Project File - Name="gdcmpycomplet" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=gdcmpycomplet - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "gdcmpycomplet.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "gdcmpycomplet.mak" CFG="gdcmpycomplet - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "gdcmpycomplet - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "gdcmpycomplet - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "gdcmpycomplet - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "gdcmpycomplet___Win32_Release" +# PROP BASE Intermediate_Dir "gdcmpycomplet___Win32_Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "gdcmpycomplet___Win32_Release" +# PROP Intermediate_Dir "gdcmpycomplet___Win32_Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GDCMPYCOMPLET_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /w /W0 /GX /O2 /I "c:\creatis\python21\include" /I "..\..\src" /I "$(CREATIS)\glib-1.3\src\glib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GDCMPYCOMPLET_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x40c /d "NDEBUG" +# ADD RSC /l 0x40c /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib c:/creatis/python21/libs/python21.lib /nologo /dll /machine:I386 /out:"../_gdcm.dll" + +!ELSEIF "$(CFG)" == "gdcmpycomplet - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "gdcmpycomplet___Win32_Debug" +# PROP BASE Intermediate_Dir "gdcmpycomplet___Win32_Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "gdcmpycomplet___Win32_Debug" +# PROP Intermediate_Dir "gdcmpycomplet___Win32_Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GDCMPYCOMPLET_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /w /W0 /Gm /GX /ZI /Od /I "c:\creatis\python21\include" /I "..\..\src" /I "$(CREATIS)\glib-1.3\src\glib" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GDCMPYCOMPLET_EXPORTS" /YX /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x40c /d "_DEBUG" +# ADD RSC /l 0x40c /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib c:/creatis/python21/libs/python21_d.lib /nologo /dll /debug /machine:I386 /out:"../_gdcm_d.dll" /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "gdcmpycomplet - Win32 Release" +# Name "gdcmpycomplet - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\gdcm.i + +!IF "$(CFG)" == "gdcmpycomplet - Win32 Release" + +# Begin Custom Build +ProjDir=. +InputPath=..\gdcm.i +InputName=gdcm + +"$(ProjDir)\$(InputName)_wrap.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + C:\creatis\SWIG-1.3.16\swig -python -c++ -I..\..\src -o $(ProjDir)\$(InputName)_wrap.cxx $(InputPath) + +# End Custom Build + +!ELSEIF "$(CFG)" == "gdcmpycomplet - Win32 Debug" + +# Begin Custom Build - C:\creatis\SWIG-1.3.16\swig -python -c++ -I ..\..\src -o $(ProjDir)\$(InputName)_wrap.c $(InputPath) +ProjDir=. +InputPath=..\gdcm.i +InputName=gdcm + +"$(ProjDir)\$(InputName)_wrap.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + C:\creatis\SWIG-1.3.16\swig -python -c++ -I..\..\src -o $(ProjDir)\$(InputName)_wrap.cxx $(InputPath) + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\gdcm_wrap.cxx +# End Source File +# Begin Source File + +SOURCE=..\..\src\gdcmDict.cxx +# End Source File +# Begin Source File + +SOURCE=..\..\src\gdcmDictEntry.cxx +# End Source File +# Begin Source File + +SOURCE=..\..\src\gdcmDictSet.cxx +# End Source File +# Begin Source File + +SOURCE=..\..\src\gdcmElValSet.cxx +# End Source File +# Begin Source File + +SOURCE=..\..\src\gdcmElValue.cxx +# End Source File +# Begin Source File + +SOURCE=..\..\src\gdcmFile.cxx +# End Source File +# Begin Source File + +SOURCE=..\..\src\gdcmHeader.cxx +# End Source File +# Begin Source File + +SOURCE=..\..\src\gdcmHeaderIdo.cxx +# End Source File +# Begin Source File + +SOURCE=..\..\src\gdcmUtil.cxx +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project