From fcb68b3bddcdcb38494e5100e50fbd18d69b1fb8 Mon Sep 17 00:00:00 2001 From: Romulo Pinho Date: Wed, 17 Oct 2012 11:39:56 +0200 Subject: [PATCH] accepts multiple window/level in cmd-line - window/level is applied to set of images (sequences too) appearing before the window/level - useful when opening, eg, different modalities at the same time --- vv/vv.cxx | 32 +++++++++++++++++++++++++------- vv/vvMainWindow.cxx | 26 ++++++++++++++++++++++++++ vv/vvMainWindow.h | 2 ++ 3 files changed, 53 insertions(+), 7 deletions(-) diff --git a/vv/vv.cxx b/vv/vv.cxx index b4beaa8..f83dd3d 100644 --- a/vv/vv.cxx +++ b/vv/vv.cxx @@ -140,6 +140,8 @@ int main( int argc, char** argv ) int n_image_loaded=0; std::string win(""), lev(""); + int first_of_wl_set = -1; + bool new_wl_set = false; bool link_images = false; if (argc >1) { for (int i = 1; i < argc; i++) { @@ -150,11 +152,15 @@ int main( int argc, char** argv ) } else if (parse_mode == P_WINDOW) { // handle negative window values win=current; + window.ApplyWindowToSetOfImages(atof(win.c_str()), first_of_wl_set, n_image_loaded-1); parse_mode=P_NORMAL; + new_wl_set = false; continue; } else if (parse_mode == P_LEVEL) { // handle negative level values lev=current; + window.ApplyLevelToSetOfImages(atof(lev.c_str()), first_of_wl_set, n_image_loaded-1); parse_mode=P_NORMAL; + new_wl_set = false; continue; } if ((current=="--help") || (current=="-h")) { @@ -192,14 +198,18 @@ int main( int argc, char** argv ) } else if (current == "--sequence") { if(open_mode==O_BASE) n_image_loaded++; //count only one for the whole sequence parse_mode=P_SEQUENCE; + if (!new_wl_set) { + new_wl_set = true; + first_of_wl_set = n_image_loaded-1; + } } else if (current == "--window") { parse_mode=P_WINDOW; } else if (current == "--level") { parse_mode=P_LEVEL; } else if (current == "--linkall") { - link_images = true; - } - else if (current == "--log") { + link_images = true; + } + else if (current == "--log") { std::string log_dir = QDir::tempPath().toStdString() + std::string("/vv-log"); if(itksys::SystemTools::FileExists(log_dir.c_str()) && @@ -236,16 +246,24 @@ int main( int argc, char** argv ) sequence_filenames.push_back(current); } else if (parse_mode == P_WINDOW) { win=current; + window.ApplyWindowToSetOfImages(atof(win.c_str()), first_of_wl_set, n_image_loaded-1); parse_mode=P_NORMAL; + new_wl_set = false; } else if (parse_mode == P_LEVEL) { lev=current; + window.ApplyLevelToSetOfImages(atof(lev.c_str()), first_of_wl_set, n_image_loaded-1); parse_mode=P_NORMAL; + new_wl_set = false; } else { std::vector image; image.push_back(current); if(open_mode==O_BASE) { window.LoadImages(image, vvImageReader::IMAGE); n_image_loaded++; + if (!new_wl_set) { + new_wl_set = true; + first_of_wl_set = n_image_loaded-1; + } } else if (open_mode==O_VF) window.AddField(current.c_str(), n_image_loaded-1); @@ -263,10 +281,10 @@ int main( int argc, char** argv ) } } - if(win!="" && lev!="") { - window.SetWindowLevel(atof(win.c_str()), atof(lev.c_str())); - window.ApplyWindowLevelToAllImages(); - } +// if(win!="" && lev!="") { +// window.SetWindowLevel(atof(win.c_str()), atof(lev.c_str())); +// window.ApplyWindowLevelToAllImages(); +// } if (link_images) window.LinkAllImages(); diff --git a/vv/vvMainWindow.cxx b/vv/vvMainWindow.cxx index ba7e3ad..3941459 100644 --- a/vv/vvMainWindow.cxx +++ b/vv/vvMainWindow.cxx @@ -1803,6 +1803,32 @@ void vvMainWindow::ApplyWindowLevelToAllImages() } //------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +void vvMainWindow::ApplyWindowToSetOfImages(double window, unsigned int indexMin, unsigned int indexMax) +{ + for (unsigned int i = indexMin; i <= indexMax && i < mSlicerManagers.size(); i++) { + if (mSlicerManagers[i] == NULL) + continue; + mSlicerManagers[i]->SetColorWindow(window); + mSlicerManagers[i]->SetPreset(6); + mSlicerManagers[i]->Render(); + } +} +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +void vvMainWindow::ApplyLevelToSetOfImages(double level, unsigned int indexMin, unsigned int indexMax) +{ + for (unsigned int i = indexMin; i <= indexMax && i < mSlicerManagers.size(); i++) { + if (mSlicerManagers[i] == NULL) + continue; + mSlicerManagers[i]->SetColorLevel(level); + mSlicerManagers[i]->SetPreset(6); + mSlicerManagers[i]->Render(); + } +} +//------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ void vvMainWindow::UpdateLinkManager(std::string id, int slicer, double x, double y, double z, int temps) { diff --git a/vv/vvMainWindow.h b/vv/vvMainWindow.h index 015a468..1621c32 100644 --- a/vv/vvMainWindow.h +++ b/vv/vvMainWindow.h @@ -121,6 +121,8 @@ public slots: void UpdateSlicingPreset(); void SwitchWindowLevel(); void ApplyWindowLevelToAllImages(); + void ApplyWindowToSetOfImages(double window, unsigned int indexMin, unsigned int indexMax); + void ApplyLevelToSetOfImages(double level, unsigned int indexMin, unsigned int indexMax); void UpdateLinkManager(std::string id, int slicer, double x, double y, double z, int temps); void UpdateLinkedNavigation(std::string id, vvSlicerManager *sm, vvSlicer* refSlicer); void AddLink(QString image1,QString image2); -- 2.47.1