From: Frederic Cervenansky Date: Mon, 22 Nov 2010 16:44:21 +0000 (+0000) Subject: Convert bbtk from GDCM to GDCM2 (cmakefiles and cxx files). X-Git-Tag: Creatools2-0-3.bbtk0-9-5.17Feb2011~11 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=a26b760bbfe886312cbe54bd83b7211f621edf80;p=bbtk.git Convert bbtk from GDCM to GDCM2 (cmakefiles and cxx files). Correct bug between std and wxvtk packages (wxvtk needs std package). Correct a _CRT_SECURE_NO_DEPRECATE warning --- diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt index c6f9aad..05fa427 100644 --- a/kernel/CMakeLists.txt +++ b/kernel/CMakeLists.txt @@ -30,4 +30,4 @@ ADD_SUBDIRECTORY(install) #----------------------------------------------------------------------------- ADD_SUBDIRECTORY(data) #----------------------------------------------------------------------------- -ADD_SUBDIRECTORY(bin) \ No newline at end of file +ADD_SUBDIRECTORY(bin) diff --git a/kernel/cmake/BBTKConfigurePackage.cmake b/kernel/cmake/BBTKConfigurePackage.cmake index f72ccd4..3199388 100644 --- a/kernel/cmake/BBTKConfigurePackage.cmake +++ b/kernel/cmake/BBTKConfigurePackage.cmake @@ -116,12 +116,19 @@ IF(${BBTK_PACKAGE_NAME}_USE_QT) ENDIF(${BBTK_PACKAGE_NAME}_USE_QT) IF(${BBTK_PACKAGE_NAME}_USE_GDCM) - SET(USE_GDCM ON CACHE BOOL "Use GDCM" FORCE) + SET(USE_GDCM OFF CACHE BOOL "Use GDCM" ) + SET(USE_GDCM2 OFF CACHE BOOL "Use GDCM2" ) SET(USE_GDCM_VTK ON CACHE BOOL "Use GDCM_VTK" FORCE) SET(${BBTK_PACKAGE_NAME}_LIBS ${${BBTK_PACKAGE_NAME}_LIBS} ${GDCM_LIBRARIES} ) + + IF(USE_GDCM) + IF(USE_GDCM2) + message(FATAL_ERROR "we have to choose between DICOM library readers") + ENDIF(USE_GDCM2) + ENDIF(USE_GDCM) ENDIF(${BBTK_PACKAGE_NAME}_USE_GDCM) IF(${BBTK_PACKAGE_NAME}_USE_GDCM2) @@ -171,6 +178,7 @@ IF(${BBTK_PACKAGE_NAME}_USE_WXWIDGETS) ENDIF(${BBTK_PACKAGE_NAME}_USE_WXWIDGETS) + #--------------------------------------------------------------------------- MESSAGE(STATUS "") @@ -181,11 +189,11 @@ MESSAGE(STATUS "=======================================") MESSAGE(STATUS "") #--------------------------------------------------------------------------- -# Recurse into subdirs -SUBDIRS(src) -SUBDIRS(doc) -SUBDIRS(bbs) -SUBDIRS(data) +# Recurse into ADD_SUBDIRECTORY +ADD_SUBDIRECTORY(src) +ADD_SUBDIRECTORY(doc) +ADD_SUBDIRECTORY(bbs) +ADD_SUBDIRECTORY(data) #--------------------------------------------------------------------------- MESSAGE(STATUS "=======================================") diff --git a/kernel/src/bbtkConfigurationFile.h b/kernel/src/bbtkConfigurationFile.h index e6dd488..60f6e31 100644 --- a/kernel/src/bbtkConfigurationFile.h +++ b/kernel/src/bbtkConfigurationFile.h @@ -2,8 +2,8 @@ Program: bbtk Module: $RCSfile: bbtkConfigurationFile.h,v $ Language: C++ - Date: $Date: 2009/01/27 14:22:56 $ - Version: $Revision: 1.11 $ + Date: $Date: 2010/11/22 16:44:27 $ + Version: $Revision: 1.12 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -46,7 +46,9 @@ #ifdef WIN32 -#define _CRT_SECURE_NO_DEPRECATE + #if __VISUALC__ < 1400 + #define _CRT_SECURE_NO_DEPRECATE + #endif #endif #include diff --git a/packages/gdcmvtk/src/bbgdcmvtkGetInfoGdcmReader.cxx b/packages/gdcmvtk/src/bbgdcmvtkGetInfoGdcmReader.cxx index 2e0a07e..2c50c94 100644 --- a/packages/gdcmvtk/src/bbgdcmvtkGetInfoGdcmReader.cxx +++ b/packages/gdcmvtk/src/bbgdcmvtkGetInfoGdcmReader.cxx @@ -1,10 +1,17 @@ #include "bbgdcmvtkGetInfoGdcmReader.h" #include "bbgdcmvtkPackage.h" -#include "gdcmFile.h" -#include "gdcmFileHelper.h" -#include "vtkImageData.h" -#include "vtkGdcmReader.h" +#if defined USE_GDCM + #include "gdcmFile.h" + #include "gdcmFileHelper.h" + #include "vtkImageData.h" + #include "vtkGdcmReader.h" +#endif +#if defined USE_GDCM2 + #include + #include + #include +#endif #include namespace bbgdcmvtk @@ -12,6 +19,8 @@ namespace bbgdcmvtk BBTK_ADD_BLACK_BOX_TO_PACKAGE(gdcmvtk,GetInfoGdcmReader) BBTK_BLACK_BOX_IMPLEMENTATION(GetInfoGdcmReader,bbtk::AtomicBlackBox); + +#if defined USE_GDCM void GetInfoGdcmReader::Process() { // Reset de reader, f @@ -66,11 +75,70 @@ void GetInfoGdcmReader::Process() reader->GetOutput()->PrintSelf(std::cout, indent); bbSetOutputOut( reader->GetOutput() ); } +#endif +#if defined USE_GDCM2 +void GetInfoGdcmReader::Process() +{ + // Reset de reader, f + bbUserFinalizeProcessing(); + gdcm::Reader *read = new gdcm::Reader(); + read->SetFileName( bbGetInputIn().c_str()); + + bool res = read->Read(); + if ( !res ) + { + delete read; + bbSetOutputOut(0); + return; + } + + // Get info from THE image file (only *one* as input) + const gdcm::File &f = read->GetFile(); + + // Image Orientation (Patient) + int i; + std::vector v_iop; + const gdcm::DataElement &deIop = f.GetDataSet().GetDataElement(gdcm::Tag(0x0020, 0x0037)); + std::stringstream ss; + deIop.GetValue().Print(ss); + gdcm::Element iop; + iop.Read( ss ); + for(i=0; i< 6; i++) + v_iop.push_back((float)(iop[i])); + bbSetOutputIOP(v_iop ); + + // Image Position (Patient) + std::vector v_ipp; + const gdcm::DataElement &deIpp = f.GetDataSet().GetDataElement(gdcm::Tag((0x0020,0x0032))); + deIpp.GetValue().Print(ss); + gdcm::Element ipp; + ipp.Read( ss ); + for(i=0; i< 3; i++) + v_ipp.push_back((float)(ipp[i])); + bbSetOutputIPP(v_ipp ); + + std::vector v_pixelspacing = gdcm::ImageHelper::GetSpacingValue(f); + bbSetOutputPixelSpacing(v_pixelspacing); + + //double interslice; ?? ==1 NO? + bbSetOutputInterSlice(v_pixelspacing[2]); + + reader = vtkGDCMImageReader::New(); + reader->SetFileName( bbGetInputIn().c_str() ); + reader->Update(); + reader->GetOutput(); + vtkIndent indent ; + reader->GetOutput()->PrintSelf(std::cout, indent); + bbSetOutputOut( reader->GetOutput() ); +} +#endif void GetInfoGdcmReader::bbUserSetDefaultValues() { reader=NULL; +#if defined USE_GDCM f=NULL; +#endif bbSetInputIn(""); } @@ -79,7 +147,7 @@ void GetInfoGdcmReader::bbUserInitializeProcessing() } - + void GetInfoGdcmReader::bbUserFinalizeProcessing() { if( reader ) @@ -87,14 +155,16 @@ void GetInfoGdcmReader::bbUserFinalizeProcessing() reader->Delete(); reader=NULL; } +#if defined USE_GDCM if(f) { f->Delete(); f=NULL; } +#endif } - } + // EO namespace bbgdcmvtk diff --git a/packages/gdcmvtk/src/bbgdcmvtkGetInfoGdcmReader.h b/packages/gdcmvtk/src/bbgdcmvtkGetInfoGdcmReader.h index 15badeb..9737953 100644 --- a/packages/gdcmvtk/src/bbgdcmvtkGetInfoGdcmReader.h +++ b/packages/gdcmvtk/src/bbgdcmvtkGetInfoGdcmReader.h @@ -7,7 +7,12 @@ #include "bbtkAtomicBlackBox.h" #include "iostream" +#if defined USE_GDCM #include "vtkGdcmReader.h" +#endif +#if defined USE_GDCM2 +#include "vtkGDCMImageReader.h" +#endif namespace bbgdcmvtk { @@ -29,8 +34,15 @@ class bbgdcmvtk_EXPORT GetInfoGdcmReader void Process(); private: +#if defined USE_GDCM GDCM_NAME_SPACE::File *f; - vtkGdcmReader *reader; + vtkGdcmReader *reader; +#endif +#if defined USE_GDCM2 + vtkGDCMImageReader *reader; +#endif + + }; //================================================================= diff --git a/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.cxx b/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.cxx index 092a2a8..eb9a134 100644 --- a/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.cxx +++ b/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.cxx @@ -2,16 +2,25 @@ #include "bbgdcmvtkPackage.h" #include "gdcmFile.h" -#include "gdcmFileHelper.h" #include "vtkImageData.h" -#include "vtkGdcmReader.h" #include +#if defined USE_GDCM +#include "gdcmFileHelper.h" +#endif +#if defined USE_GDCM2 + #include + #include + #include + #include + #include "vtkStringArray.h" +#endif namespace bbgdcmvtk { BBTK_ADD_BLACK_BOX_TO_PACKAGE(gdcmvtk,GetXCoherentInfoGdcmReader) BBTK_BLACK_BOX_IMPLEMENTATION(GetXCoherentInfoGdcmReader,bbtk::AtomicBlackBox); +#if defined USE_GDCM void GetXCoherentInfoGdcmReader::Process() { // Read the *first* image file (a SET of file names is given as input) @@ -86,6 +95,84 @@ void GetXCoherentInfoGdcmReader::Process() bbSetOutputOut( reader->GetOutput() ); } +#endif USE_GDCM + +#if defined USE_GDCM2 +void GetXCoherentInfoGdcmReader::Process() +{ + // Read the *first* image file (a SET of file names is given as input) + gdcm::Reader *read = new gdcm::Reader(); + reader->SetFileName( bbGetInputIn()[0].c_str()); + + bool res = read->Read(); + if ( !res ) + { + delete read; + bbSetOutputOut(0); + return; + } + + // Get info from the first image file + const gdcm::File &f = read->GetFile(); + int i; + std::vector v_iop; + const gdcm::DataElement &deIop = f.GetDataSet().GetDataElement(gdcm::Tag(0x0020, 0x0037)); + std::stringstream ss; + deIop.GetValue().Print(ss); + gdcm::Element iop; + iop.Read( ss ); + for(i=0; i< 6; i++) + v_iop.push_back((float)(iop[i])); + bbSetOutputIOP(v_iop ); + + std::vector v_ipp; + const gdcm::DataElement &deIpp = f.GetDataSet().GetDataElement(gdcm::Tag((0x0020,0x0032))); + deIpp.GetValue().Print(ss); + gdcm::Element ipp; + ipp.Read( ss ); + for(i=0; i< 3; i++) + v_ipp.push_back((float)(ipp[i])); + bbSetOutputIPP(v_ipp ); + +// Add *all the files* to the IPPsorter + gdcm::IPPSorter s; + s.SetComputeZSpacing( true ); + s.SetZSpacingTolerance( 1e-3 ); + std::vector gii = bbGetInputIn(); + s.Sort(gii); + + //l = sh->GetFirstSingleSerieUIDFileSet(); + // no Test if we have multiple series + //s.GetFilenames(); + //int nbFiles; + + double zspacing = 0.; + zspacing = s.GetZSpacing(); + std::vector v_pixelspacing = gdcm::ImageHelper::GetSpacingValue(f); + v_pixelspacing.push_back( v_pixelspacing[0] ); + v_pixelspacing.push_back( v_pixelspacing[1] ); + v_pixelspacing.push_back( zspacing ); + bbSetOutputPixelSpacing(v_pixelspacing); + + if (reader!=NULL) + { + reader->Delete(); + reader=NULL; + } + reader = vtkGDCMImageReader::New(); + vtkStringArray *files = vtkStringArray::New(); + std::vector< std::string >::const_iterator it = s.GetFilenames().begin(); + for( ; it != s.GetFilenames().end(); ++it) + { + const std::string &f = *it; + files->InsertNextValue( f.c_str() ); + } + reader->SetFileNames(files); + reader->Update(); + reader->GetOutput(); + bbSetOutputOut( reader->GetOutput() ); +} +#endif USE_GDCM2 void GetXCoherentInfoGdcmReader::bbUserSetDefaultValues() { @@ -100,6 +187,7 @@ void GetXCoherentInfoGdcmReader::bbUserInitializeProcessing() } +#if defined USE_GDCM void GetXCoherentInfoGdcmReader::bbUserFinalizeProcessing() { if(reader) @@ -109,6 +197,15 @@ void GetXCoherentInfoGdcmReader::bbUserFinalizeProcessing() if(sh) sh->Delete(); } +#endif + +#if defined USE_GDCM2 +void GetXCoherentInfoGdcmReader::bbUserFinalizeProcessing() +{ + if(reader) + reader->Delete(); +} +#endif } // EO namespace bbgdcmvtk diff --git a/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.h b/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.h index e1697e4..e509431 100644 --- a/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.h +++ b/packages/gdcmvtk/src/bbgdcmvtkGetXCoherentInfoGdcmReader.h @@ -6,8 +6,14 @@ #include "bbgdcmvtk_EXPORT.h" #include "bbtkAtomicBlackBox.h" #include "iostream" - +#if defined(USE_GDCM) #include "vtkGdcmReader.h" +#endif + +#if defined(USE_GDCM2) +#include "vtkGDCMImageReader.h" +#endif + #include "gdcmFile.h" #include "gdcmSerieHelper.h" @@ -32,9 +38,15 @@ class bbgdcmvtk_EXPORT GetXCoherentInfoGdcmReader void Process(); private: - GDCM_NAME_SPACE::File *f; - GDCM_NAME_SPACE::SerieHelper *sh; - vtkGdcmReader *reader; + +#if defined USE_GDCM + GDCM_NAME_SPACE::File *f; + GDCM_NAME_SPACE::SerieHelper *sh; + vtkGdcmReader *reader; +#endif +#if defined USE_GDCM2 + vtkGDCMImageReader *reader; +#endif }; //================================================================= diff --git a/packages/std/CMakeLists.txt b/packages/std/CMakeLists.txt index 6e16f81..042d811 100644 --- a/packages/std/CMakeLists.txt +++ b/packages/std/CMakeLists.txt @@ -116,7 +116,11 @@ SET(${BBTK_PACKAGE_NAME}_LIBS # EXCEPT : the same libs than for INCLUDE_DIRS ) #=========================================================================== - +#=========================================================================== +# To compile with VS under x64, /bigobj flag is needed +IF(MSVC AND CMAKE_SIZEOF_VOID_P MATCHES 8) + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /bigobj") +ENDIF() #=========================================================================== diff --git a/packages/wxvtk/CMakeLists.txt b/packages/wxvtk/CMakeLists.txt index 2f7e2bd..394213c 100644 --- a/packages/wxvtk/CMakeLists.txt +++ b/packages/wxvtk/CMakeLists.txt @@ -53,6 +53,7 @@ SET(${BBTK_PACKAGE_NAME}_USE_PACKAGES # vtk # ... ) + #=========================================================================== #=========================================================================== diff --git a/packages/wxvtk/Configure.cmake b/packages/wxvtk/Configure.cmake index dc44b3b..32fc2f0 100644 --- a/packages/wxvtk/Configure.cmake +++ b/packages/wxvtk/Configure.cmake @@ -5,6 +5,12 @@ OPTION(BUILD_BBTK_PACKAGE_${BBTK_PACKAGE_NAME} #=========================================================================== IF(BUILD_BBTK_PACKAGE_${BBTK_PACKAGE_NAME}) + IF(NOT BUILD_BBTK_PACKAGE_std) + # FORCE the std package to avoid compilation errors + SET(BUILD_BBTK_PACKAGE_std ON CACHE BOOL "Build the bbtk package ${BBTK_PACKAGE_NAME} ?" FORCE) + message(FATAL_ERROR "You need the std package") + ENDIF(NOT BUILD_BBTK_PACKAGE_std) + #=========================================================================== # THE USER HAS CHOSEN TO BUILD THE PACKAGE #===========================================================================