+++ /dev/null
-/*=========================================================================
-
- Program: wxMaracas
- Module: $RCSfile: marGdcmDicom.cpp,v $
- Language: C++
- Date: $Date: 2008/11/06 11:00:50 $
- Version: $Revision: 1.2 $
-
- Copyright: (c) 2002, 2003
- License:
-
- 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.
-
-=========================================================================*/
-
-#ifdef _MSC_VER
-#pragma warning ( disable : 4786 )
-#pragma warning ( disable : 4251 )
-#endif //_MSC_VER
-
-
-#include <wx/file.h>
-#include <wx/filename.h>
-#include <wx/dir.h>
-#include <wx/msgdlg.h>
-
-#include <vector>
-#include <string>
-
-#include <gdcm.h>
-#include <gdcmFile.h>
-#include "vtkGdcmReader.h"
-
-#include <vtkImageData.h>
-#include <vtkImageChangeInformation.h>
-#include <vtkImageCast.h>
-#include <vtkImageShiftScale.h>
-#include <vtkCommand.h>
-#include <vtkImageAppend.h>
-#include <vtkImageReader.h>
-
-#include "marGdcmDicom.h"
-
-
-
-#include <iostream>
-#include <fstream>
-//using namespace std;
-
-
-
-#define _DICOMFILENAME "/DICOMDIR"
-
-//----------------------------------------------------------------------------
-// Callback for the interaction
-class marProgressObserver : public vtkCommand
-{
- public:
- static marProgressObserver *New()
- { return new marProgressObserver; }
- marProgressObserver()
- {
- this->FrameGauge = NULL;
- }
- virtual void Execute(vtkObject *wdg, unsigned long event, void* calldata)
- {
- if ( this->FrameGauge )
- {
- int val = this->FrameGauge->GetValue();
- this->FrameGauge->SetValue( val + 1);
- //wxYield();
- //wxSafeYield();
- //wxYieldIfNeeded();
- //wxWakeUpIdle();
- //wxSafeYield( this->FrameGauge, FALSE);
- }
- }
- wxGauge *FrameGauge;
-};
-//----------------------------------------------------------------------------
-/* EED Borrame
-static char* DicomTagsNames[] = {
- "ID_File_Name",
- "ID_SOP_Class_UID", //!0008 0016 UI ID SOP Class UID
- "ID_SOP_Instance_UID", //!0008 0018 UI ID SOP Instance UID
- "ID_Study_Date", //!0008 0020 DA ID Study Date
- "ID_Series_Date", //!0008 0021 DA ID Series Date
- "ID_Acquisition_Date", //!0008 0022 DA ID Acquisition Date
- "ID_Image_Date", //!0008 0023 DA ID Image Date
- "ID_Study_Time", //!0008 0030 TM ID Study Time
- "ID_Series_Time", //!0008 0031 TM ID Series Time
- "ID_Acquisition_Time", //!0008 0032 TM ID Acquisition Time
- "ID_Image_Time", //!0008 0033 TM ID Image Time
- "ID_Modality", //!0008 0060 CS ID Modality
- "ID_Manufacturer", //!0008 0070 LO ID Manufacturer
- "ID_Institution_Name", //!0008 0080 LO ID Institution Name
- "ID_Study_Description", //!0008 1030 LO ID Study Description
- "ID_Series_Description", //!0008 103e LO ID Series Description
- "ID_Admitting_Diagnoses_Description", //!0008 1080 LO ID Admitting Diagnoses Description
- "ID_Patient_Name", //!0010 0010 PN PAT Patient Name
- "ID_Patient_ID", //!0010 0020 LO PAT Patient ID
- "ID_Body_Part_Examined", //!0018 0015 CS ACQ Body Part Examined
- "ID_Scanning_Sequence", //!0018 0020 CS ACQ Scanning Sequence
- "ID_Sequence_Variant", //!0018 0021 CS ACQ Sequence Variant
- "ID_Scan_Options", //!0018 0022 CS ACQ Scan Options
- "ID_MR_Acquisition_Type", //!0018 0023 CS ACQ MR Acquisition Type
- "ID_Sequence_Name", //!0018 0024 SH ACQ Sequence Name
- "ID_Slice_Thickness", //!0018 0050 DS ACQ Slice Thickness
- "ID_Repetition_Time", //!0018 0080 DS ACQ Repetition Time
- "ID_Echo_Time", //!0018 0081 DS ACQ Echo Time
- "ID_Inversion_Time", //!0018 0082 DS ACQ Inversion Time
- "ID_Number_of_Averages", //!0018 0083 DS ACQ Number of Averages
- "ID_Imaging_Frequency", //!0018 0084 DS ACQ Imaging Frequency
- "ID_Imaged_Nucleus", //!0018 0085 SH ACQ Imaged Nucleus
- "ID_Echo_Number", //!0018 0086 IS ACQ Echo Number
- "ID_Magnetic_Field_Strength", //!0018 0087 DS ACQ Magnetic Field Strength
- "ID_Spacing_Between_Slices", //!0018 0088 DS ACQ Spacing Between Slices
- "ID_Echo_Train_Length", //!0018 0091 IS ACQ Echo Train Length
- "ID_Percent_Sampling", //!0018 0093 DS ACQ Percent Sampling
- "ID_Percent_Phase_Field_of_View", //!0018 0094 DS ACQ Percent Phase Field of View
- "ID_Receiving_Coil", //!0018 1250 SH ACQ Receiving Coil
- "ID_Patient_Position", //!0018 5100 CS ACQ Patient Position
- "ID_Study_Instance_UID", //!0020 000d UI REL Study Instance UID
- "ID_Series_Instance_UID", //!0020 000e UI REL Series Instance UID
- "ID_Study_ID", //!0020 0010 SH REL Study ID
- "ID_Series_Number", //!0020 0011 IS REL Series Number
- "ID_Acquisition_Number", //!0020 0012 IS REL Acquisition Number
- "ID_Image_Number", //!0020 0013 IS REL Image Number
- "ID_Patient_Orientation", //!0020 0020 CS REL Patient Orientation
- "ID_Image_Position", //!0020 0030 RET REL Image Position
- "ID_Image_Position_Patient", //!0020 0032 DS REL Image Position Patient
- "ID_Image_Orientation", //!0020 0035 RET REL Image Orientation
- "ID_Image_Orientation_Patient", //!0020 0037 DS REL Image Orientation (Patient)
- "ID_Location", //!0020 0050 RET REL Location
- "ID_Frame_of_Reference_UID", //!0020 0052 UI REL Frame of Reference UID
- "ID_Slice_Location", //!0020 1041 DS REL Slice Location
- "ID_Image_Comments", //!0020 4000 LT REL Image Comments
- "ID_Pixel_Spacing", //!0028 0030 DS IMG Pixel Spacing
- "ID_Window_Center", //!0028 1050 DS IMG Window Center
- "ID_Window_Width", //!0028 1051 DS IMG Window Width
- "ID_Rescale_Intercept", //!0028 1052 CT IMG Rescale Intercept
- "ID_Rescale_Slope", //!0028 1053 CT IMG Rescale Slope
-};
-
-*/
-
-// -------------------------------------------------------------------------
-marGdcmDicom::marGdcmDicom( marParameters* p )
- : marFilesBase( p ){
- _dicomDir=NULL;
- _iniSlice=-1;
- _endSlice=-1;
-//EED Borrame FillDicomInfo( );
-}
-
-/** Conversion de wxString en string. */
-//#define ws2s(as) (string(as.GetData()))
-
-/** Conversion de string en wxString. */
-//#define s2ws(s) (wxString((s).c_str()))
-
-/** Conversion de C-string en wxString. */
-//#define cs2ws(s) (wxString(s))
-
-/* EED Borrame
-// -------------------------------------------------------------------------
-wxArrayString marGdcmDicom::gdcmGetExamInfo( wxString directoryname ){
-
- wxArrayString temparray;
- temparray.Alloc( 60 );
-
- wxDir dir(directoryname);
- wxString filename;
- bool cont = dir.GetFirst( &filename, "*", wxDIR_FILES );
- filename = directoryname + "/" + filename;
-
- std::string val;
-
- GDCM_NAME_SPACE::Header GdcmHeader( filename.c_str() );
- temparray.Add( filename ); // "ID_File_Name",
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0008,0x0016).c_str() );// "ID_SOP_Class_UID", //0008 0016 UI ID SOP Class UID
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0008,0x0018).c_str() );// "ID_SOP_Instance_UID", //0008 0018 UI ID SOP Instance UID
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0008,0x0020).c_str() );// "ID_Study_Date", //0008 0020 DA ID Study Date
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0008,0x0021).c_str() );// "ID_Series_Date", //0008 0021 DA ID Series Date
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0008,0x0022).c_str() );// "ID_Acquisition_Date", //0008 0022 DA ID Acquisition Date
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0008,0x0023).c_str() );// "ID_Image_Date", //0008 0023 DA ID Image Date
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0008,0x0030).c_str() );// "ID_Study_Time", //0008 0030 TM ID Study Time
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0008,0x0031).c_str() );// "ID_Series_Time", //0008 0031 TM ID Series Time
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0008,0x0032).c_str() );// "ID_Acquisition_Time", //0008 0032 TM ID Acquisition Time
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0008,0x0033).c_str() );// "ID_Image_Time", //0008 0033 TM ID Image Time
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0008,0x0060).c_str() );// "ID_Modality", //0008 0060 CS ID Modality
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0008,0x0070).c_str() );// "ID_Manufacturer", //0008 0070 LO ID Manufacturer
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0008,0x0080).c_str() );// "ID_Institution_Name", //0008 0080 LO ID Institution Name
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0008,0x1030).c_str() );// "ID_Study_Description", //0008 1030 LO ID Study Description
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0008,0x103e).c_str() );// "ID_Series_Description", //0008 103e LO ID Series Description
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0008,0x1080).c_str() );// "ID_Admitting_Diagnoses_Description", //0008 1080 LO ID Admitting Diagnoses Description
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0010,0x0010).c_str() );// "ID_Patient_Name", //0010 0010 PN PAT Patient Name
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0010,0x0020).c_str() );// "ID_Patient_ID", //0010 0020 LO PAT Patient ID
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0018,0x0015).c_str() );// "ID_Body_Part_Examined", //0018 0015 CS ACQ Body Part Examined
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0018,0x0020).c_str() );// "ID_Scanning_Sequence", //0018 0020 CS ACQ Scanning Sequence
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0018,0x0021).c_str() );// "ID_Sequence_Variant", //0018 0021 CS ACQ Sequence Variant
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0018,0x0022).c_str() );// "ID_Scan_Options", //0018 0022 CS ACQ Scan Options
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0018,0x0023).c_str() );// "ID_MR_Acquisition_Type", //0018 0023 CS ACQ MR Acquisition Type
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0018,0x0024).c_str() );// "ID_Sequence_Name", //0018 0024 SH ACQ Sequence Name
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0018,0x0050).c_str() );// "ID_Slice_Thickness", //0018 0050 DS ACQ Slice Thickness
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0018,0x0080).c_str() );// "ID_Repetition_Time", //0018 0080 DS ACQ Repetition Time
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0018,0x0081).c_str() );// "ID_Echo_Time", //0018 0081 DS ACQ Echo Time
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0018,0x0082).c_str() );// "ID_Inversion_Time", //0018 0082 DS ACQ Inversion Time
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0018,0x0083).c_str() );// "ID_Number_of_Averages", //0018 0083 DS ACQ Number of Averages
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0018,0x0084).c_str() );// "ID_Imaging_Frequency", //0018 0084 DS ACQ Imaging Frequency
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0018,0x0085).c_str() );// "ID_Imaged_Nucleus", //0018 0085 SH ACQ Imaged Nucleus
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0018,0x0086).c_str() );// "ID_Echo_Number", //0018 0086 IS ACQ Echo Number
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0018,0x0087).c_str() );// "ID_Magnetic_Field_Strength", //0018 0087 DS ACQ Magnetic Field Strength
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0018,0x0088).c_str() );// "ID_Spacing_Between_Slices", //0018 0088 DS ACQ Spacing Between Slices
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0018,0x0091).c_str() );// "ID_Echo_Train_Length", //0018 0091 IS ACQ Echo Train Length
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0018,0x0093).c_str() );// "ID_Percent_Sampling", //0018 0093 DS ACQ Percent Sampling
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0018,0x0094).c_str() );// "ID_Percent_Phase_Field_of_View", //0018 0094 DS ACQ Percent Phase Field of View
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0018,0x1250).c_str() );// "ID_Receiving_Coil", //0018 1250 SH ACQ Receiving Coil
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0018,0x5100).c_str() );// "ID_Patient_Position", //0018 5100 CS ACQ Patient Position
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0020,0x000d).c_str() );// "ID_Study_Instance_UID", //0020 000d UI REL Study Instance UID
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0020,0x000e).c_str() );// "ID_Series_Instance_UID", //0020 000e UI REL Series Instance UID
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0020,0x0010).c_str() );// "ID_Study_ID", //0020 0010 SH REL Study ID
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0020,0x0011).c_str() );// "ID_Series_Number", //0020 0011 IS REL Series Number
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0020,0x0012).c_str() );// "ID_Acquisition_Number", //0020 0012 IS REL Acquisition Number
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0020,0x0013).c_str() );// "ID_Image_Number", //0020 0013 IS REL Image Number
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0020,0x0020).c_str() );// "ID_Patient_Orientation", //0020 0020 CS REL Patient Orientation
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0020,0x0030).c_str() );// "ID_Image_Position", //0020 0030 RET REL Image Position
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0020,0x0032).c_str() );// "ID_Image_Position_Patient", //0020 0032 DS REL Image Position Patient
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0020,0x0035).c_str() );// "ID_Image_Orientation", //0020 0035 RET REL Image Orientation
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0020,0x0037).c_str() );// "ID_Image_Orientation_Patient", //0020 0037 DS REL Image Orientation (Patient)
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0020,0x0050).c_str() );// "ID_Location", //0020 0050 RET REL Location
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0020,0x0052).c_str() );// "ID_Frame_of_Reference_UID", //0020 0052 UI REL Frame of Reference UID
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0020,0x1041).c_str() );// "ID_Slice_Location", //0020 1041 DS REL Slice Location
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0020,0x4000).c_str() );// "ID_Image_Comments", //0020 4000 LT REL Image Comments
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0028,0x0030).c_str() );// "ID_Pixel_Spacing", //0028 0030 DS IMG Pixel Spacing
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0028,0x1050).c_str() );// "ID_Window_Center", //0028 1050 DS IMG Window Center
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0028,0x1051).c_str() );// "ID_Window_Width", //0028 1051 DS IMG Window Width
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0028,0x1052).c_str() );// "ID_Rescale_Intercept", //0028 1052 CT IMG Rescale Intercept
- temparray.Add( GdcmHeader.GetEntryByNumber(0x0028,0x1053).c_str() );// "ID_Rescale_Slope", //0028 1053 CT IMG Rescale Slope
-
- return temparray;
-}
-*/
-
-//#undef s2ws
-
-
-// ----------------------------------------------------------------------------
-GDCM_NAME_SPACE::DicomDir* marGdcmDicom::getGdcmDicomDir() {
- return _dicomDir;
-}
-
-
-// ----------------------------------------------------------------------------
-void marGdcmDicom::CreateDicomFile( ){
- wxString rootdir = getParameters( )->getStringParam( marParameters::e_dicom_images_directory );
-// EED Borrame GDCM_NAME_SPACE::DicomDir *tmp_dicomDir = new GDCM_NAME_SPACE::DicomDir( rootdir.c_str() , true );
- GDCM_NAME_SPACE::DicomDir *tmp_dicomDir = GDCM_NAME_SPACE::DicomDir::New();
- tmp_dicomDir->SetFileName( (const char*)(rootdir.mb_str()) );
- tmp_dicomDir->ParseDirectory();
- wxString strDicomDir(rootdir + wxString(_DICOMFILENAME, wxConvUTF8) );
- tmp_dicomDir->Write( (const char*)(strDicomDir.mb_str()) );
- tmp_dicomDir->Delete();
-}
-
-// ----------------------------------------------------------------------------
-void marGdcmDicom::FillDicomInfo(bool parseDir){
- reset();
-
- wxString rootdir = getParameters( )->getStringParam( marParameters::e_dicom_images_directory );
- wxString strDICOMDIR( rootdir );
- if (parseDir==false){
- strDICOMDIR= strDICOMDIR + (wxChar)(_DICOMFILENAME);
- }
-//EED Borrame _dicomDir = new GDCM_NAME_SPACE::DicomDir( strDICOMDIR.c_str() , parseDir );
- _dicomDir = GDCM_NAME_SPACE::DicomDir::New();
- _dicomDir->SetFileName( (const char*)(strDICOMDIR.mb_str()) );
- if (parseDir==true){
- _dicomDir->ParseDirectory();
- } else {
- _dicomDir->Load();
- }
-}
-
-//-------------------------------------------------------------------------
-void marGdcmDicom::setActualPatient(GDCM_NAME_SPACE::DicomDirPatient *patient){
- _actualPatient = patient;
-}
-//-------------------------------------------------------------------------
-void marGdcmDicom::setActualStudy(GDCM_NAME_SPACE::DicomDirStudy *study){
- _actualStudy = study;
-}
-//-------------------------------------------------------------------------
-void marGdcmDicom::setActualSerie(GDCM_NAME_SPACE::DicomDirSerie *serie){
- _actualSerie = serie;
- setIniSlice(1);
- GDCM_NAME_SPACE::DicomDirImage *im;
- int numOfImg = 0;
- im = serie->GetFirstImage();
- while ( im ) { // on degouline les Images de cette serie
- numOfImg++;
- im = serie->GetNextImage();
- }
- setEndSlice( numOfImg );
-}
-//-------------------------------------------------------------------------
-void marGdcmDicom::setIniSlice(int iniSlice){
- _iniSlice=iniSlice;
-}
-//-------------------------------------------------------------------------
-void marGdcmDicom::setEndSlice(int endSlice){
- _endSlice=endSlice;
-}
-//-------------------------------------------------------------------------
-GDCM_NAME_SPACE::DicomDirSerie *marGdcmDicom::getActualSerie(){
- return _actualSerie;
-}
-
-//-------------------------------------------------------------------------
-GDCM_NAME_SPACE::DicomDirStudy* marGdcmDicom::getActualStudy(){
- return _actualStudy;
-}
-
-
-// -------------------------------------------------------------------------
-bool marGdcmDicom::SerieVerificationEqImageSize( GDCM_NAME_SPACE::FileList *gdcmFileList ){
- bool ok = true;
- int ww = -1;
- int hh = -1;
- int wwBak = -1;
- int hhBak = -1;
-
- int i;
- for (i=(*gdcmFileList).size(); i<(*gdcmFileList).size() ; i++){
- GDCM_NAME_SPACE::File *gdcmFile = (GDCM_NAME_SPACE::File*)(*gdcmFileList)[i];
-
- ww = gdcmFile->GetXSize();
- hh = gdcmFile->GetYSize();
-
- if (wwBak!=-1){
- if (ww!=wwBak){ ok=false; }
- }
- wwBak=ww;
-
- if (hhBak!=-1){
- if (hh!=hhBak){ ok=false; }
- }
- hhBak=hh;
-
- }
-
- return ok;
-}
-
-
-/*
-// -------------------------------------------------------------------------
-bool marGdcmDicom::SerieVerificationEqImageOrientation( gdcmPub::FileList *gdcmFileList ){
- bool ok = true;
- float ox=-1,oy=-1,oz-1;
- float oxBak=-99999,oyBak=-99999,ozBak=-99999;
- gdcmPub::SerieHeader::GdcmHeaderList gdcmheaderlist = serieheader->GetGdcmFileList();
-
-// gdcmPub::ListDicomDirImage::const_iterator itImage;
-// itImage = (serie->GetDicomDirImages()).begin();
-
- float iop[6];
- for ( gdcmPub::SerieHeader::GdcmHeaderList::const_iterator
- it = gdcmheaderlist.begin();
- it != gdcmheaderlist.end(); ++it ){
- (*it)->GetImageOrientationPatient( iop );
- normal[0] = iop[1]*iop[5] - iop[2]*iop[4];
- normal[1] = iop[2]*iop[3] - iop[0]*iop[5];
- normal[2] = iop[0]*iop[4] - iop[1]*iop[3];
-
- falta terminar esto .....
-
- if (oxBak!=-99999){
- float rox,roy,roz;
- prodouit_vectorial(ox,oy,oz , oxBak,oyBak,ozBak , &rox,&roy,&roz);
- if ( (abs(rox)>0.000001) || (abs(roy)>0.000001) || (abs(roz)>0.000001)){
- ok=false;
- }
- }
- oxBak=ox;
- oyBak=oy;
- ozBak=oz;
- }
-
- // The same image orientation verification
- while (itImage != serie->GetDicomDirImages().end() ) { // on degouline les SERIES de cette study
- wxString strNum;
- wxString strSub;
- wxString strImgOriPat=(*itImage)->GetEntryByNumber(0x0020, 0x0037).c_str();
- double x1,y1,z1;
- double x2,y2,z2;
- if (strImgOriPat.Cmp( gdcmPub::GDCM_UNFOUND.c_str() )!=0){
- int pp;
- strSub=strImgOriPat.Mid(0);
-
- pp=strSub.First('\');
- strNum=strSub.Mid(0, pp-1 );
- strNum.ToDouble(&x1);
- strSub=strSub.Mid(pp+1);
-
- pp=strSub.First('\');
- strNum=strSub.Mid(0, pp-1 );
- strNum.ToDouble(&y1);
- strSub=strSub.Mid(pp+1);
-
- pp=strSub.First('\');
- strNum=strSub.Mid(0, pp-1 );
- strNum.ToDouble(&z1);
- strSub=strSub.Mid(pp+1);
-
- pp=strSub.First('\');
- strNum=strSub.Mid(0, pp-1 );
- strNum.ToDouble(&x2);
- strSub=strSub.Mid(pp+1);
-
- pp=strSub.First('\');
- strNum=strSub.Mid(0, pp-1 );
- strNum.ToDouble(&y2);
- strSub=strSub.Mid(pp+1);
-
- pp=strSub.First('\');
- strNum=strSub.Mid(0, pp-1 );
- strNum.ToDouble(&z2);
- strSub=strSub.Mid(pp+1);
-
- normalize(&x1,&y1,&z1);
- normalize(&x2,&y2,&z2);
- prodouit_vectorial(x1,y1,z1 , x2,y2,z2 , &ox,&oy,&oz);
- normalize(&ox,&oy,&oz);
- if (oxBak!=-99999){
- double rox,roy,roz;
- prodouit_vectorial(ox,oy,oz , oxBak,oyBak,ozBak , &rox,&roy,&roz);
- if ( (abs(rox)>0.000001) || (abs(roy)>0.000001) || (abs(roz)>0.000001)){
- ok=false;
- }
- }
- oxBak=ox;
- oyBak=oy;
- ozBak=oz;
- }
- ++itImage;
- } // while
- return ok;
-}
-// -------------------------------------------------------------------------
-*/
-
-
-bool marGdcmDicom::SerieVerification( GDCM_NAME_SPACE::FileList *gdcmFileList ){
- bool ok1=true;
- bool ok2=true;
- bool ok3=true;
- ok1=SerieVerificationEqImageSize(gdcmFileList);
-// ok2=SerieVerificationEqImageOrientation(gdcmFileList);
-// ok3=SerieVerificationDifImagePositionPatient(gdcmFileList);
- if (ok1==false){
- wxMessageDialog *msg = new wxMessageDialog(NULL, _T("The size of all images aren't the same."), _T("Warning"), wxOK );
- msg->ShowModal();
- delete msg;
- }
- return ok1 && ok2 && ok3;
-}
-
-
-// -------------------------------------------------------------------------
-void marGdcmDicom::CreateEmptyVoxel(){
- freeVolume();
- GDCM_NAME_SPACE::File *gdcmFile=_gdcmFileList[0];
- int wx = gdcmFile->GetXSize();
- int wy = gdcmFile->GetYSize();
- int wz = _gdcmFileList.size();
-
- if (wx==0)
- {
- wx=1;
- }
-
- double spx= (double)gdcmFile->GetXSpacing ();
- double spy= (double)gdcmFile->GetYSpacing ();
- double spz= (double)gdcmFile->GetZSpacing ();
- kVolume *vol =new kVolume( kVolume::USHORT, wx, wy, wz,spx, spy, spz, malloc(sizeof(unsigned short)*wx*wy*wz ) );
- SetVolume( vol );
-}
-// -------------------------------------------------------------------------
-void marGdcmDicom::PrepareLoadVolumeDispers(){
- CreateSerieHelper();
- CreateEmptyVoxel();
- ExtactSpacing();
- ExtactInterceptSlope();
-}
-
-//EED 7 mars 2007
-// -------------------------------------------------------------------------
-void marGdcmDicom::ExtactSpacing(){
- GDCM_NAME_SPACE::File *gdcmFile=_gdcmFileList[0];
- float sx = gdcmFile->GetXSpacing();
- float sy = gdcmFile->GetYSpacing();
-// float sz = gdcmFile->GetZSpacing();
-
-
- float xx1 = (_gdcmFileList[0])->GetXOrigin();
- float yy1 = (_gdcmFileList[0])->GetYOrigin();
- float zz1 = (_gdcmFileList[0])->GetZOrigin();
-
- (_gdcmFileList[1])->Load();
- float xx2 = (_gdcmFileList[1])->GetXOrigin();
- float yy2 = (_gdcmFileList[1])->GetYOrigin();
- float zz2 = (_gdcmFileList[1])->GetZOrigin();
-
- float xx=xx1-xx2;
- float yy=yy1-yy2;
- float zz=zz1-zz2;
-
- float sz=sqrt( xx*xx + yy*yy+ zz*zz );
-
- getParameters( )->setDoubleParam( marParameters::e_voxel_x_dimension, sx );
- getParameters( )->setDoubleParam( marParameters::e_voxel_y_dimension, sy );
- getParameters( )->setDoubleParam( marParameters::e_voxel_z_dimension, sz );
-}
-// -------------------------------------------------------------------------
-void marGdcmDicom::ExtactInterceptSlope(){
- GDCM_NAME_SPACE::File *gdcmFile=_gdcmFileList[0];
- float slope = gdcmFile->GetRescaleSlope();
- float intercept = gdcmFile->GetRescaleIntercept();
- getParameters( )->setDoubleParam( marParameters::e_RescaleIntercept , intercept );
- getParameters( )->setDoubleParam( marParameters::e_RescaleSlope , slope );
-}
-
-
-// -------------------------------------------------------------------------
-bool marGdcmDicom::loadFileDicom(void* p_vol,int *dim,char *namefile)
-{
- int dataSize;
- GDCM_NAME_SPACE::File *gdcmFile = GDCM_NAME_SPACE::File::New();
-// gdcmFile->SetLoadMode(GDCM_NAME_SPACE::LD_NOSHADOW);
- gdcmFile->SetFileName( namefile );
- bool ok = gdcmFile->Load();
- if (ok==true)
- {
- dataSize=sizeof(unsigned short)*dim[0]*dim[1];
-
- bool manualLecture=false;
- if ( (gdcmFile->GetTransferSyntaxName()=="Implicit VR - Little Endian") ||
- (gdcmFile->GetTransferSyntaxName()=="Explicit VR - Little Endian") ||
- (gdcmFile->GetTransferSyntaxName()=="Explicit VR - Big Endian") )
- {
- manualLecture=true;
- }
-
- if (manualLecture==true){
- long int offset = gdcmFile->GetPixelOffset();
- FILE *ff=fopen(namefile, "r" );
- fseek (ff,offset,SEEK_SET);
- fread( (char*)p_vol , dataSize,1, ff);
- fclose(ff);
-
- // gdcm/Dics/dicomTS.dic
- // champ DICOM >> 0002|0010
- if (gdcmFile->GetTransferSyntaxName()=="Explicit VR - Big Endian")
- {
- int i;
- char tmp;
- char *pp=(char*)p_vol;
- dataSize=dim[0]*dim[1];
- for (i=0;i<dataSize;i++)
- {
- tmp = *pp;
- *pp = *(pp+1);
- *(pp+1) = tmp;
- pp=pp+2;
- }
- }
- } else {
- GDCM_NAME_SPACE::FileHelper *fh = GDCM_NAME_SPACE::FileHelper::New(gdcmFile);
- memcpy((char*)p_vol, fh->GetImageDataRaw() , dataSize);
- }
- }
- gdcmFile->Delete();
- return ok;
-}
-// -------------------------------------------------------------------------
-
-
-bool marGdcmDicom::loadImage(int i)
-{
-
- int dim[3];
- GDCM_NAME_SPACE::File *gdcmFileTEMP;
-
- gdcmFileTEMP = _gdcmFileList[i];
- vtkImageData *vol = getVolume( )->castVtk();
- void *p_vol=(void*)getVolume( )->castVtk()->GetScalarPointer(0,0,i);
- vol->GetDimensions(dim);
- bool ok=loadFileDicom( p_vol ,dim, (char *)gdcmFileTEMP->GetFileName().c_str() );
-
-//EEDx44
- if (ok==false) {
- char *ss = (char *)gdcmFileTEMP->GetFileName().c_str();
- _lstFileNotReaded.push_back( ss );
- }
-
- return ok;
-}
-
-/* EED Borrame
-// -------------------------------------------------------------------------
-
-void marGdcmDicom::loadImage(int i)
-{
- long int offset;
- GDCM_NAME_SPACE::File *gdcmFileTEMP=_gdcmFileList[i];
- GDCM_NAME_SPACE::File *gdcmFile = GDCM_NAME_SPACE::File::New();
- gdcmFile->SetLoadMode(GDCM_NAME_SPACE::LD_NOSHADOW);
- gdcmFile->SetFileName( gdcmFileTEMP->GetFileName().c_str() );
- bool ok = gdcmFile->Load();
- offset = gdcmFile->GetPixelOffset();
- gdcmFile->Delete();
-
- std::ifstream infile;
- FILE *ff=fopen(gdcmFileTEMP->GetFileName().c_str(), "r" );
- vtkImageData *vol = getVolume( )->castVtk();
- int dim[3];
- vol->GetDimensions(dim);
- int US=sizeof(unsigned short);
- int dataSize=US*dim[0];
- int y,sizeY=dim[1];
- for (y=0;y<sizeY;y++){
- fseek (ff,offset,SEEK_SET);
- void *p_vol = vol->GetScalarPointer(0,y,i);
- fread( (char*)p_vol , dataSize,1, ff);
- offset=offset+dataSize;
- }
- fclose(ff);
-}
-*/
-// -------------------------------------------------------------------------
-
-/* EED Borrame
-void marGdcmDicom::loadImage(int i)
-{
-
- GDCM_NAME_SPACE::File *gdcmFileTEMP;
- gdcmFileTEMP = _gdcmFileList[i];
-
-
- GDCM_NAME_SPACE::File *gdcmFile = GDCM_NAME_SPACE::File::New();
- gdcmFile->SetLoadMode(GDCM_NAME_SPACE::LD_NOSHADOW);
- gdcmFile->SetFileName( gdcmFileTEMP->GetFileName().c_str() );
- bool ok = gdcmFile->Load();
- long int offset = gdcmFile->GetPixelOffset();
- gdcmFile->Delete();
-
- std::ifstream infile;
- infile.open( gdcmFileTEMP->GetFileName().c_str() , ifstream::in );
- if (infile.is_open()==true){
- vtkImageData *vol = getVolume( )->castVtk();
- void *p_vol = vol->GetScalarPointer(0,0,i);
- int dim[3];
- vol->GetDimensions(dim);
- int dataSize=2*dim[0]*dim[1];
- int US=sizeof(unsigned short);
- char *temp=new char [dataSize];
- infile.seekg( 0 , ios_base::beg );
-// int a=infile.readsome( (char*)p_vol , dataSize );
-// int a=infile.readsome( temp , dataSize );
-
- int length = 0;
- while (infile.good())
- {
- length += infile.readsome (temp,100);
- }
-
- infile.close();
- }
-}
-*/
-// -------------------------------------------------------------------------
-
-
-/* EED Borrame
-
-void marGdcmDicom::loadImage(int i){
- vtkGdcmReader *gdcmReader = NULL;
-
- GDCM_NAME_SPACE::File *gdcmFile;
- gdcmFile = _gdcmFileList[i];
-
-
- gdcmReader = vtkGdcmReader::New();
- const char *fileName = gdcmFile->GetFileName().c_str();
- gdcmReader->SetFileName( fileName );
- gdcmReader->UpdateWholeExtent();
-
- //To simplyfy calculation later I turn Origin to (0, 0, 0)
- //this shouldn't be 'trop grave'
- vtkImageChangeInformation *change = vtkImageChangeInformation::New();
-
- change->SetInput( gdcmReader->GetOutput() );
- change->SetOutputOrigin( 0, 0, 0);
-
- //Our algorithm are made based on unsigned short pixel/voxel:
- //We need to cast our imagedata
- vtkImageCast *cast = vtkImageCast::New();
- cast->SetInput( change->GetOutput() );
- cast->SetOutputScalarTypeToUnsignedShort();
- cast->Update(); //important
-
-
- vtkImageData *imagedata = cast->GetOutput();
- vtkImageData *vol = getVolume( )->castVtk();
-
- void *p_imagedata = imagedata->GetScalarPointer(0,0,0);
- void *p_vol = vol->GetScalarPointer(0,0,i);
- int dim[3];
- imagedata->GetDimensions(dim);
-
- memcpy( p_vol, p_imagedata , sizeof(unsigned short)*dim[0]*dim[1] );
-
- //!\todo thanks
- if(gdcmReader) gdcmReader->Delete();
- cast->Delete();
- change->Delete();
-}
-*/
-// -------------------------------------------------------------------------
-void marGdcmDicom::Cleaning_gdcmFileList(){
- GDCM_NAME_SPACE::File *gdcmFile;
- int i;
- for (i=0; i<_gdcmFileList.size(); i++ ){
- gdcmFile=_gdcmFileList[i];
- gdcmFile->Delete();
- }
- _gdcmFileList.clear();
-}
-
-// -------------------------------------------------------------------------
-void marGdcmDicom::CreateSerieHelper(){ // Virtual
- wxString rootdir;
- rootdir = getParameters( )->getStringParam( marParameters::e_dicom_images_directory );
- GDCM_NAME_SPACE::DicomDirImage *im;
-
-/* EED Borrame
- _serieHelper = new GDCM_NAME_SPACE::SerieHelper();
- int iSlice=0;
- im = _actualSerie->GetFirstImage();
- while ( im ) { // on degouline les Images de cette serie
- iSlice++;
- if ((iSlice>=_iniSlice) && (iSlice<=_endSlice)){
- wxString tmp( rootdir);
- tmp=tmp+"/";
- tmp=tmp+im->GetEntryValue(0x0004, 0x1500).c_str(); // File name
- _serieHelper->AddFileName( tmp.c_str() );
- _actualImage = im;
- }
- im = _actualSerie->GetNextImage();
- }
-
- _serieHelper->OrderGdcmFileList( _serieHelper->GetFirstCoherentFileList() );
-*/
-
-/* EED Borrame
- GDCM_NAME_SPACE::SerieHelper *serieHelper = new GDCM_NAME_SPACE::SerieHelper();
- int iSlice=0;
- im = _actualSerie->GetFirstImage();
- while ( im ) { // on degouline les Images de cette serie
- iSlice++;
- if ((iSlice>=_iniSlice) && (iSlice<=_endSlice)){
- wxString tmp( rootdir);
- tmp=tmp+"/";
- tmp=tmp+im->GetEntryValue(0x0004, 0x1500).c_str(); // File name
- serieHelper->AddFileName( tmp.c_str() );
- _actualImage = im;
- }
- im = _actualSerie->GetNextImage();
- }
-
- GDCM_NAME_SPACE::GdcmFileList* tmpGdcmFileList=serieHelper->GetFirstCoherentFileList();
- serieHelper->OrderGdcmFileList( tmpGdcmFileList );
- for (int i=0; i <tmpGdcmFileList->size() ; i++){
- _gdcmFileList.push_back( (*tmpGdcmFileList)[i] );
- }
-*/
-
-
- Cleaning_gdcmFileList();
-
-/*
- GDCM_NAME_SPACE::File *gdcmFile;
- int iSlice=0;
- im = _actualSerie->GetFirstImage();
- while ( im ) { // on degouline les Images de cette serie
- if ((iSlice>=_iniSlice) && (iSlice<=_endSlice)){
- wxString fileName( rootdir);
- fileName=fileName+"/";
- fileName=fileName+im->GetEntryString(0x0004, 0x1500).c_str(); // File name
-
- if (_gdcmFileList.size()==0){
-//EED Borrame gdcmFile = new GDCM_NAME_SPACE::File(fileName.c_str());
- gdcmFile = GDCM_NAME_SPACE::File::New();
- gdcmFile->SetFileName( fileName.c_str() );
- } else {
- gdcmFile = GDCM_NAME_SPACE::File::New();
-//EED Borrame GDCM_NAME_SPACE::DocEntry *entry = im->GetFirstString();
- GDCM_NAME_SPACE::DocEntry *entry = im->GetFirstEntry();
- while (entry){
-//EED Borrame GDCM_NAME_SPACE::ValEntry *newEntry = new GDCM_NAME_SPACE::ValEntry(entry->GetDictEntry());
- GDCM_NAME_SPACE::DocEntry *newEntry = new GDCM_NAME_SPACE::DocEntry();
-
- newEntry->Copy(entry);
- gdcmFile->AddEntry(newEntry);
- entry = im->GetNextEntry();
- }
- gdcmFile->SetFileName( fileName.c_str() );
- }
- _gdcmFileList.push_back(gdcmFile);
- }
- im = _actualSerie->GetNextImage();
- iSlice++;
- }
-*/
-
- GDCM_NAME_SPACE::File *gdcmFile;
- int iSlice=0;
- im = _actualSerie->GetFirstImage();
- while ( im ) { // on degouline les Images de cette serie
- if ((iSlice>=_iniSlice) && (iSlice<=_endSlice)){
- wxString fileName( rootdir);
- fileName=fileName+_T("/");
- fileName=fileName + wxString(im->GetEntryString(0x0004, 0x1500).c_str(), wxConvUTF8); // File name
-
- gdcmFile = GDCM_NAME_SPACE::File::New();
- gdcmFile->SetFileName( (const char*)(fileName.mb_str()) );
- _gdcmFileList.push_back(gdcmFile);
- }
- im = _actualSerie->GetNextImage();
- iSlice++;
- }
-
-
- GDCM_NAME_SPACE::SerieHelper *serieHelper = GDCM_NAME_SPACE::SerieHelper::New();
- serieHelper->OrderFileList( &_gdcmFileList );
- delete serieHelper;
-
- if (getParameters( )->getInvestSliceOrder()==true){
- GDCM_NAME_SPACE::File *tmpGdcmFile;
- int i,size=_gdcmFileList.size();
- for (i=0, size=_gdcmFileList.size()-1 ; i<=size; i++, size--){
- tmpGdcmFile=_gdcmFileList[i];
- _gdcmFileList[i]=_gdcmFileList[size];
- _gdcmFileList[size]=tmpGdcmFile;
- }
- }
-
- if ( !SerieVerification( &_gdcmFileList ) ){
- wxMessageDialog *msg = new wxMessageDialog(NULL, _T("This series doesn't look like a good series for Maracas.\nDo you want to continue?"), _T("Warning"), wxOK | wxCANCEL );
- msg->ShowModal();
- delete msg;
- }
-
-}
-
-//-------------------------------------------------------------------------
-void marGdcmDicom::loadActualSerie( wxGauge* gauge)
-{
- loadVolume( true , gauge);
-}
-
-// -------------------------------------------------------------------------
-void marGdcmDicom::loadVolume( bool force , wxGauge *gauge)
-{
-
- PrepareLoadVolumeDispers();
- loadImage(0);
-
-/*
- int i;
- int dim[3];
- vtkImageData *vol = getVolume( )->castVtk();
- vol->GetDimensions(dim);
- for (i=0; i<dim[2]; i++){
- loadImage(i);
- }
-*/
-
-/* EED Borrame
- vtkGdcmReader *gdcmReader = NULL;
-
- if( force || !getVolume() ){
- freeVolume( );
- CreateSerieHelper();
- ExtactSpacing();
- ExtactInterceptSlope();
- GDCM_NAME_SPACE::File *gdcmFile;
- GDCM_NAME_SPACE::GdcmFileList *lstGdcmFile = _serieHelper->GetFirstCoherentFileList();
- gdcmReader = vtkGdcmReader::New();
- int i;
- for ( i=0;i<lstGdcmFile->size();i++){
- gdcmFile = (*lstGdcmFile)[i];
- gdcmReader->AddFileName( gdcmFile->GetFileName().c_str() );
- }
- gdcmReader->UpdateWholeExtent();
- gdcmReader->Update();
- } // fi
-
- marProgressObserver *progressEvent = marProgressObserver::New();
- progressEvent->FrameGauge = gauge;
- //gdcmReader->AddObserver( vtkCommand::ProgressEvent, progressEvent);
- progressEvent->Delete();
-
- //To simplyfy calculation later I turn Origin to (0, 0, 0)
- //this shouldn't be 'trop grave'
- vtkImageChangeInformation *change = vtkImageChangeInformation::New();
-
- change->SetInput( gdcmReader->GetOutput() );
- change->SetOutputOrigin( 0, 0, 0);
-
- //Our algorithm are made based on unsigned short pixel/voxel:
- //We need to cast our imagedata
- vtkImageCast *cast = vtkImageCast::New();
- cast->SetInput( change->GetOutput() );
- cast->SetOutputScalarTypeToUnsignedShort();
- cast->Update(); //important
-
- //FIXME: kVolume doesn't need to be -again- matrix rotated (done in vtkGdcmReader)!!
- kVolume *volume = new kVolume( cast->GetOutput() );
- SetVolume(volume);
-
- //!\todo thanks
- if(gdcmReader) gdcmReader->Delete();
- cast->Delete();
- change->Delete();
-*/
-}
-
-// -------------------------------------------------------------------------
-void marGdcmDicom::reset( ){
- freeVolume( );
- Cleaning_gdcmFileList();
- if(_dicomDir) {
- _dicomDir->Delete();
- }
- _dicomDir = NULL;
-}
-
-// -------------------------------------------------------------------------
-wxString marGdcmDicom::GetPatientName(){
- GDCM_NAME_SPACE::File *gdcmFile=_gdcmFileList[0];
- return wxString( wxString(gdcmFile->GetEntryString(0x0010,0x0010).c_str(), wxConvUTF8) ).Trim();//0010 0010 PN PAT Patient Name
-}
-
-// -------------------------------------------------------------------------
-void marGdcmDicom::copyFrom( const marObject& from )
-{ //!\todo TODO
-}
-
-// -------------------------------------------------------------------------
-bool marGdcmDicom::save( std::ofstream& os )
-{
-/* int s = _actualStudy.length( );
-
- os.write( ( const char* )&s, sizeof( int ) );
- os.write( ( char* )_actualStudy.c_str( ), s * sizeof( char ) );
-
- s = _actualSerie.length( );
-
- os.write( ( const char* )&s, sizeof( int ) );
- os.write( ( char* )_actualSerie.c_str( ), s * sizeof( char ) );*/
-
- for(std::vector<SerieInfo>::iterator it1 = m_DicomInfo.begin();
- it1 != m_DicomInfo.end(); it1++ )
- {
- for(std::vector<wxArrayString>::iterator it2 = it1->begin();
- it2 != it1->end(); it2++ )
- {
- for(int i=0; i<it2->GetCount(); i++)
- {
- //wxString temp( it2->Item(i) );
- os << it2->Item(i); //temp;
- }
- }
- }
-
- return( true );
-}
-
-// -------------------------------------------------------------------------
-bool marGdcmDicom::load( std::ifstream& is )
-{
-/* int s;
-
- reset( );
-
- is.read( ( char* )&s, sizeof( int ) );
- _actualStudy.resize( s );
- is.read( ( char* )_actualStudy.c_str( ), s * sizeof( char ) );
- is.read( ( char* )&s, sizeof( int ) );
- _actualSerie.resize( s );
- is.read( ( char* )_actualSerie.c_str( ), s * sizeof( char ) );*/
-
- for(std::vector<SerieInfo>::iterator it1 = m_DicomInfo.begin();
- it1 != m_DicomInfo.end(); it1++ )
- {
- for(std::vector<wxArrayString>::iterator it2 = it1->begin();
- it2 != it1->end(); it2++ )
- {
- for(int i=0; i<it2->GetCount(); i++)
- {
- std::string temp;
- is >> temp ;
- it2->Add( wxString(temp.c_str(), wxConvUTF8) );
- }
- }
- }
-
- return( true );
-}
-
-
-// -------------------------------------------------------------------------
-// -------------------------------------------------------------------------
-// -------------------------------------------------------------------------
-
-marGdcmDicomILPD::marGdcmDicomILPD( marParameters* p )
-: marGdcmDicom(p)
-{
-}
-// -------------------------------------------------------------------------
-void marGdcmDicomILPD::CreateSerieHelper()
-{
- GDCM_NAME_SPACE::File *gdcmFile;
- Cleaning_gdcmFileList();
- int i,max=_lstString.size();
- for (i=0;i<max;i++)
- {
- if (_gdcmFileList.size()==0){
- gdcmFile = GDCM_NAME_SPACE::File::New();
- gdcmFile->SetLoadMode(GDCM_NAME_SPACE::LD_ALL);
- gdcmFile->SetFileName( _lstString[i] -> c_str() );
- /*bool ok = */ gdcmFile->Load();
- } else {
- gdcmFile = GDCM_NAME_SPACE::File::New();
- gdcmFile->SetFileName( _lstString[i] -> c_str() );
- }
- _gdcmFileList.push_back(gdcmFile);
- }
-
-}
-// -------------------------------------------------------------------------
-
-
-
-
-