From 78bef0c5fcf50c4d4ba779abf2ba88e6a80851b3 Mon Sep 17 00:00:00 2001 From: jean-pierre roux Date: Wed, 24 Jun 2009 08:08:57 +0000 Subject: [PATCH] (try to) fix trouble when file name contains space(s) --- packages/itk/src/bbitkImage.h | 128 +++++++++---------- packages/itk/src/bbitkImageReader.cxx | 6 +- packages/itk/src/bbitkImageSeriesReader.cxx | 25 +++- packages/std/src/bbstdFilesFromDirectory.cxx | 59 ++++++--- 4 files changed, 126 insertions(+), 92 deletions(-) diff --git a/packages/itk/src/bbitkImage.h b/packages/itk/src/bbitkImage.h index 000c95b..9745827 100644 --- a/packages/itk/src/bbitkImage.h +++ b/packages/itk/src/bbitkImage.h @@ -2,8 +2,8 @@ Program: bbtk Module: $RCSfile: bbitkImage.h,v $ Language: C++ - Date: $Date: 2009/05/18 10:45:43 $ - Version: $Revision: 1.6 $ + Date: $Date: 2009/06/24 08:08:57 $ + Version: $Revision: 1.7 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -40,13 +40,13 @@ namespace bbitk { - + // bbtk typedefs for itk images #define BBTK_TYPEDEF_ITK_IMAGE(TYPE,DIM) \ typedef itk::Image Image_##TYPE##_##DIM; \ typedef const Image_##TYPE##_##DIM Image_##TYPE##_##DIM##_c; \ typedef Image_##TYPE##_##DIM * Image_##TYPE##_##DIM##_ptr; \ - typedef Image_##TYPE##_##DIM##_c * Image_##TYPE##_##DIM##_cptr; + typedef Image_##TYPE##_##DIM##_c * Image_##TYPE##_##DIM##_cptr; #define BBTK_TYPEDEF_ITK_IMAGES_DIM(DIM) \ @@ -63,33 +63,33 @@ namespace bbitk BBTK_TYPEDEF_ITK_IMAGES_DIM(3); BBTK_TYPEDEF_ITK_IMAGES_DIM(4); //BBTK_TYPEDEF_ITK_IMAGES_DIM(5) - - - + + + #define BBTK_BEGIN_TEMPLATE_SWITCH(TYPE_INFO) if (false) {} - + #define BBTK_END_TEMPLATE_SWITCH(TYPE_INFO) else { bbtkError("bbtk was not built for itk images of type <"<< bbtk::demangle_type_name(TYPE_INFO.name())<<">"); } #define BBTK_END_TEMPLATE_SWITCH_MESSAGE(TYPE_INFO,MESSAGE) else { bbtkError(MESSAGE); } - + /// Generic macro which calls a TEMPLATE_FUNCTION instanciated /// on TEMPLATE_TYPE iff TYPE_INFO == typeid(TEST_TYPE). /// This macro must be used (maybe several times) between a pair of BEGIN_TEMPLATE_SWITCH and END_TEMPLATE_SWITCH macros -#define TEMPLATE_SWITCH(TYPE_INFO,TEST_TYPE,TEMPLATE_FUNCTION,TEMPLATE_TYPE) \ - else if (TYPE_INFO == typeid(bbitk::TEST_TYPE)) \ +#define TEMPLATE_SWITCH(TYPE_INFO,TEST_TYPE,TEMPLATE_FUNCTION,TEMPLATE_TYPE) \ + else if (TYPE_INFO == typeid(bbitk::TEST_TYPE)) \ { TEMPLATE_FUNCTION(); } - - + + // DIMENSION 2 #ifdef BBTK_ITK_IMAGE_DIM_2 # ifdef BBTK_ITK_IMAGE_TYPE_int8_t -# define BBTK_SWITCH_ITK_IMAGE_int8_t_2(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_int8_t_2(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_int8_t_2_##CONST##ptr,FUN,Image_int8_t_2) # else # define BBTK_SWITCH_ITK_IMAGE_int8_t_2(TYPE_INFO,FUN,CONST) # endif # ifdef BBTK_ITK_IMAGE_TYPE_int16_t -# define BBTK_SWITCH_ITK_IMAGE_int16_t_2(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_int16_t_2(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_int16_t_2_##CONST##ptr,FUN,Image_int16_t_2) # else # define BBTK_SWITCH_ITK_IMAGE_int16_t_2(TYPE_INFO,FUN,CONST) @@ -107,7 +107,7 @@ namespace bbitk # define BBTK_SWITCH_ITK_IMAGE_uint8_t_2(TYPE_INFO,FUN,CONST) # endif # ifdef BBTK_ITK_IMAGE_TYPE_int16_t -# define BBTK_SWITCH_ITK_IMAGE_uint16_t_2(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_uint16_t_2(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_uint16_t_2_##CONST##ptr,FUN,Image_uint16_t_2) # else # define BBTK_SWITCH_ITK_IMAGE_uint16_t_2(TYPE_INFO,FUN,CONST) @@ -119,13 +119,13 @@ namespace bbitk # define BBTK_SWITCH_ITK_IMAGE_uint32_t_2(TYPE_INFO,FUN,CONST) # endif # ifdef BBTK_ITK_IMAGE_TYPE_float -# define BBTK_SWITCH_ITK_IMAGE_float_2(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_float_2(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_float_2_##CONST##ptr,FUN,Image_float_2) # else # define BBTK_SWITCH_ITK_IMAGE_float_2(TYPE_INFO,FUN,CONST) # endif # ifdef BBTK_ITK_IMAGE_TYPE_double -# define BBTK_SWITCH_ITK_IMAGE_double_2(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_double_2(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_double_2_##CONST##ptr,FUN,Image_double_2) # else # define BBTK_SWITCH_ITK_IMAGE_double_2(TYPE_INFO,FUN,CONST) @@ -145,7 +145,7 @@ namespace bbitk // DIMENSION 3 #ifdef BBTK_ITK_IMAGE_DIM_3 # ifdef BBTK_ITK_IMAGE_TYPE_int8_t -# define BBTK_SWITCH_ITK_IMAGE_int8_t_3(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_int8_t_3(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_int8_t_3_##CONST##ptr,FUN,Image_int8_t_3) # else # define BBTK_SWITCH_ITK_IMAGE_int8_t_3(TYPE_INFO,FUN,CONST) @@ -181,13 +181,13 @@ namespace bbitk # define BBTK_SWITCH_ITK_IMAGE_uint32_t_3(TYPE_INFO,FUN,CONST) # endif # ifdef BBTK_ITK_IMAGE_TYPE_float -# define BBTK_SWITCH_ITK_IMAGE_float_3(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_float_3(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_float_3_##CONST##ptr,FUN,Image_float_3) # else # define BBTK_SWITCH_ITK_IMAGE_float_3(TYPE_INFO,FUN,CONST) # endif # ifdef BBTK_ITK_IMAGE_TYPE_double -# define BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_double_3_##CONST##ptr,FUN,Image_double_3) # else # define BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,CONST) @@ -202,12 +202,12 @@ namespace bbitk # define BBTK_SWITCH_ITK_IMAGE_float_3(TYPE_INFO,FUN,CONST) # define BBTK_SWITCH_ITK_IMAGE_double_3(TYPE_INFO,FUN,CONST) #endif - - + + // DIMENSION 4 #ifdef BBTK_ITK_IMAGE_DIM_4 # ifdef BBTK_ITK_IMAGE_TYPE_int8_t -# define BBTK_SWITCH_ITK_IMAGE_int8_t_4(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_int8_t_4(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_int8_t_4_##CONST##ptr,FUN,Image_int8_t_4) # else # define BBTK_SWITCH_ITK_IMAGE_int8_t_4(TYPE_INFO,FUN,CONST) @@ -237,19 +237,19 @@ namespace bbitk # define BBTK_SWITCH_ITK_IMAGE_uint16_t_4(TYPE_INFO,FUN,CONST) # endif # ifdef BBTK_ITK_IMAGE_TYPE_uint32_t -# define BBTK_SWITCH_ITK_IMAGE_uint32_t_4(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_uint32_t_4(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_uint32_t_4_##CONST##ptr,FUN,Image_uint32_t_4) # else # define BBTK_SWITCH_ITK_IMAGE_uint32_t_4(TYPE_INFO,FUN,CONST) # endif # ifdef BBTK_ITK_IMAGE_TYPE_float -# define BBTK_SWITCH_ITK_IMAGE_float_4(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_float_4(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_float_4_##CONST##ptr,FUN,Image_float_4) # else # define BBTK_SWITCH_ITK_IMAGE_float_4(TYPE_INFO,FUN,CONST) # endif # ifdef BBTK_ITK_IMAGE_TYPE_double -# define BBTK_SWITCH_ITK_IMAGE_double_4(TYPE_INFO,FUN,CONST) \ +# define BBTK_SWITCH_ITK_IMAGE_double_4(TYPE_INFO,FUN,CONST) \ TEMPLATE_SWITCH(TYPE_INFO,Image_double_4_##CONST##ptr,FUN,Image_double_4) # else # define BBTK_SWITCH_ITK_IMAGE_double_4(TYPE_INFO,FUN,CONST) @@ -265,7 +265,7 @@ namespace bbitk # define BBTK_SWITCH_ITK_IMAGE_double_4(TYPE_INFO,FUN,CONST) #endif - + /// General macro which calls the template function FUN instanciated /// on the right type of itk image depending on the value of TYPE_INFO (which must be of type type_info). #define BBTK_TEMPLATE_ITK_IMAGE_SWITCH(TYPE_INFO,FUN) \ @@ -298,7 +298,7 @@ namespace bbitk /// General macro which calls the template function FUN instanciated /// on the right type of itk image depending on the value of TYPE_INFO (which must be of type type_info). -#define BBTK_TEMPLATE_ITK_IMAGE_DIM_3_SWITCH(TYPE_INFO,FUN,ERROR_MESSAGE) \ +#define BBTK_TEMPLATE_ITK_IMAGE_DIM_3_SWITCH(TYPE_INFO,FUN,ERROR_MESSAGE) \ BBTK_BEGIN_TEMPLATE_SWITCH(TYPE_INFO) \ BBTK_SWITCH_ITK_IMAGE_int8_t_3(TYPE_INFO,FUN,) \ BBTK_SWITCH_ITK_IMAGE_int16_t_3(TYPE_INFO,FUN,) \ @@ -313,8 +313,8 @@ namespace bbitk /// General macro which calls the template function FUN instanciated /// on the right type of itk image depending on the value of TYPE_INFO (which must be of type type_info). - -#define BBTK_TEMPLATE_CONST_ITK_IMAGE_SWITCH(TYPE_INFO,FUN) \ + +#define BBTK_TEMPLATE_CONST_ITK_IMAGE_SWITCH(TYPE_INFO,FUN) \ BBTK_BEGIN_TEMPLATE_SWITCH(TYPE_INFO) \ BBTK_SWITCH_ITK_IMAGE_int8_t_2(TYPE_INFO,FUN,c) \ BBTK_SWITCH_ITK_IMAGE_int16_t_2(TYPE_INFO,FUN,c) \ @@ -340,8 +340,8 @@ namespace bbitk BBTK_SWITCH_ITK_IMAGE_uint32_t_4(TYPE_INFO,FUN,c) \ BBTK_SWITCH_ITK_IMAGE_float_4(TYPE_INFO,FUN,c) \ BBTK_SWITCH_ITK_IMAGE_double_4(TYPE_INFO,FUN,c) \ - BBTK_END_TEMPLATE_SWITCH(TYPE_INFO) - + BBTK_END_TEMPLATE_SWITCH(TYPE_INFO) + #define BBTK_GITIFPTI_DIM(DIM) \ if (pti == typeid(unsigned char)) \ return typeid(itk::Image*); \ @@ -362,8 +362,8 @@ namespace bbitk if (pti == typeid(float)) \ return typeid(itk::Image*); \ if (pti == typeid(double)) \ - return typeid(itk::Image*); - + return typeid(itk::Image*); + inline bbtk::TypeInfo GetITKImagePtrTypeInfoFromPixelTypeInfoAndDimension( bbtk::TypeInfo pti, @@ -374,8 +374,8 @@ namespace bbitk else if (dim==4) { BBTK_GITIFPTI_DIM(4); } else { - //bbtkGlobalError("GetImageTypeInfoFromPixelTypeInfo : itk::Images not compiled for dim "< m_map; }; - -#define BBTK_BUILD_ITK_IMAGE_FUNCTION_MAPPING(MAP,FUN) \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ + +#define BBTK_BUILD_ITK_IMAGE_FUNCTION_MAPPING(MAP,FUN) \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ MAP.value() = FUN; \ MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ MAP.value() = FUN; \ MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ - MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ + MAP.value() = FUN; \ MAP.value() = FUN; \ MAP.value() = FUN; \ - MAP.value() = FUN; \ + MAP.value() = FUN; \ MAP.value() = FUN; - + //======================================================================= @@ -553,13 +553,13 @@ namespace bbtk // Human readable names for itk images // #define BBTK_HUMAN_READABLE_ITK_IMAGE_NAME(TYPE,DIM) std::string("itkImage")+HumanTypeName()+std::string(#DIM)+std::string("ptr") -#define BBTK_HUMAN_READABLE_ITK_IMAGE(TYPE,DIM) \ -template <> inline std::string HumanTypeName< bbitk::Image_##TYPE##_##DIM##_ptr >() \ - { std::string n("itkImage"); \ - n+= HumanTypeName();\ - n += std::string(#DIM);\ -n += std::string("ptr"); \ - return n; } \ +#define BBTK_HUMAN_READABLE_ITK_IMAGE(TYPE,DIM) \ +template <> inline std::string HumanTypeName< bbitk::Image_##TYPE##_##DIM##_ptr >() \ + { std::string n("itkImage"); \ + n+= HumanTypeName(); \ + n += std::string(#DIM); \ +n += std::string("ptr"); \ + return n; } \ template <> inline std::string HumanTypeName< bbitk::Image_##TYPE##_##DIM##_ptr >(const bbitk::Image_##TYPE##_##DIM##_ptr &) \ { std::string n("itkImage");\ n+= HumanTypeName(); \ diff --git a/packages/itk/src/bbitkImageReader.cxx b/packages/itk/src/bbitkImageReader.cxx index 58fd442..ecb8a8c 100644 --- a/packages/itk/src/bbitkImageReader.cxx +++ b/packages/itk/src/bbitkImageReader.cxx @@ -2,8 +2,8 @@ Program: bbtk Module: $RCSfile: bbitkImageReader.cxx,v $ Language: C++ - Date: $Date: 2009/05/15 14:57:58 $ - Version: $Revision: 1.6 $ + Date: $Date: 2009/06/24 08:08:57 $ + Version: $Revision: 1.7 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -68,7 +68,7 @@ namespace bbitk itk::ImageIOFactory::ReadMode); if (!genericReader) { - bbtkError("File format unknown (while reading \"" << filename << "\")"); + bbtkError("File format unknown (while reading [" << filename << "])"); } genericReader->SetFileName(filename.c_str()); genericReader->ReadImageInformation(); diff --git a/packages/itk/src/bbitkImageSeriesReader.cxx b/packages/itk/src/bbitkImageSeriesReader.cxx index d182265..0d6b35e 100644 --- a/packages/itk/src/bbitkImageSeriesReader.cxx +++ b/packages/itk/src/bbitkImageSeriesReader.cxx @@ -2,8 +2,8 @@ Program: bbtk Module: $RCSfile: bbitkImageSeriesReader.cxx,v $ Language: C++ - Date: $Date: 2009/05/15 14:57:58 $ - Version: $Revision: 1.9 $ + Date: $Date: 2009/06/24 08:08:57 $ + Version: $Revision: 1.10 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -67,6 +67,7 @@ namespace bbitk void ImageSeriesReader::Read() { +std::cout << "--------------------------------------------------- ImageSeriesReader::Read( NO template)" << std::endl; const std::vector& filenames = bbGetInputFileNames(); if (!filenames.size()) { @@ -81,12 +82,16 @@ namespace bbitk p->Allocate(); p->Register(); bbSetOutputOut(p.GetPointer()); +std::cout << "--------------------------------------------------- ImageSeriesReader::Read( NO image found)" << std::endl; return; //bbtkError("Void vector passed to "<GetComponentTypeInfo(), genericReader->GetNumberOfDimensions() + plusUn); - BBTK_TEMPLATE_ITK_IMAGE_SWITCH(typ,Read); @@ -118,6 +122,7 @@ namespace bbitk template void ImageSeriesReader::Read() { +std::cout << "--------------------------------------------------- ImageSeriesReader::Read()" << std::endl; bbtkDebugMessageInc("Core",9,"bbitk::ImageSeriesReader<" <() <<">::Read()"<& filenames = bbGetInputFileNames(); - reader->SetFileNames(filenames); + +std::cout << "--------------------------------------------------- size " << filenames.size() << std::endl; + for (int i = 0; i< filenames.size(); i++) + std::cout << "-- [" <SetFileNames(filenames); + try { reader->Update(); } catch( std::exception& e ) { @@ -143,16 +154,19 @@ namespace bbitk spacingToBeSet = true; spacingJPRx[0]= bbGetInputXSpacing(); } + if (bbGetInputYSpacing() > 0.) { spacingToBeSet = true; spacingJPRx[1]= bbGetInputYSpacing(); } + if (bbGetInputZSpacing() > 0.) { spacingToBeSet = true; spacingJPRx[2]= bbGetInputZSpacing(); } + if (spacingToBeSet) reader->GetOutput()->SetSpacing(spacingJPRx); // JPRx @@ -164,7 +178,6 @@ namespace bbitk bbtkDebugDecTab("Core",9); } - } // eo namespace bbtk diff --git a/packages/std/src/bbstdFilesFromDirectory.cxx b/packages/std/src/bbstdFilesFromDirectory.cxx index 698cca5..cf4030e 100644 --- a/packages/std/src/bbstdFilesFromDirectory.cxx +++ b/packages/std/src/bbstdFilesFromDirectory.cxx @@ -1,5 +1,6 @@ #include "bbstdFilesFromDirectory.h" #include "bbstdPackage.h" +#include #ifdef _MSC_VER #include @@ -19,27 +20,28 @@ BBTK_BLACK_BOX_IMPLEMENTATION(FilesFromDirectory,bbtk::AtomicBlackBox); void FilesFromDirectory::Process() { - DirName = bbGetInputIn(); bool rec = bbGetInputRecursive(); /*int nbFiles = */ Explore(DirName, rec); - bbSetOutputOut(Filenames); + bbSetOutputOut(Filenames); - +// for (int i=0; id_name; + std::string temp = fileName; if( stat(fileName.c_str(), &buf) != 0 ) { //gdcmErrorMacro( strerror(errno) ); } if ( S_ISREG(buf.st_mode) ) //is it a regular file? { - if ( d->d_name[0]!='.') - { - Filenames.push_back( fileName ); - numberOfFiles++; - } + if ( d->d_name[0]!='.') + { + + std::string::size_type /* long int */ spacePosition = temp.find_first_of(' '); + if (spacePosition != std::string::npos) + { + std::cout << "=========================================== File name : [" <