FIND_PROGRAM(GENGETOPT gengetopt)
IF (GENGETOPT STREQUAL "GENGETOPT-NOTFOUND")
GET_FILENAME_COMPONENT(CLITK_CMAKE_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
- ADD_SUBDIRECTORY(${CLITK_CMAKE_DIR}/gengetopt ${CMAKE_CURRENT_BINARY_DIR}/gengetopt)
+ ADD_SUBDIRECTORY(${CLITK_CMAKE_DIR}/../utilities/gengetopt ${CMAKE_CURRENT_BINARY_DIR}/gengetopt)
ELSE(GENGETOPT STREQUAL "GENGETOPT-NOTFOUND")
ADD_EXECUTABLE(gengetopt IMPORTED)
SET_PROPERTY(TARGET gengetopt PROPERTY IMPORTED_LOCATION ${GENGETOPT})
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
ENDFOREACH(GGO_FILE)
SET_SOURCE_FILES_PROPERTIES(${${GGO_SRCS}} PROPERTIES GENERATED TRUE)
+ IF(CMAKE_COMPILER_IS_GNUCXX)
+ FIND_PROGRAM(DEFAULT_GCC gcc)
+ EXEC_PROGRAM(${DEFAULT_GCC} ARGS "-dumpversion" OUTPUT_VARIABLE GCCVER)
+ IF("${GCCVER}" VERSION_GREATER "4.5.2")
+ SET_SOURCE_FILES_PROPERTIES(${${GGO_SRCS}} PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")
+ ENDIF("${GCCVER}" VERSION_GREATER "4.5.2")
+ ENDIF(CMAKE_COMPILER_IS_GNUCXX)
ENDMACRO (WRAP_GGO)
f->SetUpper(GetUpperThresholdForTrachea());
f->SetMinimumLowerThreshold(-2000);
// f->SetMaximumUpperThreshold(0); // MAYBE TO CHANGE ???
- f->SetMaximumUpperThreshold(-700); // MAYBE TO CHANGE ???
+ f->SetMaximumUpperThreshold(-300); // MAYBE TO CHANGE ???
f->SetAdaptLowerBorder(false);
f->SetAdaptUpperBorder(true);
f->SetMinimumSize(5000);
--- /dev/null
+cmake_minimum_required(VERSION 2.8)
+cmake_policy(VERSION 2.8)
+
+# set a default build type if it is undefined, then make sure it goes in the cache
+if(NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE Release)
+endif()
+set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "Build configuration type" FORCE)
+set(build_type ${CMAKE_BUILD_TYPE})
+
+#=========================================================
+MACRO (DD in)
+ MESSAGE(${in}=${${in}})
+ENDMACRO(DD)
+#=========================================================
+
+project(SuperBuild_VV)
+
+if(MSVC)
+ set(CMAKE_C_FLAGS_DEBUG "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1" CACHE STRING "" FORCE)
+ set(CMAKE_C_FLAGS_MINSIZEREL "/MT /O1 /Ob1 /D NDEBUG" CACHE STRING "" FORCE)
+ set(CMAKE_C_FLAGS_RELEASE "/MT /O2 /Ob2 /D NDEBUG" CACHE STRING "" FORCE)
+ set(CMAKE_C_FLAGS_RELWITHDEBINFO "/MT /Zi /O2 /Ob1 /D NDEBUG" CACHE STRING "" FORCE)
+
+ set(CMAKE_CXX_FLAGS_DEBUG "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1" CACHE STRING "" FORCE)
+ set(CMAKE_CXX_FLAGS_MINSIZEREL "/MT /O1 /Ob1 /D NDEBUG" CACHE STRING "" FORCE)
+ set(CMAKE_CXX_FLAGS_RELEASE "/MT /O2 /Ob2 /D NDEBUG" CACHE STRING "" FORCE)
+ set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MT /Zi /O2 /Ob1 /D NDEBUG" CACHE STRING "" FORCE)
+endif(MSVC)
+
+include(ExternalProject)
+
+set(base "${CMAKE_BINARY_DIR}")
+set_property(DIRECTORY PROPERTY EP_BASE ${base})
+set(source_prefix ${base}/Source)
+set(build_prefix ${base}/Build)
+set(install_prefix ${base}/Install)
+
+find_package(Git REQUIRED)
+
+#=========================================================
+# QT
+SET(QtWinSpecFiles "${source_prefix}/qt/mkspecs/win32-msvc2003/qmake.conf";
+ "${source_prefix}/qt/mkspecs/win32-msvc2005/qmake.conf";
+ "${source_prefix}/qt/mkspecs/win32-msvc2008/qmake.conf";
+ "${source_prefix}/qt/mkspecs/win32-msvc2010/qmake.conf")
+ExternalProject_Add(
+ QT
+ SOURCE_DIR ${source_prefix}/qt
+ GIT_REPOSITORY git://gitorious.org/qt/qt.git
+ GIT_TAG v4.8.3
+ PATCH_COMMAND sed -i "s/\\-MD/-MT/g" ${QtWinSpecFiles}
+ CONFIGURE_COMMAND ${source_prefix}/qt/configure -confirm-license
+ -static
+ -fast
+ -opensource
+ -release
+ -prefix ${build_prefix}/QT
+ -nomake examples
+ -nomake demos
+ -qt-libpng
+ -no-libtiff
+ -no-libjpeg
+ -no-libmng
+ INSTALL_COMMAND ""
+)
+SET(qmake_executable "${build_prefix}/QT/bin/qmake")
+#=========================================================
+
+#=========================================================
+# VTK
+SET(VTK_CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES}")
+IF(MSVC)
+ SET(VTK_CMAKE_CXX_STANDARD_LIBRARIES "${VTK_CMAKE_CXX_STANDARD_LIBRARIES} Imm32.lib Winmm.lib Ws2_32.lib")
+ENDIF(MSVC)
+ExternalProject_Add(
+ VTK
+ DEPENDS QT
+ SOURCE_DIR ${source_prefix}/vtk
+ GIT_REPOSITORY git://vtk.org/VTK.git
+ GIT_TAG v5.10.0
+ INSTALL_COMMAND ""
+ CMAKE_ARGS
+ -DQT_QMAKE_EXECUTABLE:FILEPATH=${qmake_executable}
+ -DCMAKE_C_FLAGS_DEBUG:STRING=${CMAKE_C_FLAGS_DEBUG}
+ -DCMAKE_C_FLAGS_MINSIZEREL:STRING=${CMAKE_C_FLAGS_MINSIZEREL}
+ -DCMAKE_C_FLAGS_RELEASE:STRING=${CMAKE_C_FLAGS_RELEASE}
+ -DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING=${CMAKE_C_FLAGS_RELWITHDEBINFO}
+ -DCMAKE_CXX_FLAGS_DEBUG:STRING=${CMAKE_CXX_FLAGS_DEBUG}
+ -DCMAKE_CXX_FLAGS_MINSIZEREL:STRING=${CMAKE_CXX_FLAGS_MINSIZEREL}
+ -DCMAKE_CXX_FLAGS_RELEASE:STRING=${CMAKE_CXX_FLAGS_RELEASE}
+ -DCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=${CMAKE_CXX_FLAGS_RELWITHDEBINFO}
+ -DCMAKE_INSTALL_PREFIX:PATH=${install_prefix}/${proj}
+ -DCMAKE_BUILD_TYPE:STRING=${build_type}
+ -DBUILD_SHARED_LIBS:BOOL=OFF
+ -DBUILD_EXAMPLES:BOOL=OFF
+ -DBUILD_TESTING:BOOL=OFF
+ -DVTK_USE_QT:BOOL=ON
+ -DVTK_USE_QVTK_QTOPENGL:BOOL=ON
+ -DCMAKE_CXX_STANDARD_LIBRARIES:STRING=${VTK_CMAKE_CXX_STANDARD_LIBRARIES}
+)
+SET(VTK_DIR ${build_prefix}/VTK)
+#=========================================================
+
+#=========================================================
+# ITK
+ExternalProject_Add(
+ ITK
+ SOURCE_DIR ${source_prefix}/itk
+ GIT_REPOSITORY git://itk.org/ITK.git
+ GIT_TAG v4.2.0
+ INSTALL_COMMAND ""
+ CMAKE_ARGS
+ -DCMAKE_C_FLAGS_DEBUG:STRING=${CMAKE_C_FLAGS_DEBUG}
+ -DCMAKE_C_FLAGS_MINSIZEREL:STRING=${CMAKE_C_FLAGS_MINSIZEREL}
+ -DCMAKE_C_FLAGS_RELEASE:STRING=${CMAKE_C_FLAGS_RELEASE}
+ -DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING=${CMAKE_C_FLAGS_RELWITHDEBINFO}
+ -DCMAKE_CXX_FLAGS_DEBUG:STRING=${CMAKE_CXX_FLAGS_DEBUG}
+ -DCMAKE_CXX_FLAGS_MINSIZEREL:STRING=${CMAKE_CXX_FLAGS_MINSIZEREL}
+ -DCMAKE_CXX_FLAGS_RELEASE:STRING=${CMAKE_CXX_FLAGS_RELEASE}
+ -DCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=${CMAKE_CXX_FLAGS_RELWITHDEBINFO}
+ -DCMAKE_INSTALL_PREFIX:PATH=${install_prefix}/${proj}
+ -DCMAKE_BUILD_TYPE:STRING=${build_type}
+ -DBUILD_SHARED_LIBS:BOOL=OFF
+ -DBUILD_EXAMPLES:BOOL=OFF
+ -DBUILD_TESTING:BOOL=OFF
+)
+SET(ITK_DIR ${build_prefix}/ITK)
+#=========================================================
+
+#=========================================================
+# VV
+SET(VV_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
+if(MSVC)
+ SET(VV_CMAKE_CXX_FLAGS "${VV_CMAKE_CXX_FLAGS} /bigobj")
+endif(MSVC)
+
+SET(VV_CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS})
+if(CMAKE_COMPILER_IS_GNUCXX)
+ SET(VV_CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++")
+endif(CMAKE_COMPILER_IS_GNUCXX)
+
+SET(MAKE_COMMAND "make")
+if(MSVC)
+ SET(MAKE_COMMAND "nmake")
+endif(MSVC)
+
+ExternalProject_Add(
+ VV
+ DEPENDS QT VTK ITK
+ SOURCE_DIR ${source_prefix}/vv
+ GIT_REPOSITORY git://git.creatis.insa-lyon.fr/clitk
+ GIT_TAG v1.3.0
+ INSTALL_COMMAND ${MAKE_COMMAND} package
+ CMAKE_ARGS
+ -DQT_QMAKE_EXECUTABLE:FILEPATH=${qmake_executable}
+ -DITK_DIR:PATH=${ITK_DIR}
+ -DVTK_DIR:PATH=${VTK_DIR}
+ -DCMAKE_C_FLAGS_DEBUG:STRING=${CMAKE_C_FLAGS_DEBUG}
+ -DCMAKE_C_FLAGS_MINSIZEREL:STRING=${CMAKE_C_FLAGS_MINSIZEREL}
+ -DCMAKE_C_FLAGS_RELEASE:STRING=${CMAKE_C_FLAGS_RELEASE}
+ -DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING=${CMAKE_C_FLAGS_RELWITHDEBINFO}
+ -DCMAKE_CXX_FLAGS_DEBUG:STRING=${CMAKE_CXX_FLAGS_DEBUG}
+ -DCMAKE_CXX_FLAGS_MINSIZEREL:STRING=${CMAKE_CXX_FLAGS_MINSIZEREL}
+ -DCMAKE_CXX_FLAGS_RELEASE:STRING=${CMAKE_CXX_FLAGS_RELEASE}
+ -DCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=${CMAKE_CXX_FLAGS_RELWITHDEBINFO}
+ -DCMAKE_CXX_FLAGS:STRING=${VV_CMAKE_CXX_FLAGS}
+ -DCMAKE_EXE_LINKER_FLAGS:STRING=${VV_CMAKE_EXE_LINKER_FLAGS}
+ -DCMAKE_INSTALL_PREFIX:PATH=${install_prefix}/${proj}
+ -DCMAKE_BUILD_TYPE:STRING=${build_type}
+ -DBUILD_SHARED_LIBS:BOOL=OFF
+ -DBUILD_TESTING:BOOL=OFF
+)
+#=========================================================
+
option "outputDir" o "Output dicom directory" string yes
option "key" k "Keys of tags to modify" string no multiple default="0008|103e"
option "tag" t "Tags values" string no multiple default="MIDPOSITION"
-option "useSizeAsReference" s "Use the size of the dicom image as reference for an occasional resampling" flag off
\ No newline at end of file
+option "newSeriesUID" e "Write the series with a new series UID (ignored if given in key/tag option)" flag off
+option "newStudyUID" u "Write the series with a new study UID (ignored if given in key/tag option; forces newSeriesUID = true)" flag off
+option "useSizeAsReference" s "Use the size of the dicom image as reference for an occasional resampling" flag off
// clitk
#include "clitkResampleImageWithOptionsFilter.h"
+#if GDCM_MAJOR_VERSION >= 2
+#include "gdcmUIDGenerator.h"
+#else
+#include "gdcmFile.h"
+#include "gdcmUtil.h"
+#endif
namespace clitk
namesGenerator->SetInputDirectory( m_ArgsInfo.inputDir_arg );
namesGenerator->SetOutputDirectory( m_ArgsInfo.outputDir_arg );
typename ReaderType::FileNamesContainer filenames_in = namesGenerator->GetInputFileNames();
- typename ReaderType::FileNamesContainer filenames_out = namesGenerator->GetOutputFileNames();
+ typename ReaderType::FileNamesContainer filenames_out;
// Output the dicom files
unsigned int numberOfFilenames = filenames_in.size();
// Get keys
unsigned int numberOfKeysGiven=m_ArgsInfo.key_given;
+ if (m_ArgsInfo.verbose_flag)
+ DD(numberOfKeysGiven);
+ std::string seriesUID;
+ std::string frameOfReferenceUID;
+ std::string studyUID;
+
+ // one pass through the keys given on the cmd-line, to check what will be recreated
+ std::string seriesUIDkey = "0020|000e";
+ std::string seriesNumberKey = "0020|0011";
+ std::string seriesDescriptionKey = "0008|103e";
+ std::string frameOfReferenceUIDKey = "0020|0052";
+ std::string studyUIDKey = "0020|000d";
+ std::string studyIDKey = "0020|0010";
+ std::string studyDescriptionKey = "0008|1030";
+ bool seriesUIDGiven = false;
+ bool seriesNumberGiven = false;
+ bool seriesDescriptionGiven = false;
+ bool studyUIDGiven = false;
+ bool studyIDGiven = false;
+ bool studyDescriptionGiven = false;
for (unsigned int i = 0; i < numberOfKeysGiven; i++) {
- std::string entryId(m_ArgsInfo.key_arg[i] );
- std::string value( m_ArgsInfo.tag_arg[i] );
- std::cout << entryId << " " << value << std::endl;
- for(unsigned int fni = 0; fni<numberOfFilenames; fni++)
- itk::EncapsulateMetaData<std::string>( *((*dictionary)[fni]), entryId, value );
+ std::string entryId( m_ArgsInfo.key_arg[i] );
+ if (m_ArgsInfo.verbose_flag)
+ DD(entryId);
+
+ seriesUIDGiven |= (entryId == seriesUIDkey || entryId == frameOfReferenceUIDKey);
+ seriesNumberGiven |= (entryId == seriesNumberKey);
+ seriesDescriptionGiven |= (entryId == seriesDescriptionKey);
+ studyUIDGiven |= (entryId == studyUIDKey);
+ studyIDGiven |= (entryId == studyIDKey);
+ studyDescriptionGiven |= (entryId == studyDescriptionKey);
+ }
+
+ // force the creation of a new series if a new study was specified
+ if (!studyUIDGiven && m_ArgsInfo.newStudyUID_flag) {
+ m_ArgsInfo.newSeriesUID_flag = true;
+#if GDCM_MAJOR_VERSION >= 2
+ gdcm::UIDGenerator suid;
+ studyUID = suid.Generate();
+#else
+ studyUID = gdcm::Util::CreateUniqueUID( gdcmIO->GetUIDPrefix());
+#endif
+ }
+
+ if (!seriesUIDGiven && m_ArgsInfo.newSeriesUID_flag) {
+#if GDCM_MAJOR_VERSION >= 2
+ gdcm::UIDGenerator suid;
+ seriesUID = suid.Generate();
+ gdcm::UIDGenerator fuid;
+ frameOfReferenceUID = fuid.Generate();
+#else
+ seriesUID = gdcm::Util::CreateUniqueUID( gdcmIO->GetUIDPrefix());
+ frameOfReferenceUID = gdcm::Util::CreateUniqueUID( gdcmIO->GetUIDPrefix());
+#endif
+ }
+
+ if (m_ArgsInfo.verbose_flag) {
+ DD(seriesUID);
+ DD(frameOfReferenceUID);
+ DD(studyUID);
+ }
+
+ // check if file UIDs will be be preserved
+ bool useInputFileUID = true;
+ if (m_ArgsInfo.newSeriesUID_flag || m_ArgsInfo.newStudyUID_flag || seriesUIDGiven || studyUIDGiven) {
+ useInputFileUID = false;
+#if GDCM_MAJOR_VERSION < 2
+ gdcmIO->SetKeepOriginalUID(true);
+#endif
+ }
+ else {
+ namesGenerator->SetOutputDirectory( m_ArgsInfo.outputDir_arg );
+ filenames_out = namesGenerator->GetOutputFileNames();
}
+ filenames_out.resize(numberOfFilenames);
+
+ time_t t;
+ t = time(&t);
+ struct tm* instanceDateTimeTm = localtime(&t);
+ char datetime[16];
+ strftime(datetime, 16, "%Y%m%d", instanceDateTimeTm);
+ std::ostringstream instanceDate;
+ instanceDate << datetime;
+ std::ostringstream instanceTime;
+ strftime(datetime, 16, "%H%M%S", instanceDateTimeTm);
+ instanceTime << datetime;
+
+ // update output dicom keys/tags
+ for(unsigned int fni = 0; fni<numberOfFilenames; fni++) {
+ for (unsigned int i = 0; i < numberOfKeysGiven; i++) {
+ std::string entryId(m_ArgsInfo.key_arg[i] );
+ std::string value( m_ArgsInfo.tag_arg[i] );
+
+ itk::EncapsulateMetaData<std::string>( *((*dictionary)[fni]), entryId, value );
+ }
+ // series UID
+ if (!seriesUIDGiven) {
+ if (m_ArgsInfo.newSeriesUID_flag) {
+ itk::EncapsulateMetaData<std::string>( *((*dictionary)[fni]), seriesUIDkey, seriesUID );
+ itk::EncapsulateMetaData<std::string>( *((*dictionary)[fni]), frameOfReferenceUIDKey, frameOfReferenceUID );
+ }
+ }
+
+ // study UID
+ if (!studyUIDGiven) {
+ if (m_ArgsInfo.newStudyUID_flag)
+ itk::EncapsulateMetaData<std::string>( *((*dictionary)[fni]), studyUIDKey, studyUID );
+ }
+
+ // study description
+ if (studyUIDGiven || m_ArgsInfo.newStudyUID_flag) {
+ if (!studyIDGiven)
+ itk::EncapsulateMetaData<std::string>( *((*dictionary)[fni]), studyIDKey,itksys::SystemTools::GetFilenameName( m_ArgsInfo.outputDir_arg ));
+ if (!studyDescriptionGiven)
+ itk::EncapsulateMetaData<std::string>( *((*dictionary)[fni]), studyDescriptionKey,itksys::SystemTools::GetFilenameName( m_ArgsInfo.outputDir_arg ));
+
+ itk::EncapsulateMetaData<std::string>( *((*dictionary)[fni]), "0008|0020", instanceDate.str() );
+ itk::EncapsulateMetaData<std::string>( *((*dictionary)[fni]), "0008|0030", instanceTime.str() );
+ }
+
+ // series description/number
+ if (seriesUIDGiven || m_ArgsInfo.newSeriesUID_flag) {
+ if (!seriesDescriptionGiven)
+ itk::EncapsulateMetaData<std::string>( *((*dictionary)[fni]), seriesDescriptionKey, itksys::SystemTools::GetFilenameName(m_ArgsInfo.outputDir_arg) );
+ if (!seriesNumberGiven)
+ itk::EncapsulateMetaData<std::string>( *((*dictionary)[fni]), seriesNumberKey, itksys::SystemTools::GetFilenameName(m_ArgsInfo.outputDir_arg) );
+
+ itk::EncapsulateMetaData<std::string>( *((*dictionary)[fni]), "0008|0012", instanceDate.str() );
+ itk::EncapsulateMetaData<std::string>( *((*dictionary)[fni]), "0008|0013", instanceTime.str() );
+ }
+
+ // file UIDs are recreated for new studies or series
+ if (!useInputFileUID)
+ {
+ std::string fileUID;
+#if GDCM_MAJOR_VERSION >= 2
+ gdcm::UIDGenerator fid;
+ fileUID = fid.Generate();
+#else
+ fileUID = gdcm::Util::CreateUniqueUID( gdcmIO->GetUIDPrefix());
+#endif
+ itk::EncapsulateMetaData<std::string>( *((*dictionary)[fni]), "0008|0018", fileUID );
+ itk::EncapsulateMetaData<std::string>( *((*dictionary)[fni]), "0002|0003", fileUID );
+
+ filenames_out[fni] = itksys::SystemTools::CollapseFullPath(fileUID.c_str(), m_ArgsInfo.outputDir_arg) + std::string(".dcm");
+ }
+ }
+
// Output directory and filenames
itksys::SystemTools::MakeDirectory( m_ArgsInfo.outputDir_arg ); // create if it doesn't exist
typedef itk::ImageSeriesWriter<InputImageType, OutputImageType > SeriesWriterType;
IF(WIN32)
#INCLUDE(InstallRequiredSystemLibraries)
- INSTALL(FILES ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_BUILD_TYPE}/vv.exe DESTINATION .)
+ INSTALL(FILES ${EXECUTABLE_OUTPUT_PATH}/vv.exe DESTINATION .)
#INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/icons/ducky.png DESTINATION .)
ENDIF(WIN32)
#=========================================================
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/ReadMe.txt")
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")
SET(CPACK_PACKAGE_VERSION_MAJOR "1")
-SET(CPACK_PACKAGE_VERSION_MINOR "2")
-SET(CPACK_PACKAGE_VERSION_PATCH "2")
+SET(CPACK_PACKAGE_VERSION_MINOR "3")
+SET(CPACK_PACKAGE_VERSION_PATCH "0")
SET(CPACK_PACKAGE_INSTALL_DIRECTORY "vv")
SET(CPACK_STRIP_FILES TRUE)
# There is a bug in NSI that does not handle full unix paths properly. Make
# sure there is at least one set of four (4) backlasshes.
SET(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\icons\\\\ducky.ico")
- SET(CPACK_NSIS_INSTALLED_ICON_NAME "${CMAKE_BUILD_TYPE}\\\\vv.exe")
+ SET(CPACK_NSIS_INSTALLED_ICON_NAME "vv.exe")
SET(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer")
SET(CPACK_NSIS_HELP_LINK "http://www.creatis.insa-lyon.fr/rio/vv")
SET(CPACK_NSIS_URL_INFO_ABOUT "http://www.creatis.insa-lyon.fr/rio")
if (argc >1) {
for (int i = 1; i < argc; i++) {
std::string current = argv[i];
- if (!current.compare(0,2,"--")) { //We are parsing an option
+ if (!current.compare(0,1,"-")) { // && !current.compare(0,2,"--")) { //We are parsing an option
if (parse_mode == P_SEQUENCE) {//First finish the current sequence
open_sequence(window, open_mode, parse_mode, sequence_filenames, n_image_loaded);
+ }
+ else if (parse_mode == P_WINDOW) { // handle negative window values
+ win=current;
+ parse_mode=P_NORMAL;
+ continue;
+ } else if (parse_mode == P_LEVEL) { // handle negative level values
+ lev=current;
+ parse_mode=P_NORMAL;
+ continue;
}
if ((current=="--help") || (current=="-h")) {
std::cout << "vv " << VV_VERSION << ", the 2D, 2D+t, 3D and 3D+t (or 4D) image viewer" << std::endl << std::endl
//<< "--roi file \t Overlay binary mask images. Option may be repeated on a single base image." << std::endl
<< "--contour file \t Overlay DICOM RT-STRUCT contours." << std::endl;
exit(0);
- }
- if (current=="--vf") {
+ } else if (current=="--vf") {
if (!n_image_loaded) load_image_first_error();
open_mode = O_VF;
} else if (current=="--overlay") {
window = 400;
level = 20;
break;
- case 3:
- window = 1500;
- level = -500;
+ case 3: // lungs (same as FOCAL)
+ window = 1700;
+ level = -300;
break;
case 4:
window = 1000;