X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvMainWindow.cxx;h=1dbd8e4575fadbeeccfd645091ec3b147139c442;hb=10ec7dc09aeea303fdc6a30449ec69de2f2ccd88;hp=f55ebea2d2ff05b344270572e4bc3575dc7b1e13;hpb=a76308ba9b5add63fcce2632a3683ce64b0702c5;p=clitk.git diff --git a/vv/vvMainWindow.cxx b/vv/vvMainWindow.cxx index f55ebea..1dbd8e4 100644 --- a/vv/vvMainWindow.cxx +++ b/vv/vvMainWindow.cxx @@ -3,8 +3,8 @@ Program: vv Module: $RCSfile: vvMainWindow.cxx,v $ Language: C++ - Date: $Date: 2010/02/17 20:52:39 $ - Version: $Revision: 1.11 $ + Date: $Date: 2010/03/10 15:36:26 $ + Version: $Revision: 1.16 $ Author : Pierre Seroul (pierre.seroul@gmail.com) Copyright (C) 200COLUMN_IMAGE_NAME @@ -54,8 +54,8 @@ #include "vvMesh.h" #include "vvStructSelector.h" #include "vvMeshReader.h" -#include "vvCropDialog.h" #include "vvConstants.h" + #ifdef CLITK_VV_USE_BDCM #include #endif @@ -107,11 +107,12 @@ 5,Qt::UserRole mSlicerManager id*/ //------------------------------------------------------------------------------ -vvMainWindow::vvMainWindow() { +vvMainWindow::vvMainWindow():vvMainWindowBase() { setupUi(this); // this sets up the GUI mInputPathName = ""; - mCurrentToolInfo = 0; + mMenuTools = menuTools; + mMainWidget = this; //Init the contextMenu this->setContextMenuPolicy(Qt::CustomContextMenu); @@ -140,10 +141,10 @@ vvMainWindow::vvMainWindow() { contextMenu.addSeparator(); - QAction* actionCrop_image = contextMenu.addAction(QIcon(QString::fromUtf8(":/new/prefix1/icons/crop.png")), - tr("Crop Current Image")); - connect(actionCrop_image,SIGNAL(triggered()),this,SLOT(CropImage())); - contextActions.push_back(actionCrop_image); + // QAction* actionCrop_image = contextMenu.addAction(QIcon(QString::fromUtf8(":/new/prefix1/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")), tr("Split Current Image")); @@ -166,7 +167,6 @@ vvMainWindow::vvMainWindow() { connect(actionAdd_fusion_image,SIGNAL(triggered()),this,SLOT(AddFusionImage())); contextActions.push_back(actionAdd_fusion_image); - //init the DataTree mSlicerManagers.resize(0); @@ -319,7 +319,7 @@ vvMainWindow::vvMainWindow() { } // Adding all new tools (insertion in the menu) - vvToolManager::GetInstance()->Initialize(this); + vvToolManager::GetInstance()->InsertToolsInMenu(this); } //------------------------------------------------------------------------------ @@ -360,7 +360,10 @@ void vvMainWindow::ComputeMidPosition() QApplication::restoreOverrideCursor(); } } +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ void vvMainWindow::AddContour(int image_index, vvMesh::Pointer contour, bool propagation) { QTreeWidgetItem *item = new QTreeWidgetItem(); @@ -404,13 +407,15 @@ void vvMainWindow::AddContour(int image_index, vvMesh::Pointer contour, bool pro mSlicerManagers[image_index]->AddContour(contour,propagation); mSlicerManagers[image_index]->Render(); } +//------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ void vvMainWindow::OpenVTKContour() { if (mSlicerManagers.size() > 0) { - QString Extensions = "Images ( *.vtk)"; + QString Extensions = "Images ( *.vtk; *.obj)"; Extensions += ";;All Files (*)"; QString file = QFileDialog::getOpenFileName(this,tr("Open vtkPolyData"),mInputPathName,Extensions); if (file.isNull()) @@ -418,6 +423,7 @@ void vvMainWindow::OpenVTKContour() QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); int index = GetSlicerIndexFromItem(DataTree->selectedItems()[0]); vvMeshReader reader; + reader.SetImage(mSlicerManagers[index]->GetImage()); reader.SetModeToVTK(); reader.SetFilename(file.toStdString()); reader.Update(); @@ -425,6 +431,9 @@ void vvMainWindow::OpenVTKContour() QApplication::restoreOverrideCursor(); } } +//------------------------------------------------------------------------------ + + //------------------------------------------------------------------------------ void vvMainWindow::OpenDCStructContour() { @@ -458,6 +467,8 @@ void vvMainWindow::OpenDCStructContour() } } } +//------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ void vvMainWindow::ComputeDeformableRegistration() @@ -477,6 +488,8 @@ void vvMainWindow::ComputeDeformableRegistration() } else QMessageBox::information(this, "Need to open image","You must open an image first."); } +//------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ void vvMainWindow::WarpImage() @@ -495,6 +508,8 @@ void vvMainWindow::WarpImage() else QMessageBox::warning(this,tr("No vector field"),tr("Sorry, can't warp without a vector field")); } +//------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ void vvMainWindow::WarpImage(vvSlicerManager* selected_slicer,int reference_phase) @@ -521,6 +536,8 @@ void vvMainWindow::WarpImage(vvSlicerManager* selected_slicer,int reference_phas else QMessageBox::warning(this,tr("No vector field"),tr("Sorry, can't warp without a vector field.")); } +//------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ vvMainWindow::~vvMainWindow() { @@ -532,6 +549,7 @@ vvMainWindow::~vvMainWindow() { } //------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ void vvMainWindow::MergeImages() { QString Extensions = EXTENSIONS; @@ -550,45 +568,45 @@ void vvMainWindow::MergeImages() { for (int i = 0; i < files.size(); i++) { itk::ImageIOBase::Pointer reader = itk::ImageIOFactory::CreateImageIO( - files[i].toStdString().c_str(), itk::ImageIOFactory::ReadMode); + files[i].toStdString().c_str(), itk::ImageIOFactory::ReadMode); reader->SetFileName(files[i].toStdString().c_str()); reader->ReadImageInformation(); - if (reader) NOViewWidget->hide(); - NEViewWidget->hide(); - SOViewWidget->hide(); - SEViewWidget->hide(); - { - if (i == 0) - currentDim = reader->GetNumberOfDimensions(); - bool IsOk = true; - for (unsigned int j = 0;j < currentDim; j++) + if (reader) { + //NOViewWidget->hide(); + //NEViewWidget->hide(); + //SOViewWidget->hide(); + //SEViewWidget->hide(); + if (i == 0) + currentDim = reader->GetNumberOfDimensions(); + bool IsOk = true; + for (unsigned int j = 0;j < currentDim; j++) { - if (i == 0) + if (i == 0) { - if (j == 0) + if (j == 0) { - currentSpacing.resize(currentDim); - currentSize.resize(currentDim); - currentOrigin.resize(currentDim); + currentSpacing.resize(currentDim); + currentSize.resize(currentDim); + currentOrigin.resize(currentDim); } - currentOrigin[j] = reader->GetOrigin(j); - currentSpacing[j] = reader->GetSpacing(j); - currentSize[j] = reader->GetDimensions(j); + currentOrigin[j] = reader->GetOrigin(j); + currentSpacing[j] = reader->GetSpacing(j); + currentSize[j] = reader->GetDimensions(j); } - else if (currentDim != reader->GetNumberOfDimensions() - || currentSpacing[j] != reader->GetSpacing(j) - || currentSize[j] != (int)reader->GetDimensions(j) - || currentOrigin[j] != reader->GetOrigin(j)) + else if (currentDim != reader->GetNumberOfDimensions() + || currentSpacing[j] != reader->GetSpacing(j) + || currentSize[j] != (int)reader->GetDimensions(j) + || currentOrigin[j] != reader->GetOrigin(j)) { - QString error = "Cannot read file (too different from others "; - error += files[i].toStdString().c_str(); - QMessageBox::information(this,tr("Reading problem"),error); - IsOk = false; - break; + QString error = "Cannot read file (too different from others "; + error += files[i].toStdString().c_str(); + QMessageBox::information(this,tr("Reading problem"),error); + IsOk = false; + break; } } - if (IsOk) - vector.push_back(files[i].toStdString()); + if (IsOk) + vector.push_back(files[i].toStdString()); } } if (vector.size() > 0) @@ -596,6 +614,7 @@ void vvMainWindow::MergeImages() { } //------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ void vvMainWindow::MergeImagesWithTime() { QString Extensions = EXTENSIONS; @@ -668,6 +687,7 @@ void vvMainWindow::MergeImagesWithTime() { } //------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ void vvMainWindow::OpenDicom() { std::vector files; @@ -873,9 +893,6 @@ void vvMainWindow::LoadImages(std::vector files, LoadedImageType fi } QApplication::restoreOverrideCursor(); - - // vvToolManager::GetInstance()->UpdateEnabledTool(); - // emit SlicerManagersHasChanged(); } //------------------------------------------------------------------------------ @@ -1071,74 +1088,74 @@ void vvMainWindow::ImageInfoChanged() { } windowSpinBox->setValue(mSlicerManagers[index]->GetColorWindow()); levelSpinBox->setValue(mSlicerManagers[index]->GetColorLevel()); - DD(mSlicerManagers[index]->GetColorMap()); - DD(mSlicerManagers[index]->GetPreset()); + // DD(mSlicerManagers[index]->GetColorMap()); + // DD(mSlicerManagers[index]->GetPreset()); presetComboBox->setCurrentIndex(mSlicerManagers[index]->GetPreset()); colorMapComboBox->setCurrentIndex(mSlicerManagers[index]->GetColorMap()); - infoPanel->setFileName(image); - infoPanel->setDimension(dim); - infoPanel->setSizePixel(GetVectorIntAsString(inputSize)); - infoPanel->setSizeMM(GetVectorDoubleAsString(sizeMM)); - infoPanel->setOrigin(GetVectorDoubleAsString(origin)); - infoPanel->setSpacing(GetVectorDoubleAsString(inputSpacing)); - infoPanel->setNPixel(QString::number(NPixel)+" ("+inputSizeInBytes+")"); - - landmarksPanel->SetCurrentLandmarks(mSlicerManagers[index]->GetLandmarks(), - mSlicerManagers[index]->GetSlicer(0)->GetImage()->GetVTKImages().size()); - landmarksPanel->SetCurrentPath(mInputPathName.toStdString()); - landmarksPanel->SetCurrentImage(mSlicerManagers[index]->GetFileName().c_str()); - - overlayPanel->getCurrentImageName(mSlicerManagers[index]->GetFileName().c_str()); - for (int i = 0; i < 4;i++) - { - if (DataTree->selectedItems()[0]->data(i+1,Qt::CheckStateRole).toInt() > 0 || i == 3) - { - mSlicerManagers[index]->UpdateInfoOnCursorPosition(i); - break; - } - } - windowSpinBox->setValue(mSlicerManagers[index]->GetColorWindow()); - levelSpinBox->setValue(mSlicerManagers[index]->GetColorLevel()); - presetComboBox->setCurrentIndex(mSlicerManagers[index]->GetPreset()); - colorMapComboBox->setCurrentIndex(mSlicerManagers[index]->GetColorMap()); + infoPanel->setFileName(image); + infoPanel->setDimension(dim); + infoPanel->setSizePixel(GetVectorIntAsString(inputSize)); + infoPanel->setSizeMM(GetVectorDoubleAsString(sizeMM)); + infoPanel->setOrigin(GetVectorDoubleAsString(origin)); + infoPanel->setSpacing(GetVectorDoubleAsString(inputSpacing)); + infoPanel->setNPixel(QString::number(NPixel)+" ("+inputSizeInBytes+")"); - if (mSlicerManagers[index]->GetSlicer(0)->GetVF()) - { - overlayPanel->getVFName(mSlicerManagers[index]->GetVFName().c_str()); - overlayPanel->getVFProperty(mSlicerManagers[index]->GetSlicer(0)->GetVFSubSampling(), - mSlicerManagers[index]->GetSlicer(0)->GetVFScale(), - mSlicerManagers[index]->GetSlicer(0)->GetVFLog()); - } - else - { - overlayPanel->getVFName(mSlicerManagers[index]->GetVFName().c_str()); - overlayPanel->getVFProperty(-1,-1,-1); - } - if (mSlicerManagers[index]->GetSlicer(0)->GetOverlay()) - { - overlayPanel->getOverlayName(mSlicerManagers[index]->GetOverlayName().c_str()); - overlayPanel->getOverlayProperty(mSlicerManagers[index]->GetOverlayColor()); - } - else - { - overlayPanel->getOverlayName(mSlicerManagers[index]->GetOverlayName().c_str()); - overlayPanel->getOverlayProperty(-1); - } - if (mSlicerManagers[index]->GetSlicer(0)->GetFusion()) - { - overlayPanel->getFusionName(mSlicerManagers[index]->GetFusionName().c_str()); - overlayPanel->getFusionProperty(mSlicerManagers[index]->GetFusionOpacity(), - mSlicerManagers[index]->GetFusionColorMap(), - mSlicerManagers[index]->GetFusionWindow(), - mSlicerManagers[index]->GetFusionLevel()); - } - else - { - overlayPanel->getFusionName(mSlicerManagers[index]->GetFusionName().c_str()); - overlayPanel->getFusionProperty(-1, -1,-1,-1); - } - } + landmarksPanel->SetCurrentLandmarks(mSlicerManagers[index]->GetLandmarks(), + mSlicerManagers[index]->GetSlicer(0)->GetImage()->GetVTKImages().size()); + landmarksPanel->SetCurrentPath(mInputPathName.toStdString()); + landmarksPanel->SetCurrentImage(mSlicerManagers[index]->GetFileName().c_str()); + + overlayPanel->getCurrentImageName(mSlicerManagers[index]->GetFileName().c_str()); + for (int i = 0; i < 4;i++) + { + if (DataTree->selectedItems()[0]->data(i+1,Qt::CheckStateRole).toInt() > 0 || i == 3) + { + mSlicerManagers[index]->UpdateInfoOnCursorPosition(i); + break; + } + } + windowSpinBox->setValue(mSlicerManagers[index]->GetColorWindow()); + levelSpinBox->setValue(mSlicerManagers[index]->GetColorLevel()); + presetComboBox->setCurrentIndex(mSlicerManagers[index]->GetPreset()); + colorMapComboBox->setCurrentIndex(mSlicerManagers[index]->GetColorMap()); + + if (mSlicerManagers[index]->GetSlicer(0)->GetVF()) + { + overlayPanel->getVFName(mSlicerManagers[index]->GetVFName().c_str()); + overlayPanel->getVFProperty(mSlicerManagers[index]->GetSlicer(0)->GetVFSubSampling(), + mSlicerManagers[index]->GetSlicer(0)->GetVFScale(), + mSlicerManagers[index]->GetSlicer(0)->GetVFLog()); + } + else + { + overlayPanel->getVFName(mSlicerManagers[index]->GetVFName().c_str()); + overlayPanel->getVFProperty(-1,-1,-1); + } + if (mSlicerManagers[index]->GetSlicer(0)->GetOverlay()) + { + overlayPanel->getOverlayName(mSlicerManagers[index]->GetOverlayName().c_str()); + overlayPanel->getOverlayProperty(mSlicerManagers[index]->GetOverlayColor()); + } + else + { + overlayPanel->getOverlayName(mSlicerManagers[index]->GetOverlayName().c_str()); + overlayPanel->getOverlayProperty(-1); + } + if (mSlicerManagers[index]->GetSlicer(0)->GetFusion()) + { + overlayPanel->getFusionName(mSlicerManagers[index]->GetFusionName().c_str()); + overlayPanel->getFusionProperty(mSlicerManagers[index]->GetFusionOpacity(), + mSlicerManagers[index]->GetFusionColorMap(), + mSlicerManagers[index]->GetFusionWindow(), + mSlicerManagers[index]->GetFusionLevel()); + } + else + { + overlayPanel->getFusionName(mSlicerManagers[index]->GetFusionName().c_str()); + overlayPanel->getFusionProperty(-1, -1,-1,-1); + } + } } //------------------------------------------------------------------------------ @@ -1488,6 +1505,10 @@ void vvMainWindow::CloseImage(QTreeWidgetItem* item, int column) { msgBox.addButton(tr("Cancel"), QMessageBox::RejectRole); if (msgBox.exec() == QMessageBox::AcceptRole) { + + // Tell tools that we close an image + emit AnImageIsBeingClosed(mSlicerManagers[index]); + std::vector::iterator Manageriter = mSlicerManagers.begin(); DataTree->takeTopLevelItem(index); for (int i = 0; i < index; i++) @@ -1498,25 +1519,24 @@ void vvMainWindow::CloseImage(QTreeWidgetItem* item, int column) { mSlicerManagers[index]->RemoveActors(); delete mSlicerManagers[index]; mSlicerManagers.erase(Manageriter); + + // InitDisplay(); } } - - // vvToolManager::GetInstance()->UpdateEnabledTool(); - // emit SlicerManagersHasChanged(); } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ void vvMainWindow::ReloadImage(QTreeWidgetItem* item, int column) { // int index = GetSlicerIndexFromItem(item); -// QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); -// if (item->data(1,Qt::UserRole).toString() == "vector") -// mSlicerManagers[index]->ReloadVF(); -// else -// mSlicerManagers[index]->Reload(); + // QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + // if (item->data(1,Qt::UserRole).toString() == "vector") + // mSlicerManagers[index]->ReloadVF(); + // else + // mSlicerManagers[index]->Reload(); -// QApplication::restoreOverrideCursor(); + // QApplication::restoreOverrideCursor(); int index = GetSlicerIndexFromItem(item); QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); QString role=item->data(1,Qt::UserRole).toString(); @@ -1532,13 +1552,13 @@ void vvMainWindow::ReloadImage(QTreeWidgetItem* item, int column) { } //------------------------------------------------------------------------------ -void vvMainWindow::CropImage() -{ - int index = GetSlicerIndexFromItem(DataTree->selectedItems()[0]); - vvCropDialog crop(mSlicerManagers,index); - if(crop.exec()) - AddImage(crop.GetOutput(),"cropped.mhd"); -} +// void vvMainWindow::CropImage() +// { +// int index = GetSlicerIndexFromItem(DataTree->selectedItems()[0]); +// vvCropDialog crop(mSlicerManagers,index); +// if(crop.exec()) +// AddImage(crop.GetOutput(),"cropped.mhd"); +// } //------------------------------------------------------------------------------ void vvMainWindow::SplitImage() { @@ -2330,7 +2350,7 @@ void vvMainWindow::NOVerticalSliderChanged() { if (DataTree->topLevelItem(i)->data(COLUMN_UL_VIEW,Qt::CheckStateRole).toInt() > 1) { mSlicerManagers[i]->GetSlicer(0)->SetSlice(value); - // mSlicerManagers[i]->UpdateSlice(0); // <-- too much update... + mSlicerManagers[i]->UpdateSlice(0); // <-- DS add this. Not too much update ? break; } } @@ -2381,8 +2401,10 @@ void vvMainWindow::SEVerticalSliderChanged() { //------------------------------------------------------------------------------ void vvMainWindow::UpdateSlice(int slicer, int slice) { - if (slicer == 0) - NOVerticalSlider->setValue(slice); + if (slicer == 0) { + if (slice != NOVerticalSlider->value()) + NOVerticalSlider->setValue(slice); + } else if (slicer == 1) NEVerticalSlider->setValue(slice); else if (slicer == 2) @@ -2744,31 +2766,17 @@ void vvMainWindow::AddImage(vvSlicerManager * slicer_manager) { ShowLastImage(); InitDisplay(); qApp->processEvents(); - - // vvToolManager::GetInstance()->UpdateEnabledTool(); - // emit SlicerManagersHasChanged(); } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ -vvMainWindowToolInfo * vvMainWindow::GetInfoForTool() { - DD("GetInfoForTool"); - if (mCurrentToolInfo ==0) mCurrentToolInfo = new vvMainWindowToolInfo; - - mCurrentToolInfo->mMenuTools = menuTools; - mCurrentToolInfo->mSlicerManagers = &mSlicerManagers; +void vvMainWindow::UpdateCurrentSlicer() { int index = -1; - DD(DataTree->selectedItems().size()); if (DataTree->selectedItems().size() > 0) { index = GetSlicerIndexFromItem(DataTree->selectedItems()[0]); - DD(DataTree->selectedItems()[0]); - DD(index); } - mCurrentToolInfo->mSlicerManagerCurrentIndex = index; - - return mCurrentToolInfo; + mSlicerManagerCurrentIndex = index; } //------------------------------------------------------------------------------ -