From 4ea2c946973c570cbe540a27cf44d6acdf44867c Mon Sep 17 00:00:00 2001 From: dsarrut Date: Mon, 29 Mar 2010 07:48:55 +0000 Subject: [PATCH] - add "convert to" in context menu --- filters/clitkImageConvertGenericFilter.cxx | 46 +- filters/clitkImageConvertGenericFilter.h | 6 + vv/CMakeLists.txt | 2 + vv/qt_ui/vvDocumentation.ui | 2 +- vv/qt_ui/vvLandmarksPanel.ui | 6 +- vv/qt_ui/vvMainWindow.ui | 40 +- vv/qt_ui/vvOverlayPanel.ui | 6 +- vv/qt_ui/vvProgressDialog.ui | 2 +- vv/qt_ui/vvToolImageArithm.ui | 4 +- vv/qt_ui/vvTools.ui | 2 +- vv/vvIcons.qrc | 8 +- vv/vvImageContour.cxx | 1 + vv/vvLinkPanel.cxx | 2 +- vv/vvMainWindow.cxx | 67 +- vv/vvMainWindowBase.h | 3 + vv/vvSlicer.cxx | 64 +- vv/vvSlicerManager.cxx | 1381 +++++++++++--------- vv/vvSlicerManager.h | 9 +- vv/vvToolBase.cxx | 2 + vv/vvToolBase.h | 5 + vv/vvToolBase.txx | 1 + vv/vvToolBaseBase.h | 1 + vv/vvToolBinarize.cxx | 3 +- vv/vvToolCreator.h | 1 + vv/vvToolCreator.txx | 2 + vv/vvToolCreatorBase.cxx | 33 + vv/vvToolCreatorBase.h | 8 +- vv/vvToolCreatorBase.txx | 2 + vv/vvToolCropImage.h | 2 +- vv/vvToolFoo.cxx | 2 +- vv/vvToolFooWithWidgetBase.cxx | 2 +- vv/vvToolImageArithm.cxx | 2 +- vv/vvToolManager.cxx | 1 + 33 files changed, 983 insertions(+), 735 deletions(-) diff --git a/filters/clitkImageConvertGenericFilter.cxx b/filters/clitkImageConvertGenericFilter.cxx index 326f06f..9f35379 100644 --- a/filters/clitkImageConvertGenericFilter.cxx +++ b/filters/clitkImageConvertGenericFilter.cxx @@ -14,19 +14,9 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html -======================================================================-====*/ + ======================================================================-====*/ #ifndef CLITKIMAGECONVERTGENERICFILTER_CXX #define CLITKIMAGECONVERTGENERICFILTER_CXX -/** - ------------------------------------------------- - * @file clitkImageConvertGenericFilter.cxx - * @author David Sarrut - * @date 05 May 2008 10:57:19 - * - * @brief - * - * - -------------------------------------------------*/ #include "clitkImageConvertGenericFilter.h" @@ -34,6 +24,9 @@ clitk::ImageConvertGenericFilter::ImageConvertGenericFilter(): clitk::ImageToImageGenericFilter("ImageConvert") { mOutputPixelTypeName = "NotSpecified"; + mWarningOccur = false; + mWarning = ""; + mDisplayWarning = true; InitializeImageType<2>(); InitializeImageType<3>(); InitializeImageType<4>(); @@ -45,6 +38,7 @@ clitk::ImageConvertGenericFilter::ImageConvertGenericFilter(): template void clitk::ImageConvertGenericFilter::InitializeImageType() { ADD_IMAGE_TYPE(Dim, char); + ADD_IMAGE_TYPE(Dim, unsigned char); ADD_IMAGE_TYPE(Dim, short); ADD_IMAGE_TYPE(Dim, unsigned short); ADD_IMAGE_TYPE(Dim, int); @@ -84,10 +78,10 @@ void clitk::ImageConvertGenericFilter::UpdateWithInputImageType() { this->SetNextOutput(input); } else { -#define TRY_TYPE(TYPE) \ +#define TRY_TYPE(TYPE) \ if (IsSameType(mOutputPixelTypeName)) { UpdateWithOutputType(); return; } TRY_TYPE(char); - // TRY_TYPE(signed char); + // TRY_TYPE(signed char); TRY_TYPE(uchar); TRY_TYPE(short); TRY_TYPE(ushort); @@ -114,29 +108,39 @@ void clitk::ImageConvertGenericFilter::UpdateWithOutputType() { typedef typename InputImageType::PixelType PixelType; // Warning + std::ostringstream osstream; if (std::numeric_limits::is_signed) { if (!std::numeric_limits::is_signed) { - std::cerr << "Warning, input type is signed (" << mPixelTypeName << ") while output type is not (" - << mOutputPixelTypeName << "), use at your own responsability." << std::endl; + osstream << "Warning, input type is signed (" << mPixelTypeName << ") while output type is not (" + << mOutputPixelTypeName << "), use at your own responsability." << std::endl; + mWarningOccur = true; } } if (!std::numeric_limits::is_integer) { if (std::numeric_limits::is_integer) { - std::cerr << "Warning, input type is not integer (" << mPixelTypeName << ") while output type is (" - << mOutputPixelTypeName << "), use at your own responsability." << std::endl; + osstream << "Warning, input type is not integer (" << mPixelTypeName << ") while output type is (" + << mOutputPixelTypeName << "), use at your own responsability." << std::endl; + mWarningOccur = true; } } // DD(std::numeric_limits::digits10); // DD(std::numeric_limits::digits10); if (!std::numeric_limits::is_integer) { if (std::numeric_limits::is_integer) { - std::cerr << "Warning, input type is not integer (" << mPixelTypeName << ") while output type is (" - << mOutputPixelTypeName << "), use at your own responsability." << std::endl; + osstream << "Warning, input type is not integer (" << mPixelTypeName << ") while output type is (" + << mOutputPixelTypeName << "), use at your own responsability." << std::endl; + mWarningOccur = true; } } if (std::numeric_limits::digits10 > std::numeric_limits::digits10) { - std::cerr << "Warning, possible loss of precision : input type is (" << mPixelTypeName << ") while output type is (" - << mOutputPixelTypeName << "), use at your own responsability." << std::endl; + osstream << "Warning, possible loss of precision : input type is (" << mPixelTypeName << ") while output type is (" + << mOutputPixelTypeName << "), use at your own responsability." << std::endl; + mWarningOccur = true; + } + + mWarning = osstream.str(); + if (mDisplayWarning) { + std::cerr << mWarning; } // Cast diff --git a/filters/clitkImageConvertGenericFilter.h b/filters/clitkImageConvertGenericFilter.h index 19caaef..8bbca3c 100644 --- a/filters/clitkImageConvertGenericFilter.h +++ b/filters/clitkImageConvertGenericFilter.h @@ -52,6 +52,9 @@ namespace clitk { // Members functions void SetOutputPixelType(std::string p) { mOutputPixelTypeName = p; } + bool IsWarningOccur() { return mWarningOccur; } + std::string & GetWarning() { return mWarning; } + void EnableDisplayWarning(bool b) { mDisplayWarning = b; } //-------------------------------------------------------------------- // Main function called each time the filter is updated @@ -61,6 +64,9 @@ namespace clitk { protected: template void InitializeImageType(); std::string mOutputPixelTypeName; + std::string mWarning; + bool mWarningOccur; + bool mDisplayWarning; template void UpdateWithOutputType(); diff --git a/vv/CMakeLists.txt b/vv/CMakeLists.txt index 9d9c89f..fb3fc03 100644 --- a/vv/CMakeLists.txt +++ b/vv/CMakeLists.txt @@ -111,6 +111,7 @@ SET(vv_SRCS vvToolInputSelectorWidget.cxx vvImageContour.cxx vvToolImageArithm.cxx + vvToolConvert.cxx ) QT4_WRAP_CPP(vv_SRCS @@ -141,6 +142,7 @@ QT4_WRAP_CPP(vv_SRCS vvToolWidgetBase.h vvToolCropImage.h vvToolImageArithm.h + vvToolConvert.h ) QT4_WRAP_UI(vv_UI_CXX diff --git a/vv/qt_ui/vvDocumentation.ui b/vv/qt_ui/vvDocumentation.ui index 8bb0792..e9be858 100644 --- a/vv/qt_ui/vvDocumentation.ui +++ b/vv/qt_ui/vvDocumentation.ui @@ -31,7 +31,7 @@ - :/new/prefix1/icons/splashscreen2.png + :/common/icons/splashscreen2.png true diff --git a/vv/qt_ui/vvLandmarksPanel.ui b/vv/qt_ui/vvLandmarksPanel.ui index d0bec19..fd08723 100644 --- a/vv/qt_ui/vvLandmarksPanel.ui +++ b/vv/qt_ui/vvLandmarksPanel.ui @@ -88,7 +88,7 @@ p, li { white-space: pre-wrap; } - :/new/prefix1/icons/undo.png:/new/prefix1/icons/undo.png + :/common/icons/undo.png:/common/icons/undo.png @@ -112,7 +112,7 @@ p, li { white-space: pre-wrap; } - :/new/prefix1/icons/open.png:/new/prefix1/icons/open.png + :/common/icons/open.png:/common/icons/open.png @@ -123,7 +123,7 @@ p, li { white-space: pre-wrap; } - :/new/prefix1/icons/filesave.png:/new/prefix1/icons/filesave.png + :/common/icons/filesave.png:/common/icons/filesave.png diff --git a/vv/qt_ui/vvMainWindow.ui b/vv/qt_ui/vvMainWindow.ui index a81f942..011b4dc 100644 --- a/vv/qt_ui/vvMainWindow.ui +++ b/vv/qt_ui/vvMainWindow.ui @@ -21,7 +21,7 @@ - :/new/prefix1/icons/ducky.png:/new/prefix1/icons/ducky.png + :/common/icons/ducky.png:/common/icons/ducky.png Type 'h' on image to display help on navigation @@ -99,7 +99,7 @@ - :/new/prefix1/icons/cross.png:/new/prefix1/icons/cross.png + :/common/icons/cross.png:/common/icons/cross.png @@ -135,7 +135,7 @@ - :/new/prefix1/icons/player_play.png:/new/prefix1/icons/player_play.png + :/common/icons/player_play.png:/common/icons/player_play.png @@ -191,7 +191,7 @@ - :/new/prefix1/icons/invertcolor.png:/new/prefix1/icons/invertcolor.png + :/common/icons/invertcolor.png:/common/icons/invertcolor.png @@ -344,7 +344,7 @@ - :/new/prefix1/icons/adjustsize.png:/new/prefix1/icons/adjustsize.png + :/common/icons/adjustsize.png:/common/icons/adjustsize.png @@ -833,7 +833,7 @@ - :/new/prefix1/icons/fileopen.png:/new/prefix1/icons/fileopen.png + :/common/icons/fileopen.png:/common/icons/fileopen.png Open image(s) @@ -847,7 +847,7 @@ - :/new/prefix1/icons/exit.png:/new/prefix1/icons/exit.png + :/common/icons/exit.png:/common/icons/exit.png Exit @@ -896,7 +896,7 @@ - :/new/prefix1/icons/open.png:/new/prefix1/icons/open.png + :/common/icons/open.png:/common/icons/open.png Open Dicom @@ -905,7 +905,7 @@ - :/new/prefix1/icons/open.png:/new/prefix1/icons/open.png + :/common/icons/open.png:/common/icons/open.png Open several xD images into a single (x+1) D @@ -919,7 +919,7 @@ - :/new/prefix1/icons/filesave.png:/new/prefix1/icons/filesave.png + :/common/icons/filesave.png:/common/icons/filesave.png Save current image @@ -931,7 +931,7 @@ - :/new/prefix1/icons/cursor-uparrow.png:/new/prefix1/icons/cursor-uparrow.png + :/common/icons/cursor-uparrow.png:/common/icons/cursor-uparrow.png Add deformation field to current image @@ -940,7 +940,7 @@ - :/new/prefix1/icons/NOgrid.png:/new/prefix1/icons/NOgrid.png + :/common/icons/NOgrid.png:/common/icons/NOgrid.png Save image in TL @@ -949,7 +949,7 @@ - :/new/prefix1/icons/NEgrid.png:/new/prefix1/icons/NEgrid.png + :/common/icons/NEgrid.png:/common/icons/NEgrid.png Save image in TR @@ -958,7 +958,7 @@ - :/new/prefix1/icons/SOgrid.png:/new/prefix1/icons/SOgrid.png + :/common/icons/SOgrid.png:/common/icons/SOgrid.png Save image in BL @@ -967,7 +967,7 @@ - :/new/prefix1/icons/SEgrid.png:/new/prefix1/icons/SEgrid.png + :/common/icons/SEgrid.png:/common/icons/SEgrid.png Save image in BR @@ -976,7 +976,7 @@ - :/new/prefix1/icons/open.png:/new/prefix1/icons/open.png + :/common/icons/open.png:/common/icons/open.png Open xD image(s) as (x-1)D + t @@ -985,7 +985,7 @@ - :/new/prefix1/icons/open.png:/new/prefix1/icons/open.png + :/common/icons/open.png:/common/icons/open.png Open several xD images into a single xD + t @@ -994,7 +994,7 @@ - :/new/prefix1/icons/fusion.png:/new/prefix1/icons/fusion.png + :/common/icons/fusion.png:/common/icons/fusion.png Add fusion image to current image @@ -1038,7 +1038,7 @@ - :/new/prefix1/icons/open.png:/new/prefix1/icons/open.png + :/common/icons/open.png:/common/icons/open.png Open VTK or OBJ contour @@ -1055,7 +1055,7 @@ - :/new/prefix1/icons/open.png:/new/prefix1/icons/open.png + :/common/icons/open.png:/common/icons/open.png Open Dicom-Struct diff --git a/vv/qt_ui/vvOverlayPanel.ui b/vv/qt_ui/vvOverlayPanel.ui index cf9d6c4..b26dc0c 100644 --- a/vv/qt_ui/vvOverlayPanel.ui +++ b/vv/qt_ui/vvOverlayPanel.ui @@ -72,7 +72,7 @@ p, li { white-space: pre-wrap; } - :/new/prefix1/icons/cursor-uparrow.png + :/common/icons/cursor-uparrow.png true @@ -195,7 +195,7 @@ p, li { white-space: pre-wrap; } - :/new/prefix1/icons/GPSup.png + :/common/icons/GPSup.png true @@ -304,7 +304,7 @@ p, li { white-space: pre-wrap; } - :/new/prefix1/icons/fusion.png + :/common/icons/fusion.png diff --git a/vv/qt_ui/vvProgressDialog.ui b/vv/qt_ui/vvProgressDialog.ui index 9100089..2f684e8 100644 --- a/vv/qt_ui/vvProgressDialog.ui +++ b/vv/qt_ui/vvProgressDialog.ui @@ -18,7 +18,7 @@ - :/new/prefix1/icons/ducky.png:/new/prefix1/icons/ducky.png + :/common/icons/ducky.png:/common/icons/ducky.png diff --git a/vv/qt_ui/vvToolImageArithm.ui b/vv/qt_ui/vvToolImageArithm.ui index 7535a36..fda39d5 100644 --- a/vv/qt_ui/vvToolImageArithm.ui +++ b/vv/qt_ui/vvToolImageArithm.ui @@ -231,6 +231,8 @@ - + + + diff --git a/vv/qt_ui/vvTools.ui b/vv/qt_ui/vvTools.ui index 90d9276..f8cd76b 100644 --- a/vv/qt_ui/vvTools.ui +++ b/vv/qt_ui/vvTools.ui @@ -237,7 +237,7 @@ p, li { white-space: pre-wrap; } - :/new/prefix1/icons/standardbutton-apply-16.png:/new/prefix1/icons/standardbutton-apply-16.png + :/common/icons/standardbutton-apply-16.png:/common/icons/standardbutton-apply-16.png diff --git a/vv/vvIcons.qrc b/vv/vvIcons.qrc index 98a90b7..c3d2df7 100644 --- a/vv/vvIcons.qrc +++ b/vv/vvIcons.qrc @@ -1,5 +1,11 @@ - + + icons/arithm.png + icons/green-arrow.png + icons/2b.png + icons/4b.png + icons/8b.png + icons/1b.png icons/binarize.png icons/crop.png icons/splashscreen2.png diff --git a/vv/vvImageContour.cxx b/vv/vvImageContour.cxx index 1dacaf4..a98247c 100644 --- a/vv/vvImageContour.cxx +++ b/vv/vvImageContour.cxx @@ -15,6 +15,7 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html ======================================================================-====*/ + #include "vvImageContour.h" #include #include diff --git a/vv/vvLinkPanel.cxx b/vv/vvLinkPanel.cxx index 511248e..b57aefd 100644 --- a/vv/vvLinkPanel.cxx +++ b/vv/vvLinkPanel.cxx @@ -152,7 +152,7 @@ void vvLinkPanel::addLink() QTreePushButton* cButton = new QTreePushButton; cButton->setIndex(linkTableWidget->rowCount()); cButton->setColumn(0); - cButton->setIcon(QIcon(QString::fromUtf8(":/new/prefix1/icons/exit.png"))); + cButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/exit.png"))); connect(cButton,SIGNAL(clickedInto(int, int)), this,SLOT(removeLink(int, int))); cButton->setToolTip(tr("remove link")); diff --git a/vv/vvMainWindow.cxx b/vv/vvMainWindow.cxx index f556a8a..43df4b4 100644 --- a/vv/vvMainWindow.cxx +++ b/vv/vvMainWindow.cxx @@ -15,6 +15,7 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html ======================================================================-====*/ + #include #include #include @@ -101,42 +102,43 @@ vvMainWindow::vvMainWindow():vvMainWindowBase() { mInputPathName = ""; mMenuTools = menuTools; + mContextMenu = &contextMenu; mMenuExperimentalTools = menuExperimental; mMainWidget = this; //Init the contextMenu this->setContextMenuPolicy(Qt::CustomContextMenu); contextActions.resize(0); - QAction* actionOpen_new_image = contextMenu.addAction(QIcon(QString::fromUtf8(":/new/prefix1/icons/fileopen.png")), + QAction* actionOpen_new_image = contextMenu.addAction(QIcon(QString::fromUtf8(":/common/icons/fileopen.png")), tr("O&pen new Image")); actionOpen_new_image->setShortcut(QKeySequence(tr("Ctrl+O"))); connect(actionOpen_new_image,SIGNAL(triggered()),this,SLOT(OpenImages())); contextActions.push_back(actionOpen_new_image); contextMenu.addSeparator(); - QAction* actionClose_Image = contextMenu.addAction(QIcon(QString::fromUtf8(":/new/prefix1/icons/exit.png")), + QAction* actionClose_Image = contextMenu.addAction(QIcon(QString::fromUtf8(":/common/icons/exit.png")), tr("Close Current Image")); connect(actionClose_Image,SIGNAL(triggered()),this,SLOT(CloseImage())); contextActions.push_back(actionClose_Image); - QAction* actionReload_image = contextMenu.addAction(QIcon(QString::fromUtf8(":/new/prefix1/icons/rotateright.png")), + QAction* actionReload_image = contextMenu.addAction(QIcon(QString::fromUtf8(":/common/icons/rotateright.png")), tr("Reload Current Image")); connect(actionReload_image,SIGNAL(triggered()),this,SLOT(ReloadImage())); contextActions.push_back(actionReload_image); - QAction* actionSave_image = contextMenu.addAction(QIcon(QString::fromUtf8(":/new/prefix1/icons/filesave.png")), + QAction* actionSave_image = contextMenu.addAction(QIcon(QString::fromUtf8(":/common/icons/filesave.png")), tr("Save Current Image")); connect(actionSave_image,SIGNAL(triggered()),this,SLOT(SaveAs())); contextActions.push_back(actionSave_image); contextMenu.addSeparator(); - // QAction* actionCrop_image = contextMenu.addAction(QIcon(QString::fromUtf8(":/new/prefix1/icons/crop.png")), + // QAction* actionCrop_image = contextMenu.addAction(QIcon(QString::fromUtf8(":/common/icons/crop.png")), // tr("Crop Current Image")); // connect(actionCrop_image,SIGNAL(triggered()),this,SLOT(CropImage())); // contextActions.push_back(actionCrop_image); - QAction* actionSplit_image = contextMenu.addAction(QIcon(QString::fromUtf8(":/new/prefix1/icons/cut.png")), + QAction* actionSplit_image = contextMenu.addAction(QIcon(QString::fromUtf8(":/common/icons/cut.png")), tr("Split Current Image")); connect(actionSplit_image,SIGNAL(triggered()),this,SLOT(SplitImage())); contextActions.push_back(actionSplit_image); @@ -146,7 +148,7 @@ vvMainWindow::vvMainWindow():vvMainWindowBase() { contextMenu.addAction(actionAdd_VF_to_current_Image); contextActions.push_back(actionAdd_VF_to_current_Image); - QAction* actionAdd_Overlay_to_current_Image = menuOverlay->addAction(QIcon(QString::fromUtf8(":/new/prefix1/icons/GPSup.png")), + QAction* actionAdd_Overlay_to_current_Image = menuOverlay->addAction(QIcon(QString::fromUtf8(":/common/icons/GPSup.png")), tr("Add overlay image to current image")); contextMenu.addAction(actionAdd_Overlay_to_current_Image); contextActions.push_back(actionAdd_Overlay_to_current_Image); @@ -157,6 +159,21 @@ vvMainWindow::vvMainWindow():vvMainWindowBase() { connect(actionAdd_fusion_image,SIGNAL(triggered()),this,SLOT(AddFusionImage())); contextActions.push_back(actionAdd_fusion_image); + // TRIAL DS + /* + QMenu * m = new QMenu(menubar); + m->setTitle("TOTO"); + // m->setObjectName(QString::fromUtf8("TOTOTO")); + contextMenu.addMenu(m); + QAction * a = m->addAction(QIcon(QString::fromUtf8(":/common/icons/GPSup.png")), + tr("BIDON")); + QAction * b = m->addAction(QIcon(QString::fromUtf8(":/common/icons/GPSup.png")), + tr("BIDON2")); + m->addAction(a); + m->addAction(b); + connect(a,SIGNAL(triggered()),this,SLOT(AddFusionImage())); + */ + //init the DataTree mSlicerManagers.resize(0); @@ -297,11 +314,11 @@ vvMainWindow::vvMainWindow():vvMainWindowBase() { if ( !recent_files.empty() ) { QMenu * rmenu = new QMenu("Recently opened files..."); - rmenu->setIcon(QIcon(QString::fromUtf8(":/new/prefix1/icons/open.png"))); + rmenu->setIcon(QIcon(QString::fromUtf8(":/common/icons/open.png"))); menuFile->insertMenu(actionOpen_Image_With_Time,rmenu); for (std::list::iterator i = recent_files.begin();i!=recent_files.end();i++) { - QAction* current=new QAction(QIcon(QString::fromUtf8(":/new/prefix1/icons/open.png")), + QAction* current=new QAction(QIcon(QString::fromUtf8(":/common/icons/open.png")), (*i).c_str(),this); rmenu->addAction(current); connect(current,SIGNAL(triggered()),this,SLOT(OpenRecentImage())); @@ -375,7 +392,7 @@ void vvMainWindow::AddContour(int image_index, vvMesh::Pointer contour, bool pro cButton->setItem(item); cButton->setColumn(COLUMN_CLOSE_IMAGE); cButton->setToolTip(tr("close image")); - cButton->setIcon(QIcon(QString::fromUtf8(":/new/prefix1/icons/exit.png"))); + cButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/exit.png"))); connect(cButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)), this,SLOT(CloseImage(QTreeWidgetItem*, int))); @@ -383,7 +400,7 @@ void vvMainWindow::AddContour(int image_index, vvMesh::Pointer contour, bool pro rButton->setItem(item); rButton->setColumn(COLUMN_RELOAD_IMAGE); rButton->setToolTip(tr("reload image")); - rButton->setIcon(QIcon(QString::fromUtf8(":/new/prefix1/icons/rotateright.png"))); + rButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/rotateright.png"))); rButton->setEnabled(false); //Not implemented //connect(rButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)), @@ -823,7 +840,7 @@ void vvMainWindow::LoadImages(std::vector files, LoadedImageType fi cButton->setItem(item); cButton->setColumn(COLUMN_CLOSE_IMAGE); cButton->setToolTip(tr("close image")); - cButton->setIcon(QIcon(QString::fromUtf8(":/new/prefix1/icons/exit.png"))); + cButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/exit.png"))); connect(cButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)), this,SLOT(CloseImage(QTreeWidgetItem*, int))); @@ -831,7 +848,7 @@ void vvMainWindow::LoadImages(std::vector files, LoadedImageType fi rButton->setItem(item); rButton->setColumn(COLUMN_RELOAD_IMAGE); rButton->setToolTip(tr("reload image")); - rButton->setIcon(QIcon(QString::fromUtf8(":/new/prefix1/icons/rotateright.png"))); + rButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/rotateright.png"))); connect(rButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)), this,SLOT(ReloadImage(QTreeWidgetItem*, int))); @@ -1615,7 +1632,7 @@ void vvMainWindow::SplitImage() { cButton->setItem(item); cButton->setColumn(COLUMN_CLOSE_IMAGE); cButton->setToolTip(tr("close image")); - cButton->setIcon(QIcon(QString::fromUtf8(":/new/prefix1/icons/exit.png"))); + cButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/exit.png"))); connect(cButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)), this,SLOT(CloseImage(QTreeWidgetItem*, int))); @@ -1623,7 +1640,7 @@ void vvMainWindow::SplitImage() { rButton->setItem(item); rButton->setColumn(COLUMN_RELOAD_IMAGE); rButton->setToolTip(tr("reload image")); - rButton->setIcon(QIcon(QString::fromUtf8(":/new/prefix1/icons/rotateright.png"))); + rButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/rotateright.png"))); rButton->setEnabled(false); connect(rButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)), this,SLOT(ReloadImage(QTreeWidgetItem*, int))); @@ -1878,7 +1895,7 @@ void vvMainWindow::AddOverlayImage(int index, QString file) { cButton->setItem(item); cButton->setColumn(COLUMN_CLOSE_IMAGE); cButton->setToolTip(tr("close image")); - cButton->setIcon(QIcon(QString::fromUtf8(":/new/prefix1/icons/exit.png"))); + cButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/exit.png"))); connect(cButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)), this,SLOT(CloseImage(QTreeWidgetItem*, int))); @@ -1886,7 +1903,7 @@ void vvMainWindow::AddOverlayImage(int index, QString file) { rButton->setItem(item); rButton->setColumn(COLUMN_RELOAD_IMAGE); rButton->setToolTip(tr("reload image")); - rButton->setIcon(QIcon(QString::fromUtf8(":/new/prefix1/icons/rotateright.png"))); + rButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/rotateright.png"))); connect(rButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)), this,SLOT(ReloadImage(QTreeWidgetItem*, int))); @@ -1968,7 +1985,7 @@ void vvMainWindow::AddFusionImage() cButton->setItem(item); cButton->setColumn(COLUMN_CLOSE_IMAGE); cButton->setToolTip(tr("close image")); - cButton->setIcon(QIcon(QString::fromUtf8(":/new/prefix1/icons/exit.png"))); + cButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/exit.png"))); connect(cButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)), this,SLOT(CloseImage(QTreeWidgetItem*, int))); @@ -1976,7 +1993,7 @@ void vvMainWindow::AddFusionImage() rButton->setItem(item); rButton->setColumn(COLUMN_RELOAD_IMAGE); rButton->setToolTip(tr("reload image")); - rButton->setIcon(QIcon(QString::fromUtf8(":/new/prefix1/icons/rotateright.png"))); + rButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/rotateright.png"))); connect(rButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)), this,SLOT(ReloadImage(QTreeWidgetItem*, int))); @@ -2053,7 +2070,7 @@ void vvMainWindow::AddFieldEntry(QString filename,int index,bool from_disk) cButton->setItem(item); cButton->setColumn(COLUMN_CLOSE_IMAGE); cButton->setToolTip(tr("close vector field")); - cButton->setIcon(QIcon(QString::fromUtf8(":/new/prefix1/icons/exit.png"))); + cButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/exit.png"))); connect(cButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)), this,SLOT(CloseImage(QTreeWidgetItem*, int))); @@ -2062,7 +2079,7 @@ void vvMainWindow::AddFieldEntry(QString filename,int index,bool from_disk) rButton->setColumn(COLUMN_RELOAD_IMAGE); rButton->setToolTip(tr("reload vector field")); rButton->setEnabled(from_disk); - rButton->setIcon(QIcon(QString::fromUtf8(":/new/prefix1/icons/rotateright.png"))); + rButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/rotateright.png"))); connect(rButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)), this,SLOT(ReloadImage(QTreeWidgetItem*, int))); @@ -2589,7 +2606,7 @@ void vvMainWindow::PlayPause() { if (playMode) { playMode = 0; - playButton->setIcon(QIcon(QString::fromUtf8(":/new/prefix1/icons/player_play.png"))); + playButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/player_play.png"))); ImageInfoChanged(); return; } @@ -2606,7 +2623,7 @@ void vvMainWindow::PlayPause() { if (has_temporal) { playMode = 1; - playButton->setIcon(QIcon(QString::fromUtf8(":/new/prefix1/icons/player_pause.png"))); + playButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/player_pause.png"))); QTimer::singleShot(1000/mFrameRate, this, SLOT(PlayNext())); } } @@ -2706,14 +2723,14 @@ void vvMainWindow::AddImage(vvSlicerManager * slicer_manager) { QTreePushButton* cButton = new QTreePushButton; cButton->setItem(item); cButton->setColumn(COLUMN_CLOSE_IMAGE); - cButton->setIcon(QIcon(QString::fromUtf8(":/new/prefix1/icons/exit.png"))); + cButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/exit.png"))); connect(cButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)), this,SLOT(CloseImage(QTreeWidgetItem*, int))); QTreePushButton* rButton = new QTreePushButton; rButton->setItem(item); rButton->setColumn(COLUMN_RELOAD_IMAGE); - rButton->setIcon(QIcon(QString::fromUtf8(":/new/prefix1/icons/rotateright.png"))); + rButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/rotateright.png"))); rButton->setEnabled(0); connect(rButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)), this,SLOT(ReloadImage(QTreeWidgetItem*, int))); diff --git a/vv/vvMainWindowBase.h b/vv/vvMainWindowBase.h index a780e9f..6123a6e 100644 --- a/vv/vvMainWindowBase.h +++ b/vv/vvMainWindowBase.h @@ -15,6 +15,7 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html ======================================================================-====*/ + #ifndef VVMAINWINDOWBASE_H #define VVMAINWINDOWBASE_H #include "clitkCommon.h" @@ -37,6 +38,7 @@ public: virtual void UpdateCurrentSlicer() = 0; const std::vector & GetSlicerManagers() const { return mSlicerManagers; } QMenu * GetToolMenu() const { return mMenuTools; } + QMenu * GetContextMenu() const { return mContextMenu; } QMenu * GetExperimentalToolMenu() const { return mMenuExperimentalTools; } int GetSlicerManagerCurrentIndex() const { return mSlicerManagerCurrentIndex; } QWidget * GetMainWidget() { return mMainWidget; } @@ -47,6 +49,7 @@ signals: protected: std::vector mSlicerManagers; QMenu * mMenuTools; + QMenu * mContextMenu; QMenu * mMenuExperimentalTools; int mSlicerManagerCurrentIndex; QWidget* mMainWidget; diff --git a/vv/vvSlicer.cxx b/vv/vvSlicer.cxx index 17afe19..a5c2641 100644 --- a/vv/vvSlicer.cxx +++ b/vv/vvSlicer.cxx @@ -14,9 +14,9 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html -======================================================================-====*/ -#include "vvSlicer.h" + ======================================================================-====*/ +#include "vvSlicer.h" #include "vvImage.h" #include "vvSlicerManagerCommand.h" #include "vvGlyphSource.h" @@ -1139,50 +1139,50 @@ void vvSlicer::SetColorLevel(double level) // Returns the min an the max value in a 41x41 region around the mouse pointer void vvSlicer::GetExtremasAroundMousePointer(double & min, double & max) { - //Get mouse pointer position in view coordinates - double fLocalExtents[6]; - for(int i=0; i<3; i++) + //Get mouse pointer position in view coordinates + double fLocalExtents[6]; + for(int i=0; i<3; i++) { - fLocalExtents[i*2 ] = mCurrent[i]; - fLocalExtents[i*2+1] = mCurrent[i]; + fLocalExtents[i*2 ] = mCurrent[i]; + fLocalExtents[i*2+1] = mCurrent[i]; } - this->Renderer->WorldToView(fLocalExtents[0], fLocalExtents[2], fLocalExtents[4]); - this->Renderer->WorldToView(fLocalExtents[1], fLocalExtents[3], fLocalExtents[5]); - for(int i=0; i<3; i++) + this->Renderer->WorldToView(fLocalExtents[0], fLocalExtents[2], fLocalExtents[4]); + this->Renderer->WorldToView(fLocalExtents[1], fLocalExtents[3], fLocalExtents[5]); + for(int i=0; i<3; i++) { - if (i!=SliceOrientation) //SR: assumes that SliceOrientation is valid in ViewCoordinates (???) + if (i!=SliceOrientation) //SR: assumes that SliceOrientation is valid in ViewCoordinates (???) { - fLocalExtents[i*2 ] -= 0.2; - fLocalExtents[i*2+1] += 0.2; + fLocalExtents[i*2 ] -= 0.2; + fLocalExtents[i*2+1] += 0.2; } } - this->Renderer->ViewToWorld(fLocalExtents[0], fLocalExtents[2], fLocalExtents[4]); - this->Renderer->ViewToWorld(fLocalExtents[1], fLocalExtents[3], fLocalExtents[5]); + this->Renderer->ViewToWorld(fLocalExtents[0], fLocalExtents[2], fLocalExtents[4]); + this->Renderer->ViewToWorld(fLocalExtents[1], fLocalExtents[3], fLocalExtents[5]); - //Convert to image pixel coordinates (rounded) - int iLocalExtents[6]; - for(int i=0; i<3; i++) + //Convert to image pixel coordinates (rounded) + int iLocalExtents[6]; + for(int i=0; i<3; i++) { - fLocalExtents[i*2 ] = (fLocalExtents[i*2 ] - this->GetInput()->GetOrigin()[i])/this->GetInput()->GetSpacing()[i]; - fLocalExtents[i*2+1] = (fLocalExtents[i*2+1] - this->GetInput()->GetOrigin()[i])/this->GetInput()->GetSpacing()[i]; + fLocalExtents[i*2 ] = (fLocalExtents[i*2 ] - this->GetInput()->GetOrigin()[i])/this->GetInput()->GetSpacing()[i]; + fLocalExtents[i*2+1] = (fLocalExtents[i*2+1] - this->GetInput()->GetOrigin()[i])/this->GetInput()->GetSpacing()[i]; - iLocalExtents[i*2 ] = lrint(fLocalExtents[i*2 ]); - iLocalExtents[i*2+1] = lrint(fLocalExtents[i*2+1]); + iLocalExtents[i*2 ] = lrint(fLocalExtents[i*2 ]); + iLocalExtents[i*2+1] = lrint(fLocalExtents[i*2+1]); - if(iLocalExtents[i*2 ]>iLocalExtents[i*2+1]) - std::swap(iLocalExtents[i*2], iLocalExtents[i*2+1]); + if(iLocalExtents[i*2 ]>iLocalExtents[i*2+1]) + std::swap(iLocalExtents[i*2], iLocalExtents[i*2+1]); } - vtkSmartPointer voiFilter = vtkExtractVOI::New(); - voiFilter->SetInput(this->GetInput()); - voiFilter->SetVOI(iLocalExtents); + vtkSmartPointer voiFilter = vtkExtractVOI::New(); + voiFilter->SetInput(this->GetInput()); + voiFilter->SetVOI(iLocalExtents); - vtkSmartPointer accFilter = vtkImageAccumulate::New(); - accFilter->SetInput(voiFilter->GetOutput()); - accFilter->Update(); + vtkSmartPointer accFilter = vtkImageAccumulate::New(); + accFilter->SetInput(voiFilter->GetOutput()); + accFilter->Update(); - min = *(accFilter->GetMin()); - max = *(accFilter->GetMax()); + min = *(accFilter->GetMin()); + max = *(accFilter->GetMax()); } //---------------------------------------------------------------------------- diff --git a/vv/vvSlicerManager.cxx b/vv/vvSlicerManager.cxx index f2b06ab..e8bf864 100644 --- a/vv/vvSlicerManager.cxx +++ b/vv/vvSlicerManager.cxx @@ -14,9 +14,9 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html -======================================================================-====*/ -#include "vvSlicerManager.h" + ======================================================================-====*/ +#include "vvSlicerManager.h" #include "vvSlicer.h" #include "vvImage.h" #include "vvSlicerManagerCommand.h" @@ -38,981 +38,1134 @@ #include "vtkImageClip.h" #include #include - #include -//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- vvSlicerManager::vvSlicerManager(int numberOfSlicers) { - mFileName = ""; - mId = ""; - mVFName = ""; - mOverlayName = ""; - mFusionName = ""; - mVFId = ""; - mLastError = ""; - mType = UNDEFINEDIMAGETYPE; - mColorMap = 0; - mPreset = 0; - mOverlayColor = 130; - - mFusionOpacity = 70; - mFusionColorMap = 3; - mFusionWindow = 1000; - mFusionLevel = 1000; - - mReader = NULL; - mImage = NULL; - mVF=NULL; - mVectorReader = NULL; - mOverlayReader = NULL; - mFusionReader = NULL; - mLandmarks = NULL; - mLinkedId.resize(0); - - for ( int i = 0; i < numberOfSlicers; i++) + mFileName = ""; + mId = ""; + mVFName = ""; + mOverlayName = ""; + mFusionName = ""; + mVFId = ""; + mLastError = ""; + mType = UNDEFINEDIMAGETYPE; + mColorMap = 0; + mPreset = 0; + mOverlayColor = 130; + + mFusionOpacity = 70; + mFusionColorMap = 3; + mFusionWindow = 1000; + mFusionLevel = 1000; + + mReader = NULL; + mImage = NULL; + mVF=NULL; + mVectorReader = NULL; + mOverlayReader = NULL; + mFusionReader = NULL; + mLandmarks = NULL; + mLinkedId.resize(0); + + for ( int i = 0; i < numberOfSlicers; i++) { - vvSlicer *slicer = vvSlicer::New(); - mSlicers.push_back(slicer); + vvSlicer *slicer = vvSlicer::New(); + mSlicers.push_back(slicer); } } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- vvSlicerManager::~vvSlicerManager() { - for ( unsigned int i = 0; i < mSlicers.size(); i++) + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - if (mSlicers[i] != NULL) - mSlicers[i]->Delete(); + if (mSlicers[i] != NULL) + mSlicers[i]->Delete(); } - if (mReader) + if (mReader) { - delete mReader; + delete mReader; } - if (mVectorReader) + if (mVectorReader) { - delete mVectorReader; + delete mVectorReader; } - if (mOverlayReader) + if (mOverlayReader) { - delete mOverlayReader; + delete mOverlayReader; } - if (mFusionReader) + if (mFusionReader) { - delete mFusionReader; + delete mFusionReader; } - if (mLandmarks) - delete mLandmarks; + if (mLandmarks) + delete mLandmarks; } +//---------------------------------------------------------------------------- + +//------------------------------------------------------------------------------ +void vvSlicerManager::SetFilename(std::string f) { + mFileName = f; + for(unsigned int i=0; iSetFileName(f); + } +} +//------------------------------------------------------------------------------ + + +//---------------------------------------------------------------------------- void vvSlicerManager::AddContour(vvMesh::Pointer contour,bool propagate) { - for ( unsigned int i = 0; i < mSlicers.size(); i++) + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - mSlicers[i]->AddContour(contour,propagate); + mSlicers[i]->AddContour(contour,propagate); } } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::ToggleContourSuperposition() { - for ( unsigned int i = 0; i < mSlicers.size(); i++) - mSlicers[i]->ToggleContourSuperposition(); + for ( unsigned int i = 0; i < mSlicers.size(); i++) + mSlicers[i]->ToggleContourSuperposition(); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- bool vvSlicerManager::SetImage(std::string filename,LoadedImageType type) { - mFileName = filename; - mType = type; - if (mReader == NULL) - mReader = new vvImageReader; - std::vector filenames; - filenames.push_back(filename); - mReader->SetInputFilenames(filenames); - mReader->Update(type); - if (mReader->GetLastError().size() == 0) - { - mImage=mReader->GetOutput(); - for ( unsigned int i = 0; i < mSlicers.size(); i++) + mFileName = filename; + mType = type; + if (mReader == NULL) + mReader = new vvImageReader; + std::vector filenames; + filenames.push_back(filename); + mReader->SetInputFilenames(filenames); + mReader->Update(type); + if (mReader->GetLastError().size() == 0) + { + mImage=mReader->GetOutput(); + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - mSlicers[i]->SetFileName(vtksys::SystemTools::GetFilenameWithoutLastExtension(filename)); - mSlicers[i]->SetImage(mReader->GetOutput()); + mSlicers[i]->SetFileName(vtksys::SystemTools::GetFilenameWithoutLastExtension(filename)); + mSlicers[i]->SetImage(mReader->GetOutput()); } } - else + else { - mLastError = mReader->GetLastError(); - return false; + mLastError = mReader->GetLastError(); + return false; } - return true; + return true; } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::SetImage(vvImage::Pointer image) { - mImage=image; - for (unsigned int i = 0; i < mSlicers.size();i++) + mImage=image; + for (unsigned int i = 0; i < mSlicers.size();i++) { - mSlicers[i]->SetImage(image); + mSlicers[i]->SetImage(image); } } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- bool vvSlicerManager::SetImages(std::vector filenames,LoadedImageType type) { - mType = type; - std::string fileWithoutExtension = vtksys::SystemTools::GetFilenameWithoutExtension(filenames[0]); - if (type == DICOM) - fileWithoutExtension += "_dicom"; - else if (type == MERGED) - fileWithoutExtension += "_merged"; - else if (type == MERGEDWITHTIME) - fileWithoutExtension += "_merged_wt"; - - mFileName = fileWithoutExtension + vtksys::SystemTools::GetFilenameExtension(filenames[0]); - if (mReader == NULL) - mReader = new vvImageReader; - mReader->SetInputFilenames(filenames); - mReader->Update(type); - - - if (mReader->GetLastError().size() == 0) + mType = type; + std::string fileWithoutExtension = vtksys::SystemTools::GetFilenameWithoutExtension(filenames[0]); + if (type == DICOM) + fileWithoutExtension += "_dicom"; + else if (type == MERGED) + fileWithoutExtension += "_merged"; + else if (type == MERGEDWITHTIME) + fileWithoutExtension += "_merged_wt"; + + mFileName = fileWithoutExtension + vtksys::SystemTools::GetFilenameExtension(filenames[0]); + if (mReader == NULL) + mReader = new vvImageReader; + mReader->SetInputFilenames(filenames); + mReader->Update(type); + + + if (mReader->GetLastError().size() == 0) { - mImage=mReader->GetOutput(); - for ( unsigned int i = 0; i < mSlicers.size(); i++) + mImage=mReader->GetOutput(); + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - mSlicers[i]->SetFileName(fileWithoutExtension); - mSlicers[i]->SetImage(mReader->GetOutput()); + mSlicers[i]->SetFileName(fileWithoutExtension); + mSlicers[i]->SetImage(mReader->GetOutput()); } } - else + else { - mLastError = mReader->GetLastError(); - return false; + mLastError = mReader->GetLastError(); + return false; } - return true; + return true; } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- bool vvSlicerManager::SetOverlay(std::string filename,int dim, std::string component) { - mOverlayName = filename; - mOverlayComponent = component; - if (dim > mImage->GetNumberOfDimensions()) + mOverlayName = filename; + mOverlayComponent = component; + if (dim > mImage->GetNumberOfDimensions()) { - mLastError = " Overlay dimension cannot be greater then reference image!"; - return false; + mLastError = " Overlay dimension cannot be greater then reference image!"; + return false; } - if (mOverlayReader == NULL) - mOverlayReader = new vvImageReader; - std::vector filenames; - filenames.push_back(filename); - mOverlayReader->SetInputFilenames(filenames); - mOverlayReader->Update(mImage->GetNumberOfDimensions(),component.c_str(),mType); - if (mOverlayReader->GetLastError().size() == 0) + if (mOverlayReader == NULL) + mOverlayReader = new vvImageReader; + std::vector filenames; + filenames.push_back(filename); + mOverlayReader->SetInputFilenames(filenames); + mOverlayReader->Update(mImage->GetNumberOfDimensions(),component.c_str(),mType); + if (mOverlayReader->GetLastError().size() == 0) { - for ( unsigned int i = 0; i < mSlicers.size(); i++) + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - mSlicers[i]->SetOverlay(mOverlayReader->GetOutput()); + mSlicers[i]->SetOverlay(mOverlayReader->GetOutput()); } } - else + else { - mLastError = mOverlayReader->GetLastError(); - return false; + mLastError = mOverlayReader->GetLastError(); + return false; } - return true; + return true; } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- bool vvSlicerManager::SetFusion(std::string filename,int dim, std::string component) { - mFusionName = filename; - mFusionComponent = component; - if (dim > mImage->GetNumberOfDimensions()) + mFusionName = filename; + mFusionComponent = component; + if (dim > mImage->GetNumberOfDimensions()) { - mLastError = " Overlay dimension cannot be greater then reference image!"; - return false; + mLastError = " Overlay dimension cannot be greater then reference image!"; + return false; } - if (mFusionReader == NULL) - mFusionReader = new vvImageReader; - std::vector filenames; - filenames.push_back(filename); - mFusionReader->SetInputFilenames(filenames); - mFusionReader->Update(mImage->GetNumberOfDimensions(),component.c_str(),mType); - if (mFusionReader->GetLastError().size() == 0) + if (mFusionReader == NULL) + mFusionReader = new vvImageReader; + std::vector filenames; + filenames.push_back(filename); + mFusionReader->SetInputFilenames(filenames); + mFusionReader->Update(mImage->GetNumberOfDimensions(),component.c_str(),mType); + if (mFusionReader->GetLastError().size() == 0) { - for ( unsigned int i = 0; i < mSlicers.size(); i++) + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - mSlicers[i]->SetFusion(mFusionReader->GetOutput()); + mSlicers[i]->SetFusion(mFusionReader->GetOutput()); } } - else + else { - mLastError = mFusionReader->GetLastError(); - return false; + mLastError = mFusionReader->GetLastError(); + return false; } - double *fusRange = mFusionReader->GetOutput()->GetVTKImages()[0]->GetScalarRange(); - mFusionLevel = (fusRange[0]+fusRange[1])/2; - mFusionWindow = fusRange[1]-fusRange[0]; - return true; + double *fusRange = mFusionReader->GetOutput()->GetVTKImages()[0]->GetScalarRange(); + mFusionLevel = (fusRange[0]+fusRange[1])/2; + mFusionWindow = fusRange[1]-fusRange[0]; + return true; } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- bool vvSlicerManager::SetVF(std::string filename) { - if (mVectorReader == NULL) - mVectorReader = new vvImageReader; - mVectorReader->SetInputFilename(filename); - mVectorReader->Update(VECTORFIELD); - if (mVectorReader->GetLastError().size() != 0) + if (mVectorReader == NULL) + mVectorReader = new vvImageReader; + mVectorReader->SetInputFilename(filename); + mVectorReader->Update(VECTORFIELD); + if (mVectorReader->GetLastError().size() != 0) { - mLastError = mVectorReader->GetLastError(); - return false; + mLastError = mVectorReader->GetLastError(); + return false; } - else - return SetVF(mVectorReader->GetOutput(),filename); + else + return SetVF(mVectorReader->GetOutput(),filename); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- bool vvSlicerManager::SetVF(vvImage::Pointer vf,std::string filename) { - if (vf->GetNumberOfDimensions() > mImage->GetNumberOfDimensions()) + if (vf->GetNumberOfDimensions() > mImage->GetNumberOfDimensions()) { - mLastError = " Vector field dimension cannot be greater then reference image!"; - return false; + mLastError = " Vector field dimension cannot be greater then reference image!"; + return false; } - mVF=vf; - mVFName = filename; - for ( unsigned int i = 0; i < mSlicers.size(); i++) + mVF=vf; + mVFName = filename; + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - mSlicers[i]->SetVF(vf); + mSlicers[i]->SetVF(vf); } - return true; + return true; } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::SetExtractedImage(std::string filename,vvImage::Pointer image, int slice) { - mFileName = filename; - mImage = vvImage::New(); - if (image->GetNumberOfDimensions() == 4) + mFileName = filename; + mImage = vvImage::New(); + if (image->GetNumberOfDimensions() == 4) { - mImage->AddImage(image->GetVTKImages()[slice]); - for ( unsigned int i = 0; i < mSlicers.size(); i++) + mImage->AddImage(image->GetVTKImages()[slice]); + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - mSlicers[i]->SetFileName(vtksys::SystemTools::GetFilenameWithoutLastExtension(filename)); - mSlicers[i]->SetImage(mImage); + mSlicers[i]->SetFileName(vtksys::SystemTools::GetFilenameWithoutLastExtension(filename)); + mSlicers[i]->SetImage(mImage); } } - else + else { - vtkImageClip* clipper = vtkImageClip::New(); - int extent[6]; - image->GetVTKImages()[0]->GetWholeExtent(extent); - clipper->SetInput(image->GetVTKImages()[0]); - clipper->SetOutputWholeExtent(extent[0],extent[1],extent[2],extent[3],slice,slice); - clipper->Update(); - mImage->AddImage(clipper->GetOutput()); - for ( unsigned int i = 0; i < mSlicers.size(); i++) + vtkImageClip* clipper = vtkImageClip::New(); + int extent[6]; + image->GetVTKImages()[0]->GetWholeExtent(extent); + clipper->SetInput(image->GetVTKImages()[0]); + clipper->SetOutputWholeExtent(extent[0],extent[1],extent[2],extent[3],slice,slice); + clipper->Update(); + mImage->AddImage(clipper->GetOutput()); + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - mSlicers[i]->SetFileName(vtksys::SystemTools::GetFilenameWithoutLastExtension(filename)); - mSlicers[i]->SetImage(mImage); + mSlicers[i]->SetFileName(vtksys::SystemTools::GetFilenameWithoutLastExtension(filename)); + mSlicers[i]->SetImage(mImage); } - clipper->Delete(); + clipper->Delete(); } } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- vvSlicer* vvSlicerManager::GetSlicer(int i) { - return mSlicers[i]; + return mSlicers[i]; } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::UpdateSlicer(int num, bool state) { - if (mSlicers[num]->GetImage()) - mSlicers[num]->SetDisplayMode(state); + if (mSlicers[num]->GetImage()) + mSlicers[num]->SetDisplayMode(state); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::SetSlicerWindow(int i, vtkRenderWindow* RW) { - mSlicers[i]->SetRenderWindow(i,RW); + mSlicers[i]->SetRenderWindow(i,RW); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::SetInteractorStyleNavigator(int i, vtkInteractorStyle* style) { - vvSlicerManagerCommand *smc = vvSlicerManagerCommand::New(); - smc->SM = this; - smc->SetSlicerNumber(i); - mSlicers[i]->GetRenderWindow()->GetInteractor()->SetInteractorStyle(style); + vvSlicerManagerCommand *smc = vvSlicerManagerCommand::New(); + smc->SM = this; + smc->SetSlicerNumber(i); + mSlicers[i]->GetRenderWindow()->GetInteractor()->SetInteractorStyle(style); - mSlicers[i]->GetRenderWindow()->GetInteractor()-> + mSlicers[i]->GetRenderWindow()->GetInteractor()-> GetInteractorStyle()->AddObserver(vtkCommand::KeyPressEvent, smc); - mSlicers[i]->GetRenderWindow()->GetInteractor()-> + mSlicers[i]->GetRenderWindow()->GetInteractor()-> GetInteractorStyle()->AddObserver(vtkCommand::WindowLevelEvent, smc); - mSlicers[i]->GetRenderWindow()->GetInteractor()-> + mSlicers[i]->GetRenderWindow()->GetInteractor()-> GetInteractorStyle()->AddObserver(vtkCommand::EndWindowLevelEvent, smc); - mSlicers[i]->GetRenderWindow()->GetInteractor()-> + mSlicers[i]->GetRenderWindow()->GetInteractor()-> GetInteractorStyle()->AddObserver(vtkCommand::StartWindowLevelEvent, smc); - mSlicers[i]->GetRenderWindow()->GetInteractor()-> + mSlicers[i]->GetRenderWindow()->GetInteractor()-> GetInteractorStyle()->AddObserver(vtkCommand::PickEvent, smc); - mSlicers[i]->GetRenderWindow()->GetInteractor()-> + mSlicers[i]->GetRenderWindow()->GetInteractor()-> GetInteractorStyle()->AddObserver(vtkCommand::StartPickEvent, smc); - mSlicers[i]->GetRenderWindow()->GetInteractor()-> + mSlicers[i]->GetRenderWindow()->GetInteractor()-> GetInteractorStyle()->AddObserver(vtkCommand::LeaveEvent, smc); - mSlicers[i]->GetRenderWindow()->GetInteractor()-> + mSlicers[i]->GetRenderWindow()->GetInteractor()-> GetInteractorStyle()->AddObserver(vtkCommand::UserEvent, smc); - mSlicers[i]->GetRenderWindow()->GetInteractor()-> + mSlicers[i]->GetRenderWindow()->GetInteractor()-> GetInteractorStyle()->AddObserver(vtkCommand::MouseWheelForwardEvent, smc); - mSlicers[i]->GetRenderWindow()->GetInteractor()-> + mSlicers[i]->GetRenderWindow()->GetInteractor()-> GetInteractorStyle()->AddObserver(vtkCommand::MouseWheelBackwardEvent, smc); - smc->Delete(); + smc->Delete(); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::SetTSlice(int slice) { - if (slice < 0) - slice = 0; - else if (slice > mSlicers[0]->GetTMax()) - slice = mSlicers[0]->GetTMax(); - if (mLandmarks) - mLandmarks->SetTime(slice); - for ( unsigned int i = 0; i < mSlicers.size(); i++) + if (slice < 0) + slice = 0; + else if (slice > mSlicers[0]->GetTMax()) + slice = mSlicers[0]->GetTMax(); + if (mLandmarks) + mLandmarks->SetTime(slice); + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - mSlicers[i]->SetTSlice(slice); - if (mSlicers[i]->GetImageActor()->GetVisibility()) - UpdateTSlice(i); + mSlicers[i]->SetTSlice(slice); + if (mSlicers[i]->GetImageActor()->GetVisibility()) + UpdateTSlice(i); } } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::SetNextTSlice(int originating_slicer) { - int t = mSlicers[0]->GetTSlice(); - t++; - if (t > mSlicers[0]->GetTMax()) - t = 0; - emit UpdateTSlice(originating_slicer,t); + int t = mSlicers[0]->GetTSlice(); + t++; + if (t > mSlicers[0]->GetTMax()) + t = 0; + emit UpdateTSlice(originating_slicer,t); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::SetPreviousTSlice(int originating_slicer) { - int t = mSlicers[0]->GetTSlice(); - t--; - if (t < 0) - t = mSlicers[0]->GetTMax(); - emit UpdateTSlice(originating_slicer,t); + int t = mSlicers[0]->GetTSlice(); + t--; + if (t < 0) + t = mSlicers[0]->GetTMax(); + emit UpdateTSlice(originating_slicer,t); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::ToggleInterpolation() { - bool interpolate=!(mSlicers[0]->GetImageActor()->GetInterpolate()); - for ( unsigned int i = 0; i < mSlicers.size(); i++) + bool interpolate=!(mSlicers[0]->GetImageActor()->GetInterpolate()); + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - mSlicers[i]->GetImageActor()->SetInterpolate(interpolate); + mSlicers[i]->GetImageActor()->SetInterpolate(interpolate); } } +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- void vvSlicerManager::SetTSliceInSlicer(int tslice, int slicer) { - if (tslice < 0) - tslice = 0; - else if (tslice > mSlicers[slicer]->GetTMax()) - tslice = mSlicers[slicer]->GetTMax(); - if (mLandmarks) - mLandmarks->SetTime(tslice); - mSlicers[slicer]->SetTSlice(tslice); - if (mSlicers[slicer]->GetImageActor()->GetVisibility()) - UpdateTSlice(slicer); + if (tslice < 0) + tslice = 0; + else if (tslice > mSlicers[slicer]->GetTMax()) + tslice = mSlicers[slicer]->GetTMax(); + if (mLandmarks) + mLandmarks->SetTime(tslice); + mSlicers[slicer]->SetTSlice(tslice); + if (mSlicers[slicer]->GetImageActor()->GetVisibility()) + UpdateTSlice(slicer); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::SetColorWindow(double s) { - for ( unsigned int i = 0; i < mSlicers.size(); i++) + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - mSlicers[i]->SetColorWindow(s); + mSlicers[i]->SetColorWindow(s); } } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::SetColorLevel(double s) { - for ( unsigned int i = 0; i < mSlicers.size(); i++) + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - mSlicers[i]->SetColorLevel(s); + mSlicers[i]->SetColorLevel(s); } } +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- void vvSlicerManager::SetCursorVisibility(int s) { - for ( unsigned int i = 0; i < mSlicers.size(); i++) + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - mSlicers[i]->SetCursorVisibility(s); + mSlicers[i]->SetCursorVisibility(s); } } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::SetOpacity(int i, double factor) { - mSlicers[i]->SetOpacity(1/factor); + mSlicers[i]->SetOpacity(1/factor); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::UpdateViews(int current,int slicer) { - double x = (mSlicers[slicer]->GetCurrentPosition()[0] - mSlicers[slicer]->GetInput()->GetOrigin()[0]) - /mSlicers[slicer]->GetInput()->GetSpacing()[0]; - double y = (mSlicers[slicer]->GetCurrentPosition()[1] - mSlicers[slicer]->GetInput()->GetOrigin()[1]) - /mSlicers[slicer]->GetInput()->GetSpacing()[1]; - double z = (mSlicers[slicer]->GetCurrentPosition()[2] - mSlicers[slicer]->GetInput()->GetOrigin()[2]) - /mSlicers[slicer]->GetInput()->GetSpacing()[2]; - - if (x >= mSlicers[slicer]->GetInput()->GetWholeExtent()[0] && - x <= mSlicers[slicer]->GetInput()->GetWholeExtent()[1] && - y >= mSlicers[slicer]->GetInput()->GetWholeExtent()[2] && - y <= mSlicers[slicer]->GetInput()->GetWholeExtent()[3] && - z >= mSlicers[slicer]->GetInput()->GetWholeExtent()[4] && - z <= mSlicers[slicer]->GetInput()->GetWholeExtent()[5]) + double x = (mSlicers[slicer]->GetCurrentPosition()[0] - mSlicers[slicer]->GetInput()->GetOrigin()[0]) + /mSlicers[slicer]->GetInput()->GetSpacing()[0]; + double y = (mSlicers[slicer]->GetCurrentPosition()[1] - mSlicers[slicer]->GetInput()->GetOrigin()[1]) + /mSlicers[slicer]->GetInput()->GetSpacing()[1]; + double z = (mSlicers[slicer]->GetCurrentPosition()[2] - mSlicers[slicer]->GetInput()->GetOrigin()[2]) + /mSlicers[slicer]->GetInput()->GetSpacing()[2]; + + if (x >= mSlicers[slicer]->GetInput()->GetWholeExtent()[0] && + x <= mSlicers[slicer]->GetInput()->GetWholeExtent()[1] && + y >= mSlicers[slicer]->GetInput()->GetWholeExtent()[2] && + y <= mSlicers[slicer]->GetInput()->GetWholeExtent()[3] && + z >= mSlicers[slicer]->GetInput()->GetWholeExtent()[4] && + z <= mSlicers[slicer]->GetInput()->GetWholeExtent()[5]) { - mSlicers[slicer]->UpdateCursorPosition(); - mSlicers[slicer]->SetCursorColor(10,212,255); + mSlicers[slicer]->UpdateCursorPosition(); + mSlicers[slicer]->SetCursorColor(10,212,255); - switch (mSlicers[slicer]->GetSliceOrientation()) + switch (mSlicers[slicer]->GetSliceOrientation()) { case vtkImageViewer2::SLICE_ORIENTATION_XY: - if (mSlicers[slicer]->GetSlice() == (int)floor(z)) - mSlicers[slicer]->Render(); - else - mSlicers[slicer]->SetSlice((int)floor(z)); - break; + if (mSlicers[slicer]->GetSlice() == (int)floor(z)) + mSlicers[slicer]->Render(); + else + mSlicers[slicer]->SetSlice((int)floor(z)); + break; case vtkImageViewer2::SLICE_ORIENTATION_XZ: - if (mSlicers[slicer]->GetSlice() == (int)floor(y)) - mSlicers[slicer]->Render(); - else - mSlicers[slicer]->SetSlice((int)floor(y)); - break; + if (mSlicers[slicer]->GetSlice() == (int)floor(y)) + mSlicers[slicer]->Render(); + else + mSlicers[slicer]->SetSlice((int)floor(y)); + break; case vtkImageViewer2::SLICE_ORIENTATION_YZ: - if (mSlicers[slicer]->GetSlice() == (int)floor(x)) - mSlicers[slicer]->Render(); - else - mSlicers[slicer]->SetSlice((int)floor(x)); - break; + if (mSlicers[slicer]->GetSlice() == (int)floor(x)) + mSlicers[slicer]->Render(); + else + mSlicers[slicer]->SetSlice((int)floor(x)); + break; } - for ( unsigned int i = 0; i < mSlicers.size(); i++) + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - if (i != (unsigned int)slicer && mSlicers[i]->GetImageActor()->GetVisibility() - && mSlicers[i]->GetRenderWindow()->GetSize()[0] > 2 - && mSlicers[i]->GetRenderWindow()->GetSize()[1] > 2) + if (i != (unsigned int)slicer && mSlicers[i]->GetImageActor()->GetVisibility() + && mSlicers[i]->GetRenderWindow()->GetSize()[0] > 2 + && mSlicers[i]->GetRenderWindow()->GetSize()[1] > 2) { - mSlicers[i]->SetCurrentPosition(mSlicers[slicer]->GetCurrentPosition()[0], - mSlicers[slicer]->GetCurrentPosition()[1], - mSlicers[slicer]->GetCurrentPosition()[2], - mSlicers[slicer]->GetTSlice()); - mSlicers[i]->UpdateCursorPosition(); - if (current) //do not display corner annotation if image is the one picked + mSlicers[i]->SetCurrentPosition(mSlicers[slicer]->GetCurrentPosition()[0], + mSlicers[slicer]->GetCurrentPosition()[1], + mSlicers[slicer]->GetCurrentPosition()[2], + mSlicers[slicer]->GetTSlice()); + mSlicers[i]->UpdateCursorPosition(); + if (current) //do not display corner annotation if image is the one picked { - mSlicers[i]->SetCurrentPosition(-VTK_DOUBLE_MAX,-VTK_DOUBLE_MAX, - -VTK_DOUBLE_MAX, mSlicers[slicer]->GetTSlice()); - mSlicers[i]->SetCursorColor(255,10,212); + mSlicers[i]->SetCurrentPosition(-VTK_DOUBLE_MAX,-VTK_DOUBLE_MAX, + -VTK_DOUBLE_MAX, mSlicers[slicer]->GetTSlice()); + mSlicers[i]->SetCursorColor(255,10,212); } - else + else { - mSlicers[i]->SetCursorColor(150,10,282); + mSlicers[i]->SetCursorColor(150,10,282); } - switch (mSlicers[i]->GetSliceOrientation()) + switch (mSlicers[i]->GetSliceOrientation()) { case vtkImageViewer2::SLICE_ORIENTATION_XY: - if (mSlicers[i]->GetSlice() == (int)floor(z)) - mSlicers[i]->Render(); - else - mSlicers[i]->SetSlice((int)floor(z)); - break; + if (mSlicers[i]->GetSlice() == (int)floor(z)) + mSlicers[i]->Render(); + else + mSlicers[i]->SetSlice((int)floor(z)); + break; case vtkImageViewer2::SLICE_ORIENTATION_XZ: - if (mSlicers[i]->GetSlice() == (int)floor(y)) - mSlicers[i]->Render(); - else - mSlicers[i]->SetSlice((int)floor(y)); - break; + if (mSlicers[i]->GetSlice() == (int)floor(y)) + mSlicers[i]->Render(); + else + mSlicers[i]->SetSlice((int)floor(y)); + break; case vtkImageViewer2::SLICE_ORIENTATION_YZ: - if (mSlicers[i]->GetSlice() == (int)floor(x)) - mSlicers[i]->Render(); - else - mSlicers[i]->SetSlice((int)floor(x)); - break; + if (mSlicers[i]->GetSlice() == (int)floor(x)) + mSlicers[i]->Render(); + else + mSlicers[i]->SetSlice((int)floor(x)); + break; } - UpdateSlice(i); - UpdateTSlice(i); + UpdateSlice(i); + UpdateTSlice(i); } } } } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::UpdateLinked(int slicer) { - double x = (mSlicers[slicer]->GetCurrentPosition()[0] - mSlicers[slicer]->GetInput()->GetOrigin()[0]) - /mSlicers[slicer]->GetInput()->GetSpacing()[0]; - double y = (mSlicers[slicer]->GetCurrentPosition()[1] - mSlicers[slicer]->GetInput()->GetOrigin()[1]) - /mSlicers[slicer]->GetInput()->GetSpacing()[1]; - double z = (mSlicers[slicer]->GetCurrentPosition()[2] - mSlicers[slicer]->GetInput()->GetOrigin()[2]) - /mSlicers[slicer]->GetInput()->GetSpacing()[2]; - - if (x >= mSlicers[slicer]->GetInput()->GetWholeExtent()[0] && - x <= mSlicers[slicer]->GetInput()->GetWholeExtent()[1] && - y >= mSlicers[slicer]->GetInput()->GetWholeExtent()[2] && - y <= mSlicers[slicer]->GetInput()->GetWholeExtent()[3] && - z >= mSlicers[slicer]->GetInput()->GetWholeExtent()[4] && - z <= mSlicers[slicer]->GetInput()->GetWholeExtent()[5]) - { - for (std::list::const_iterator i = mLinkedId.begin(); i != mLinkedId.end(); i++) + double x = (mSlicers[slicer]->GetCurrentPosition()[0] - mSlicers[slicer]->GetInput()->GetOrigin()[0]) + /mSlicers[slicer]->GetInput()->GetSpacing()[0]; + double y = (mSlicers[slicer]->GetCurrentPosition()[1] - mSlicers[slicer]->GetInput()->GetOrigin()[1]) + /mSlicers[slicer]->GetInput()->GetSpacing()[1]; + double z = (mSlicers[slicer]->GetCurrentPosition()[2] - mSlicers[slicer]->GetInput()->GetOrigin()[2]) + /mSlicers[slicer]->GetInput()->GetSpacing()[2]; + + if (x >= mSlicers[slicer]->GetInput()->GetWholeExtent()[0] && + x <= mSlicers[slicer]->GetInput()->GetWholeExtent()[1] && + y >= mSlicers[slicer]->GetInput()->GetWholeExtent()[2] && + y <= mSlicers[slicer]->GetInput()->GetWholeExtent()[3] && + z >= mSlicers[slicer]->GetInput()->GetWholeExtent()[4] && + z <= mSlicers[slicer]->GetInput()->GetWholeExtent()[5]) + { + for (std::list::const_iterator i = mLinkedId.begin(); i != mLinkedId.end(); i++) { - emit UpdateLinkManager(*i, slicer,mSlicers[slicer]->GetCurrentPosition()[0], - mSlicers[slicer]->GetCurrentPosition()[1], - mSlicers[slicer]->GetCurrentPosition()[2],mSlicers[slicer]->GetTSlice()); + emit UpdateLinkManager(*i, slicer,mSlicers[slicer]->GetCurrentPosition()[0], + mSlicers[slicer]->GetCurrentPosition()[1], + mSlicers[slicer]->GetCurrentPosition()[2],mSlicers[slicer]->GetTSlice()); } } } +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- double vvSlicerManager::GetColorWindow() { - if (mSlicers.size()) - return mSlicers[0]->GetColorWindow(); - return -1; + if (mSlicers.size()) + return mSlicers[0]->GetColorWindow(); + return -1; } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- double vvSlicerManager::GetColorLevel() { - if (mSlicers.size()) - return mSlicers[0]->GetColorLevel(); - return -1; + if (mSlicers.size()) + return mSlicers[0]->GetColorLevel(); + return -1; } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::Render() { - for ( unsigned int i = 0; i < mSlicers.size(); i++) + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - mSlicers[i]->Render(); + mSlicers[i]->Render(); } } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::GenerateDefaultLookupTable() { - SetPreset(mPreset); - SetColorMap(mColorMap); + SetPreset(mPreset); + SetColorMap(mColorMap); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::Reload() { - mReader->Update(mType); - mImage=mReader->GetOutput(); - for ( unsigned int i = 0; i < mSlicers.size(); i++) + mReader->Update(mType); + mImage=mReader->GetOutput(); + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - mSlicers[i]->SetImage(mImage); + mSlicers[i]->SetImage(mImage); } } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::ReloadFusion() { - mFusionReader->Update(); - for ( unsigned int i = 0; i < mSlicers.size(); i++) + mFusionReader->Update(); + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - mSlicers[i]->SetFusion(mFusionReader->GetOutput()); - mSlicers[i]->Render(); + mSlicers[i]->SetFusion(mFusionReader->GetOutput()); + mSlicers[i]->Render(); } } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::ReloadOverlay() { - mOverlayReader->Update(); - for ( unsigned int i = 0; i < mSlicers.size(); i++) + mOverlayReader->Update(); + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - mSlicers[i]->SetOverlay(mOverlayReader->GetOutput()); - mSlicers[i]->Render(); + mSlicers[i]->SetOverlay(mOverlayReader->GetOutput()); + mSlicers[i]->Render(); } } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::ReloadVF() { - mVectorReader->Update(VECTORFIELD); //deletes the old images through the VF::Init() function - mVF=mVectorReader->GetOutput(); - for ( unsigned int i = 0; i < mSlicers.size(); i++) + mVectorReader->Update(VECTORFIELD); //deletes the old images through the VF::Init() function + mVF=mVectorReader->GetOutput(); + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - mSlicers[i]->SetVF(mVF); - mSlicers[i]->Render(); + mSlicers[i]->SetVF(mVF); + mSlicers[i]->Render(); } } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::RemoveActor(const std::string& actor_type, int overlay_index) { - for (unsigned int i = 0; i < mSlicers.size();i++) + for (unsigned int i = 0; i < mSlicers.size();i++) { - mSlicers[i]->RemoveActor(actor_type,overlay_index); + mSlicers[i]->RemoveActor(actor_type,overlay_index); } - if (actor_type=="vector") + if (actor_type=="vector") { - mVF=NULL; - if (mVectorReader) { - delete mVectorReader; - mVectorReader=NULL; - } + mVF=NULL; + if (mVectorReader) { + delete mVectorReader; + mVectorReader=NULL; + } } } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::RemoveActors() { - ///This method leaks a few objects. See RemoveActor for what a correct implementation would look like - for ( unsigned int i = 0; i < mSlicers.size(); i++) + ///This method leaks a few objects. See RemoveActor for what a correct implementation would look like + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - mSlicers[i]->SetDisplayMode(0); - mSlicers[i]->GetRenderer()->RemoveActor(mSlicers[i]->GetImageActor()); + mSlicers[i]->SetDisplayMode(0); + mSlicers[i]->GetRenderer()->RemoveActor(mSlicers[i]->GetImageActor()); } } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::UpdateInfoOnCursorPosition(int slicer) { -// int view = mSlicers[slicer]->GetSliceOrientation(); -// int slice = mSlicers[slicer]->GetSlice(); - double x = mSlicers[slicer]->GetCursorPosition()[0]; - double y = mSlicers[slicer]->GetCursorPosition()[1]; - double z = mSlicers[slicer]->GetCursorPosition()[2]; - double X = (x - mSlicers[slicer]->GetInput()->GetOrigin()[0])/ - mSlicers[slicer]->GetInput()->GetSpacing()[0]; - double Y = (y - mSlicers[slicer]->GetInput()->GetOrigin()[1])/ - mSlicers[slicer]->GetInput()->GetSpacing()[1]; - double Z = (z - mSlicers[slicer]->GetInput()->GetOrigin()[2])/ - mSlicers[slicer]->GetInput()->GetSpacing()[2]; - double value = -VTK_DOUBLE_MAX; - int displayVec = 0; - double xVec=0, yVec=0, zVec=0, valueVec=0; - int displayOver = 0; - int displayFus = 0; - double valueOver=0, valueFus=0; - if (X >= mSlicers[slicer]->GetInput()->GetWholeExtent()[0] && - X <= mSlicers[slicer]->GetInput()->GetWholeExtent()[1] && - Y >= mSlicers[slicer]->GetInput()->GetWholeExtent()[2] && - Y <= mSlicers[slicer]->GetInput()->GetWholeExtent()[3] && - Z >= mSlicers[slicer]->GetInput()->GetWholeExtent()[4] && - Z <= mSlicers[slicer]->GetInput()->GetWholeExtent()[5]) - { - value = mSlicers[slicer]->GetInput()->GetScalarComponentAsDouble( - (int)floor(X), - (int)floor(Y), - (int)floor(Z),0); - if (mSlicers[slicer]->GetVFActor() && mSlicers[slicer]->GetVFActor()->GetVisibility()) + // int view = mSlicers[slicer]->GetSliceOrientation(); + // int slice = mSlicers[slicer]->GetSlice(); + double x = mSlicers[slicer]->GetCursorPosition()[0]; + double y = mSlicers[slicer]->GetCursorPosition()[1]; + double z = mSlicers[slicer]->GetCursorPosition()[2]; + double X = (x - mSlicers[slicer]->GetInput()->GetOrigin()[0])/ + mSlicers[slicer]->GetInput()->GetSpacing()[0]; + double Y = (y - mSlicers[slicer]->GetInput()->GetOrigin()[1])/ + mSlicers[slicer]->GetInput()->GetSpacing()[1]; + double Z = (z - mSlicers[slicer]->GetInput()->GetOrigin()[2])/ + mSlicers[slicer]->GetInput()->GetSpacing()[2]; + double value = -VTK_DOUBLE_MAX; + int displayVec = 0; + double xVec=0, yVec=0, zVec=0, valueVec=0; + int displayOver = 0; + int displayFus = 0; + double valueOver=0, valueFus=0; + if (X >= mSlicers[slicer]->GetInput()->GetWholeExtent()[0] && + X <= mSlicers[slicer]->GetInput()->GetWholeExtent()[1] && + Y >= mSlicers[slicer]->GetInput()->GetWholeExtent()[2] && + Y <= mSlicers[slicer]->GetInput()->GetWholeExtent()[3] && + Z >= mSlicers[slicer]->GetInput()->GetWholeExtent()[4] && + Z <= mSlicers[slicer]->GetInput()->GetWholeExtent()[5]) + { + value = mSlicers[slicer]->GetInput()->GetScalarComponentAsDouble( + (int)floor(X), + (int)floor(Y), + (int)floor(Z),0); + if (mSlicers[slicer]->GetVFActor() && mSlicers[slicer]->GetVFActor()->GetVisibility()) { - displayVec = 1; - unsigned int currentTime = mSlicers[slicer]->GetTSlice(); - vtkImageData *vf = NULL; + displayVec = 1; + unsigned int currentTime = mSlicers[slicer]->GetTSlice(); + vtkImageData *vf = NULL; - if (mSlicers[slicer]->GetVF()->GetVTKImages().size() > currentTime) - vf = mSlicers[slicer]->GetVF()->GetVTKImages()[currentTime]; - else - vf = mSlicers[slicer]->GetVF()->GetVTKImages()[0]; + if (mSlicers[slicer]->GetVF()->GetVTKImages().size() > currentTime) + vf = mSlicers[slicer]->GetVF()->GetVTKImages()[currentTime]; + else + vf = mSlicers[slicer]->GetVF()->GetVTKImages()[0]; - if (vf) + if (vf) { - double Xvf = (x - vf->GetOrigin()[0])/ vf->GetSpacing()[0]; - double Yvf = (y - vf->GetOrigin()[1])/ vf->GetSpacing()[1]; - double Zvf = (z - vf->GetOrigin()[2])/ vf->GetSpacing()[2]; - xVec = vf->GetScalarComponentAsDouble( (int)floor(Xvf), (int)floor(Yvf), (int)floor(Zvf),0); - yVec = vf->GetScalarComponentAsDouble( (int)floor(Xvf), (int)floor(Yvf), (int)floor(Zvf),1); - zVec = vf->GetScalarComponentAsDouble( (int)floor(Xvf), (int)floor(Yvf), (int)floor(Zvf),2); - valueVec = sqrt(xVec*xVec + yVec*yVec + zVec*zVec); + double Xvf = (x - vf->GetOrigin()[0])/ vf->GetSpacing()[0]; + double Yvf = (y - vf->GetOrigin()[1])/ vf->GetSpacing()[1]; + double Zvf = (z - vf->GetOrigin()[2])/ vf->GetSpacing()[2]; + xVec = vf->GetScalarComponentAsDouble( (int)floor(Xvf), (int)floor(Yvf), (int)floor(Zvf),0); + yVec = vf->GetScalarComponentAsDouble( (int)floor(Xvf), (int)floor(Yvf), (int)floor(Zvf),1); + zVec = vf->GetScalarComponentAsDouble( (int)floor(Xvf), (int)floor(Yvf), (int)floor(Zvf),2); + valueVec = sqrt(xVec*xVec + yVec*yVec + zVec*zVec); } } - if (mSlicers[slicer]->GetOverlayActor() && mSlicers[slicer]->GetOverlayActor()->GetVisibility()) + if (mSlicers[slicer]->GetOverlayActor() && mSlicers[slicer]->GetOverlayActor()->GetVisibility()) { - displayOver = 1; - double Xover = (x - mSlicers[slicer]->GetOverlay()->GetOrigin()[0]) - /mSlicers[slicer]->GetOverlay()->GetSpacing()[0]; - double Yover = (y - mSlicers[slicer]->GetOverlay()->GetOrigin()[1]) - /mSlicers[slicer]->GetOverlay()->GetSpacing()[1]; - double Zover = (z - mSlicers[slicer]->GetOverlay()->GetOrigin()[2]) - /mSlicers[slicer]->GetOverlay()->GetSpacing()[2]; - if (Xover >= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[0] && - Xover <= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[1] && - Yover >= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[2] && - Yover <= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[3] && - Zover >= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[4] && - Zover <= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[5]) + displayOver = 1; + double Xover = (x - mSlicers[slicer]->GetOverlay()->GetOrigin()[0]) + /mSlicers[slicer]->GetOverlay()->GetSpacing()[0]; + double Yover = (y - mSlicers[slicer]->GetOverlay()->GetOrigin()[1]) + /mSlicers[slicer]->GetOverlay()->GetSpacing()[1]; + double Zover = (z - mSlicers[slicer]->GetOverlay()->GetOrigin()[2]) + /mSlicers[slicer]->GetOverlay()->GetSpacing()[2]; + if (Xover >= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[0] && + Xover <= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[1] && + Yover >= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[2] && + Yover <= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[3] && + Zover >= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[4] && + Zover <= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[5]) { - valueOver = static_cast(mSlicers[slicer]->GetOverlayMapper()->GetInput())-> - GetScalarComponentAsDouble( - (int)floor(Xover), - (int)floor(Yover), - (int)floor(Zover),0); + valueOver = static_cast(mSlicers[slicer]->GetOverlayMapper()->GetInput())-> + GetScalarComponentAsDouble( + (int)floor(Xover), + (int)floor(Yover), + (int)floor(Zover),0); } } - if (mSlicers[slicer]->GetFusionActor() && mSlicers[slicer]->GetFusionActor()->GetVisibility()) + if (mSlicers[slicer]->GetFusionActor() && mSlicers[slicer]->GetFusionActor()->GetVisibility()) { - displayFus = 1; - double Xfus = (x - mSlicers[slicer]->GetFusion()->GetOrigin()[0]) - /mSlicers[slicer]->GetFusion()->GetSpacing()[0]; - double Yfus = (y - mSlicers[slicer]->GetFusion()->GetOrigin()[1]) - /mSlicers[slicer]->GetFusion()->GetSpacing()[1]; - double Zfus = (z - mSlicers[slicer]->GetFusion()->GetOrigin()[2]) - /mSlicers[slicer]->GetFusion()->GetSpacing()[2]; - if (Xfus >= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[0] && - Xfus <= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[1] && - Yfus >= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[2] && - Yfus <= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[3] && - Zfus >= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[4] && - Zfus <= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[5]) + displayFus = 1; + double Xfus = (x - mSlicers[slicer]->GetFusion()->GetOrigin()[0]) + /mSlicers[slicer]->GetFusion()->GetSpacing()[0]; + double Yfus = (y - mSlicers[slicer]->GetFusion()->GetOrigin()[1]) + /mSlicers[slicer]->GetFusion()->GetSpacing()[1]; + double Zfus = (z - mSlicers[slicer]->GetFusion()->GetOrigin()[2]) + /mSlicers[slicer]->GetFusion()->GetSpacing()[2]; + if (Xfus >= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[0] && + Xfus <= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[1] && + Yfus >= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[2] && + Yfus <= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[3] && + Zfus >= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[4] && + Zfus <= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[5]) { - valueFus = static_cast(mSlicers[slicer]->GetFusionMapper()->GetInput())-> - GetScalarComponentAsDouble( - (int)floor(Xfus), - (int)floor(Yfus), - (int)floor(Zfus),0); + valueFus = static_cast(mSlicers[slicer]->GetFusionMapper()->GetInput())-> + GetScalarComponentAsDouble( + (int)floor(Xfus), + (int)floor(Yfus), + (int)floor(Zfus),0); } } - emit UpdatePosition(mSlicers[slicer]->GetCursorVisibility(), - x,y,z,X,Y,Z,value); - emit UpdateVector(displayVec,xVec, yVec, zVec, valueVec); - emit UpdateOverlay(displayOver,valueOver,value); - emit UpdateFusion(displayFus,valueFus); - for (unsigned int i = 0; i < mSlicers.size(); i++) + emit UpdatePosition(mSlicers[slicer]->GetCursorVisibility(), + x,y,z,X,Y,Z,value); + emit UpdateVector(displayVec,xVec, yVec, zVec, valueVec); + emit UpdateOverlay(displayOver,valueOver,value); + emit UpdateFusion(displayFus,valueFus); + for (unsigned int i = 0; i < mSlicers.size(); i++) { - if (mSlicers[i]->GetImageActor()->GetVisibility() == 1) - emit UpdateWindows(i,mSlicers[i]->GetSliceOrientation(),mSlicers[i]->GetSlice()); - else - emit UpdateWindows(i,-1,-1); + if (mSlicers[i]->GetImageActor()->GetVisibility() == 1) + emit UpdateWindows(i,mSlicers[i]->GetSliceOrientation(),mSlicers[i]->GetSlice()); + else + emit UpdateWindows(i,-1,-1); } } } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::Activated() { - emit currentImageChanged(mId); + emit currentImageChanged(mId); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::UpdateWindowLevel() { - emit WindowLevelChanged(mSlicers[0]->GetColorWindow(),mSlicers[0]->GetColorLevel(),mPreset,mColorMap); + emit WindowLevelChanged(mSlicers[0]->GetColorWindow(),mSlicers[0]->GetColorLevel(),mPreset,mColorMap); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::UpdateSlice(int slicer) { - emit UpdateSlice(slicer, mSlicers[slicer]->GetSlice()); + emit UpdateSlice(slicer, mSlicers[slicer]->GetSlice()); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::UpdateTSlice(int slicer) { - emit UpdateTSlice(slicer,mSlicers[0]->GetTSlice()); + emit UpdateTSlice(slicer,mSlicers[0]->GetTSlice()); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::UpdateSliceRange(int slicer) { - emit UpdateSliceRange(slicer, - mSlicers[slicer]->GetSliceRange()[0], mSlicers[slicer]->GetSliceRange()[1], - 0,mSlicers[slicer]->GetTMax()); + emit UpdateSliceRange(slicer, + mSlicers[slicer]->GetSliceRange()[0], mSlicers[slicer]->GetSliceRange()[1], + 0,mSlicers[slicer]->GetTMax()); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::SetPreset(int preset) { - //vtkLookupTable* LUT = static_cast(mSlicers[0]->GetWindowLevel()->GetLookupTable()); - double window = mSlicers[0]->GetColorWindow(); - double level = mSlicers[0]->GetColorLevel(); + //vtkLookupTable* LUT = static_cast(mSlicers[0]->GetWindowLevel()->GetLookupTable()); + double window = mSlicers[0]->GetColorWindow(); + double level = mSlicers[0]->GetColorLevel(); - std::string component_type=mImage->GetScalarTypeAsString(); - switch (preset) + std::string component_type=mImage->GetScalarTypeAsString(); + switch (preset) { case 0: - if (component_type == "unsigned_char") + if (component_type == "unsigned_char") { - window = 255; - level = 127; + window = 255; + level = 127; } - else if (component_type == "short") + else if (component_type == "short") { - window = 2000; - level = 0; + window = 2000; + level = 0; } - else + else { - double range[2]; - mImage->GetScalarRange(range); - window = range[1] - range[0]; - level = (range[1] + range[0])* 0.5; + double range[2]; + mImage->GetScalarRange(range); + window = range[1] - range[0]; + level = (range[1] + range[0])* 0.5; } - break; + break; case 1: - window = 2000; - level = 0; - break; + window = 2000; + level = 0; + break; case 2: - window = 350; - level = 60; - break; + window = 350; + level = 60; + break; case 3: - window = 1500; - level = -500; - break; + window = 1500; + level = -500; + break; case 4: - window = 1000; - level = 500; - break; + window = 1000; + level = 500; + break; case 5: - window = 1; - level = 0.5; - break; + window = 1; + level = 0.5; + break; case 6: - break; + break; case 7: - window=1.; - level=0.; - break; + window=1.; + level=0.; + break; } - mPreset = preset; - this->SetColorWindow(window); - this->SetColorLevel(level); - - //if (LUT) - //{ - // SetColorMap(-1); - //} + mPreset = preset; + this->SetColorWindow(window); + this->SetColorLevel(level); + + //if (LUT) + //{ + // SetColorMap(-1); + //} } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::SetLocalColorWindowing(const int slicer) { - double min, max; - this->mSlicers[slicer]->GetExtremasAroundMousePointer(min, max); - this->SetColorWindow(max-min); - this->SetColorLevel(0.5*(min+max)); - this->Render(); + double min, max; + this->mSlicers[slicer]->GetExtremasAroundMousePointer(min, max); + this->SetColorWindow(max-min); + this->SetColorLevel(0.5*(min+max)); + this->Render(); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::SetColorMap() { - SetColorMap(mColorMap); + SetColorMap(mColorMap); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::SetColorMap(int colormap) { - double range[2]; - range[0] = mSlicers[0]->GetInput()->GetScalarRange()[0]; - range[1] = mSlicers[0]->GetInput()->GetScalarRange()[1]; + double range[2]; + range[0] = mSlicers[0]->GetInput()->GetScalarRange()[0]; + range[1] = mSlicers[0]->GetInput()->GetScalarRange()[1]; - double window = mSlicers[0]->GetWindowLevel()->GetWindow(); - double level = mSlicers[0]->GetWindowLevel()->GetLevel(); + double window = mSlicers[0]->GetWindowLevel()->GetWindow(); + double level = mSlicers[0]->GetWindowLevel()->GetLevel(); - vtkLookupTable* LUT = static_cast(mSlicers[0]->GetWindowLevel()->GetLookupTable()); - switch (colormap) + vtkLookupTable* LUT = static_cast(mSlicers[0]->GetWindowLevel()->GetLookupTable()); + switch (colormap) { case -1: - break; + break; case 0: - LUT = NULL; - break; + LUT = NULL; + break; case 1: - if (LUT == NULL) - LUT = vtkLookupTable::New(); - LUT->SetValueRange(0,1); - LUT->SetSaturationRange(1,1); - LUT->SetHueRange(0,0.18); - break; + if (LUT == NULL) + LUT = vtkLookupTable::New(); + LUT->SetValueRange(0,1); + LUT->SetSaturationRange(1,1); + LUT->SetHueRange(0,0.18); + break; case 2: - if (LUT == NULL) - LUT = vtkLookupTable::New(); - LUT->SetValueRange(0,1); - LUT->SetSaturationRange(1,1); - LUT->SetHueRange(0.4,0.80); - break; + if (LUT == NULL) + LUT = vtkLookupTable::New(); + LUT->SetValueRange(0,1); + LUT->SetSaturationRange(1,1); + LUT->SetHueRange(0.4,0.80); + break; case 3: - if (LUT == NULL) - LUT = vtkLookupTable::New(); - LUT->SetValueRange(0,1); - LUT->SetSaturationRange(1,1); - LUT->SetHueRange(0,1); - break; + if (LUT == NULL) + LUT = vtkLookupTable::New(); + LUT->SetValueRange(0,1); + LUT->SetSaturationRange(1,1); + LUT->SetHueRange(0,1); + break; case 5: - if (LUT == NULL) - LUT = vtkLookupTable::New(); - LUT->SetValueRange(0.,1); - LUT->SetSaturationRange(1,1); - LUT->SetHueRange(1,0.1); - //LUT->SetRampToLinear(); - break; - } - if (LUT) - { - LUT->SetTableRange(level-fabs(window)/4,level+fabs(window)/4); - LUT->Build(); - } - vtkLookupTable* fusLUT = NULL; - if (mSlicers[0]->GetFusion()) - { - fusLUT = vtkLookupTable::New(); - double fusRange [2]; - fusRange[0] = mFusionLevel - mFusionWindow/2; - fusRange[1] = mFusionLevel + mFusionWindow/2; - fusLUT->SetTableRange(fusRange[0],fusRange[1]); - fusLUT->SetValueRange(1,1); - fusLUT->SetSaturationRange(1,1); - if (mFusionColorMap == 1) - fusLUT->SetHueRange(0,0.18); - else if (mFusionColorMap == 2) - fusLUT->SetHueRange(0.4,0.80); - else if (mFusionColorMap == 3) - fusLUT->SetHueRange(0,1); - fusLUT->Build(); - if (mFusionColorMap == 0) - fusLUT = NULL; - } - for ( unsigned int i = 0; i < mSlicers.size(); i++) { - if (mSlicers[i]->GetOverlay() && mSlicers[i]->GetOverlayActor()->GetVisibility()) { - vtkLookupTable* supLUT = vtkLookupTable::New(); - supLUT->SetTableRange(range[0],range[1]); - supLUT->SetValueRange(1,1); - supLUT->SetSaturationRange(1,1); - supLUT->SetHueRange(double(mOverlayColor)/360,double(mOverlayColor)/360); - supLUT->Build(); - vtkLookupTable* invLUT = vtkLookupTable::New(); - invLUT->SetTableRange(range[0],range[1]); - invLUT->SetValueRange(1,1); - invLUT->SetSaturationRange(1,1); - invLUT->SetHueRange(double((mOverlayColor+180)%360)/360,double((mOverlayColor+180)%360)/360); - invLUT->Build(); - dynamic_cast(mSlicers[i]->GetWindowLevel()) - ->SetWindowLevelMode(true); - mSlicers[i]->GetWindowLevel()->SetLookupTable(supLUT); - mSlicers[i]->GetOverlayMapper()->SetLookupTable(invLUT); - invLUT->Delete(); - supLUT->Delete(); - } - else if (mSlicers[i]->GetOverlay()) - { - //dynamic_cast(mSlicers[i]->GetWindowLevel()) - //->SetWindowLevelMode(false); - mSlicers[i]->GetWindowLevel()->SetLookupTable(LUT); - } - else - { - mSlicers[i]->GetWindowLevel()->SetLookupTable(LUT); - } - if (mSlicers[i]->GetFusion() && mSlicers[i]->GetFusionActor()->GetVisibility()) - { - mSlicers[i]->GetFusionActor()->SetOpacity(double(mFusionOpacity)/100); - mSlicers[i]->GetFusionMapper()->SetLookupTable(fusLUT); - } + if (LUT == NULL) + LUT = vtkLookupTable::New(); + LUT->SetValueRange(0.,1); + LUT->SetSaturationRange(1,1); + LUT->SetHueRange(1,0.1); + //LUT->SetRampToLinear(); + break; + } + if (LUT) + { + LUT->SetTableRange(level-fabs(window)/4,level+fabs(window)/4); + LUT->Build(); } - if (fusLUT) - fusLUT->Delete(); - if (colormap >= 0) - mColorMap = colormap; + vtkLookupTable* fusLUT = NULL; + if (mSlicers[0]->GetFusion()) + { + fusLUT = vtkLookupTable::New(); + double fusRange [2]; + fusRange[0] = mFusionLevel - mFusionWindow/2; + fusRange[1] = mFusionLevel + mFusionWindow/2; + fusLUT->SetTableRange(fusRange[0],fusRange[1]); + fusLUT->SetValueRange(1,1); + fusLUT->SetSaturationRange(1,1); + if (mFusionColorMap == 1) + fusLUT->SetHueRange(0,0.18); + else if (mFusionColorMap == 2) + fusLUT->SetHueRange(0.4,0.80); + else if (mFusionColorMap == 3) + fusLUT->SetHueRange(0,1); + fusLUT->Build(); + if (mFusionColorMap == 0) + fusLUT = NULL; + } + for ( unsigned int i = 0; i < mSlicers.size(); i++) { + if (mSlicers[i]->GetOverlay() && mSlicers[i]->GetOverlayActor()->GetVisibility()) { + vtkLookupTable* supLUT = vtkLookupTable::New(); + supLUT->SetTableRange(range[0],range[1]); + supLUT->SetValueRange(1,1); + supLUT->SetSaturationRange(1,1); + supLUT->SetHueRange(double(mOverlayColor)/360,double(mOverlayColor)/360); + supLUT->Build(); + vtkLookupTable* invLUT = vtkLookupTable::New(); + invLUT->SetTableRange(range[0],range[1]); + invLUT->SetValueRange(1,1); + invLUT->SetSaturationRange(1,1); + invLUT->SetHueRange(double((mOverlayColor+180)%360)/360,double((mOverlayColor+180)%360)/360); + invLUT->Build(); + dynamic_cast(mSlicers[i]->GetWindowLevel()) + ->SetWindowLevelMode(true); + mSlicers[i]->GetWindowLevel()->SetLookupTable(supLUT); + mSlicers[i]->GetOverlayMapper()->SetLookupTable(invLUT); + invLUT->Delete(); + supLUT->Delete(); + } + else if (mSlicers[i]->GetOverlay()) + { + //dynamic_cast(mSlicers[i]->GetWindowLevel()) + //->SetWindowLevelMode(false); + mSlicers[i]->GetWindowLevel()->SetLookupTable(LUT); + } + else + { + mSlicers[i]->GetWindowLevel()->SetLookupTable(LUT); + } + if (mSlicers[i]->GetFusion() && mSlicers[i]->GetFusionActor()->GetVisibility()) + { + mSlicers[i]->GetFusionActor()->SetOpacity(double(mFusionOpacity)/100); + mSlicers[i]->GetFusionMapper()->SetLookupTable(fusLUT); + } + } + if (fusLUT) + fusLUT->Delete(); + if (colormap >= 0) + mColorMap = colormap; } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- vvLandmarks* vvSlicerManager::GetLandmarks() { - if (mLandmarks == NULL) + if (mLandmarks == NULL) { - mLandmarks = new vvLandmarks(mSlicers[0]->GetTMax()+1); - for (unsigned int i = 0; i < mSlicers.size(); i++) - mSlicers[i]->SetLandmarks(mLandmarks); + mLandmarks = new vvLandmarks(mSlicers[0]->GetTMax()+1); + for (unsigned int i = 0; i < mSlicers.size(); i++) + mSlicers[i]->SetLandmarks(mLandmarks); } - return mLandmarks; + return mLandmarks; } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicerManager::AddLandmark(float x,float y,float z,float t) { - double x_index = (x - mSlicers[0]->GetInput()->GetOrigin()[0])/mSlicers[0]->GetInput()->GetSpacing()[0]; - double y_index = (y - mSlicers[0]->GetInput()->GetOrigin()[1])/mSlicers[0]->GetInput()->GetSpacing()[1]; - double z_index = (z - mSlicers[0]->GetInput()->GetOrigin()[2])/mSlicers[0]->GetInput()->GetSpacing()[2]; - double value = mSlicers[0]->GetInput()->GetScalarComponentAsDouble( - (int)x_index, - (int)y_index, - (int)z_index,0); - this->GetLandmarks()->AddLandmark(x,y,z,t,value); - emit LandmarkAdded(); + double x_index = (x - mSlicers[0]->GetInput()->GetOrigin()[0])/mSlicers[0]->GetInput()->GetSpacing()[0]; + double y_index = (y - mSlicers[0]->GetInput()->GetOrigin()[1])/mSlicers[0]->GetInput()->GetSpacing()[1]; + double z_index = (z - mSlicers[0]->GetInput()->GetOrigin()[2])/mSlicers[0]->GetInput()->GetSpacing()[2]; + double value = mSlicers[0]->GetInput()->GetScalarComponentAsDouble( + (int)x_index, + (int)y_index, + (int)z_index,0); + this->GetLandmarks()->AddLandmark(x,y,z,t,value); + emit LandmarkAdded(); } +//---------------------------------------------------------------------------- diff --git a/vv/vvSlicerManager.h b/vv/vvSlicerManager.h index e404dc2..c1da253 100644 --- a/vv/vvSlicerManager.h +++ b/vv/vvSlicerManager.h @@ -15,8 +15,9 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html ======================================================================-====*/ -#ifndef vvSlicerManager_h -#define vvSlicerManager_h +#ifndef VVSLICERMANAGER_H +#define VVSLICERMANAGER_H + #include #include #include @@ -113,9 +114,7 @@ public: return mId; } - void SetFilename(std::string f) { - mFileName = f; - } + void SetFilename(std::string f); void SetTSlice(int slice); void SetNextTSlice(int originating_slicer); diff --git a/vv/vvToolBase.cxx b/vv/vvToolBase.cxx index 8d2e1d6..c8ea311 100644 --- a/vv/vvToolBase.cxx +++ b/vv/vvToolBase.cxx @@ -15,6 +15,8 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html ======================================================================-====*/ + + #ifndef VVTOOLBASE_CXX #define VVTOOLBASE_CXX #include "vvToolBase.h" diff --git a/vv/vvToolBase.h b/vv/vvToolBase.h index 535fa23..a662950 100644 --- a/vv/vvToolBase.h +++ b/vv/vvToolBase.h @@ -15,6 +15,7 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html ======================================================================-====*/ + #ifndef VVTOOLBASE_H #define VVTOOLBASE_H #include "vvToolBaseBase.h" @@ -37,6 +38,10 @@ public: CREATOR(ToolType)->GetMainWindow()->AddImage(image,filename); } + void setSender(QObject *s) { mSender = s; } + + protected: + QObject * mSender; }; //------------------------------------------------------------------------------ diff --git a/vv/vvToolBase.txx b/vv/vvToolBase.txx index 86b7137..7e1ac30 100644 --- a/vv/vvToolBase.txx +++ b/vv/vvToolBase.txx @@ -15,6 +15,7 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html ======================================================================-====*/ + template vvToolBase::vvToolBase(vvMainWindowBase * m) { mMainWindowBase = m; diff --git a/vv/vvToolBaseBase.h b/vv/vvToolBaseBase.h index 0c71deb..4a9f4af 100644 --- a/vv/vvToolBaseBase.h +++ b/vv/vvToolBaseBase.h @@ -15,6 +15,7 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html ======================================================================-====*/ + #ifndef VVTOOLBASEBASE_H #define VVTOOLBASEBASE_H #include "vvMainWindowBase.h" diff --git a/vv/vvToolBinarize.cxx b/vv/vvToolBinarize.cxx index 91afa6d..f8b11e3 100644 --- a/vv/vvToolBinarize.cxx +++ b/vv/vvToolBinarize.cxx @@ -15,6 +15,7 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html ======================================================================-====*/ + #include "vvToolBinarize.h" #include "vvSlicerManager.h" #include "vvSlicer.h" @@ -37,7 +38,7 @@ ADD_TOOL(vvToolBinarize); void vvToolBinarize::Initialize() { SetToolName("Binarize"); SetToolMenuName("Binarize"); - SetToolIconFilename(":/new/prefix1/icons/binarize.png"); + SetToolIconFilename(":/common/icons/binarize.png"); SetToolTip("Image interactive binarization with thresholds."); } //------------------------------------------------------------------------------ diff --git a/vv/vvToolCreator.h b/vv/vvToolCreator.h index ff96010..5859a2f 100644 --- a/vv/vvToolCreator.h +++ b/vv/vvToolCreator.h @@ -17,6 +17,7 @@ ======================================================================-====*/ #ifndef VVTOOLCREATOR_H #define VVTOOLCREATOR_H + #include "vvToolCreatorBase.h" //------------------------------------------------------------------------------ diff --git a/vv/vvToolCreator.txx b/vv/vvToolCreator.txx index c6a9566..33fd9e0 100644 --- a/vv/vvToolCreator.txx +++ b/vv/vvToolCreator.txx @@ -15,6 +15,8 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html ======================================================================-====*/ + +//------------------------------------------------------------------------------ template void vvToolCreator::InsertToolInMenu(vvMainWindowBase * m) { mMainWindow = m; diff --git a/vv/vvToolCreatorBase.cxx b/vv/vvToolCreatorBase.cxx index 394602e..4f6fe47 100644 --- a/vv/vvToolCreatorBase.cxx +++ b/vv/vvToolCreatorBase.cxx @@ -15,6 +15,7 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html ======================================================================-====*/ + #include "vvToolCreatorBase.h" #include "vvToolManager.h" #include @@ -22,15 +23,27 @@ //------------------------------------------------------------------------------ vvToolCreatorBase::vvToolCreatorBase(QString name): mExperimental(false) { + mUseContextMenu = false; mToolName = name; vvToolManager::GetInstance()->AddTool(this); } //------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +void vvToolCreatorBase::MenuToolSlot() { + mSender = QObject::sender(); + MenuSpecificToolSlot(); +} +//------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ void vvToolCreatorBase::InsertToolInMenu(vvMainWindowBase * m) { mMainWindow = m; + if (mUseContextMenu) { + InsertToolInContextMenu(); + return; + } // Create main action if (mToolIconFilename == "noicon") mAction = new QAction(QString("&").append(mToolMenuName), this); @@ -47,3 +60,23 @@ void vvToolCreatorBase::InsertToolInMenu(vvMainWindowBase * m) { } //------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +void vvToolCreatorBase::InsertToolInContextMenu() { + mMainWindow->GetContextMenu()->addMenu(mToolMenu); + for(unsigned int i=0; iactions().length(); i++) { + mListOfActions.push_back(m->actions()[i]); + } + mUseContextMenu = true; +} +//------------------------------------------------------------------------------ diff --git a/vv/vvToolCreatorBase.h b/vv/vvToolCreatorBase.h index 8078d19..0255888 100644 --- a/vv/vvToolCreatorBase.h +++ b/vv/vvToolCreatorBase.h @@ -32,9 +32,11 @@ class vvToolCreatorBase: public QObject { vvToolCreatorBase(QString name); virtual ~vvToolCreatorBase() {;} virtual void InsertToolInMenu(vvMainWindowBase * m); + virtual void InsertToolInContextMenu(); template void CreateTool(); virtual void MenuSpecificToolSlot() = 0; vvMainWindowBase * GetMainWindow() const { return mMainWindow; } + void addMenuToContextMenu(QMenu * m); QString mToolName; QString mToolMenuName; @@ -42,13 +44,17 @@ class vvToolCreatorBase: public QObject { QString mToolTip; QAction * mAction; bool mExperimental; + bool mUseContextMenu; + QMenu * mToolMenu; + std::vector mListOfActions; public slots: - virtual void MenuToolSlot() { MenuSpecificToolSlot(); } + virtual void MenuToolSlot(); protected: vvMainWindowBase * mMainWindow; std::vector mListOfTool; + QObject * mSender; }; //------------------------------------------------------------------------------ diff --git a/vv/vvToolCreatorBase.txx b/vv/vvToolCreatorBase.txx index 2f7121e..94741dd 100644 --- a/vv/vvToolCreatorBase.txx +++ b/vv/vvToolCreatorBase.txx @@ -15,12 +15,14 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html ======================================================================-====*/ + template void vvToolCreatorBase::CreateTool() { // Get information on the current image mMainWindow->UpdateCurrentSlicer(); // Create the tool ToolType * tool = new ToolType(mMainWindow); + tool->setSender(mSender); // Put it in the list of open tools mListOfTool.push_back(tool); // Go ! diff --git a/vv/vvToolCropImage.h b/vv/vvToolCropImage.h index c118bf1..308396d 100644 --- a/vv/vvToolCropImage.h +++ b/vv/vvToolCropImage.h @@ -56,7 +56,7 @@ public slots: static void Initialize() { SetToolName("Crop"); SetToolMenuName("Crop"); - SetToolIconFilename(":/new/prefix1/icons/crop.png"); + SetToolIconFilename(":/common/icons/crop.png"); SetToolTip("Crop image."); } diff --git a/vv/vvToolFoo.cxx b/vv/vvToolFoo.cxx index 29c315e..66a97d7 100644 --- a/vv/vvToolFoo.cxx +++ b/vv/vvToolFoo.cxx @@ -44,7 +44,7 @@ vvToolFoo::~vvToolFoo() { void vvToolFoo::Initialize() { SetToolName("Foo"); SetToolMenuName("Foo"); - SetToolIconFilename(":/new/prefix1/icons/ducky.png"); + SetToolIconFilename(":/common/icons/ducky.png"); SetToolTip("Make 'foo' on an image."); } //------------------------------------------------------------------------------ diff --git a/vv/vvToolFooWithWidgetBase.cxx b/vv/vvToolFooWithWidgetBase.cxx index 56f5a22..719c9b0 100644 --- a/vv/vvToolFooWithWidgetBase.cxx +++ b/vv/vvToolFooWithWidgetBase.cxx @@ -44,7 +44,7 @@ vvToolFooWithWidgetBase::~vvToolFooWithWidgetBase() { void vvToolFooWithWidgetBase::Initialize() { SetToolName("Foo"); SetToolMenuName("Foo with WidgetBase"); - SetToolIconFilename(":/new/prefix1/icons/ducky.png"); + SetToolIconFilename(":/common/icons/ducky.png"); SetToolTip("Make 'foo' on an image."); } //------------------------------------------------------------------------------ diff --git a/vv/vvToolImageArithm.cxx b/vv/vvToolImageArithm.cxx index f3cc6f3..d380531 100644 --- a/vv/vvToolImageArithm.cxx +++ b/vv/vvToolImageArithm.cxx @@ -54,7 +54,7 @@ vvToolImageArithm::~vvToolImageArithm() { void vvToolImageArithm::Initialize() { SetToolName("ImageArithm"); SetToolMenuName("ImageArithm"); - SetToolIconFilename(":/new/prefix1/icons/cross.png"); + SetToolIconFilename(":/common/icons/arithm.png"); SetToolTip("Perform simple arithmetic operations on one or two images."); SetToolExperimental(true); } diff --git a/vv/vvToolManager.cxx b/vv/vvToolManager.cxx index 37608ef..f1450ce 100644 --- a/vv/vvToolManager.cxx +++ b/vv/vvToolManager.cxx @@ -15,6 +15,7 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html ======================================================================-====*/ + #include "vvToolManager.h" #include "vvToolCreatorBase.h" #include "vvMainWindowBase.h" -- 2.49.0