X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvMainWindow.cxx;h=f6f77e231b507cb311cb4b9560c113ef7955ed7e;hb=8777ccc7740bb3d319acbb06a03737b3c8209511;hp=4e70cd415ae45f378ab8a823a4c825f1cdacecde;hpb=5c614f89dec012c7e8fee33c09fe7c1b955f5640;p=clitk.git diff --git a/vv/vvMainWindow.cxx b/vv/vvMainWindow.cxx index 4e70cd4..f6f77e2 100644 --- a/vv/vvMainWindow.cxx +++ b/vv/vvMainWindow.cxx @@ -315,7 +315,7 @@ vvMainWindow::vvMainWindow():vvMainWindowBase() connect(this,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(ShowContextMenu(QPoint))); - connect(linkPanel,SIGNAL(addLink(QString,QString)),this,SLOT(AddLink(QString,QString))); + connect(linkPanel,SIGNAL(addLink(QString,QString,bool)),this,SLOT(AddLink(QString,QString,bool))); connect(linkPanel,SIGNAL(removeLink(QString,QString)),this,SLOT(RemoveLink(QString,QString))); connect(overlayPanel,SIGNAL(VFPropertyUpdated(int,int,int,int,double,double,double)),this,SLOT(SetVFProperty(int,int,int,int,double,double,double))); connect(overlayPanel,SIGNAL(OverlayPropertyUpdated(int,int,double,double)), @@ -928,7 +928,7 @@ void vvMainWindow::LoadImages(std::vector files, vvImageReader::Loa DataTree->setItemWidget(item, COLUMN_RELOAD_IMAGE, rButton); //set the id of the image - QString id = files[i].c_str() + QString::number(mSlicerManagers.size()-1); + QString id = QDir::current().absoluteFilePath(files[i].c_str()) + QString::number(mSlicerManagers.size()-1); item->setData(COLUMN_IMAGE_NAME,Qt::UserRole,id.toStdString().c_str()); mSlicerManagers.back()->SetId(id.toStdString()); @@ -1086,7 +1086,8 @@ void vvMainWindow::ImageInfoChanged() QString inputSizeInBytes; QString image = DataTree->selectedItems()[0]->data(COLUMN_IMAGE_NAME,Qt::DisplayRole).toString(); - if (mSlicerManagers[index]->GetSlicer(0)->GetImage()->GetVTKImages().size() > 1 || playMode == 1) { + int nframes = mSlicerManagers[index]->GetSlicer(0)->GetTMax(); + if (nframes > 1 || playMode == 1) { playButton->setEnabled(1); frameRateLabel->setEnabled(1); frameRateSpinBox->setEnabled(1); @@ -1236,25 +1237,70 @@ void vvMainWindow::ShowHelpDialog() //------------------------------------------------------------------------------ void vvMainWindow::ChangeViewMode() { - QList size; + typedef struct _SIZE{ + QSplitter* splitter; + QList size1, size2; + int cols[3]; + }SplitterSize; + SplitterSize sizes[4]; + sizes[0].splitter = OSplitter; + sizes[0].size1.push_back(1); + sizes[0].size1.push_back(0); + sizes[0].size2.push_back(1); + sizes[0].size2.push_back(0); + sizes[0].cols[0] = 2; + sizes[0].cols[1] = 3; + sizes[0].cols[2] = 4; + + sizes[1].splitter = ESplitter; + sizes[1].size1.push_back(0); + sizes[1].size1.push_back(1); + sizes[1].size2.push_back(1); + sizes[1].size2.push_back(0); + sizes[1].cols[0] = 1; + sizes[1].cols[1] = 3; + sizes[1].cols[2] = 4; + + sizes[2].splitter = OSplitter; + sizes[2].size1.push_back(1); + sizes[2].size1.push_back(0); + sizes[2].size2.push_back(0); + sizes[2].size2.push_back(1); + sizes[2].cols[0] = 1; + sizes[2].cols[1] = 2; + sizes[2].cols[2] = 4; + + sizes[3].splitter = ESplitter; + sizes[3].size1.push_back(0); + sizes[3].size1.push_back(1); + sizes[3].size2.push_back(0); + sizes[3].size2.push_back(1); + sizes[3].cols[0] = 1; + sizes[3].cols[1] = 2; + sizes[3].cols[2] = 3; + + int slicer = mSlicerManagers[mCurrentPickedImageIndex]->GetSelectedSlicer(); if (viewMode == 1) { - viewMode = 0; - size.push_back(1); - size.push_back(0); - splitter_3->setSizes(size); - OSplitter->setSizes(size); - DataTree->setColumnHidden(2,1); - DataTree->setColumnHidden(3,1); - DataTree->setColumnHidden(4,1); + if (slicer >= 0) { + viewMode = 0; + splitter_3->setSizes(sizes[slicer].size1); + sizes[slicer].splitter->setSizes(sizes[slicer].size2); + DataTree->setColumnHidden(sizes[slicer].cols[0],1); + DataTree->setColumnHidden(sizes[slicer].cols[1],1); + DataTree->setColumnHidden(sizes[slicer].cols[2],1); + } } else { - viewMode = 1; - size.push_back(1); - size.push_back(1); - splitter_3->setSizes(size); - OSplitter->setSizes(size); - DataTree->setColumnHidden(2,0); - DataTree->setColumnHidden(3,0); - DataTree->setColumnHidden(4,0); + QList size; + if (slicer >= 0) { + viewMode = 1; + size.push_back(1); + size.push_back(1); + splitter_3->setSizes(size); + sizes[slicer].splitter->setSizes(size); + DataTree->setColumnHidden(sizes[slicer].cols[0],0); + DataTree->setColumnHidden(sizes[slicer].cols[1],0); + DataTree->setColumnHidden(sizes[slicer].cols[2],0); + } } UpdateRenderWindows(); /* @@ -1262,10 +1308,12 @@ void vvMainWindow::ChangeViewMode() ** the associated Slicer to redraw crosses. */ for (unsigned int i = 0; i < mSlicerManagers.size(); i++) { - if (DataTree->topLevelItem(i)->data(COLUMN_UL_VIEW,Qt::CheckStateRole).toInt() > 1) +// if (DataTree->topLevelItem(i)->data(COLUMN_UL_VIEW,Qt::CheckStateRole).toInt() > 1) mSlicerManagers[i]->GetSlicer(0)->Render(); - if (DataTree->topLevelItem(i)->data(COLUMN_DL_VIEW,Qt::CheckStateRole).toInt() > 1) + mSlicerManagers[i]->GetSlicer(1)->Render(); +// if (DataTree->topLevelItem(i)->data(COLUMN_DL_VIEW,Qt::CheckStateRole).toInt() > 1) mSlicerManagers[i]->GetSlicer(2)->Render(); + mSlicerManagers[i]->GetSlicer(3)->Render(); } } //------------------------------------------------------------------------------ @@ -1493,38 +1541,28 @@ void vvMainWindow::InitDisplay() //------------------------------------------------------------------------------ void vvMainWindow::DisplaySliders(int slicer, int window) { + if(!mSlicerManagers[slicer]->GetSlicer(window)->GetRenderer()->GetDraw()) + return; + int range[2]; mSlicerManagers[slicer]->GetSlicer(window)->GetSliceRange(range); int position = mSlicerManagers[slicer]->GetSlicer(window)->GetSlice(); - - int tRange[2]; - tRange[0] = 0; - tRange[1] = mSlicerManagers[slicer]->GetSlicer(window)->GetTMax(); - int tPosition = mSlicerManagers[slicer]->GetSlicer(window)->GetTSlice(); - bool showHorizontal = false; - bool showVertical = false; - if (mSlicerManagers[slicer]->GetSlicer(window)->GetImage()->GetNumberOfDimensions() > 3 - || (mSlicerManagers[slicer]->GetSlicer(window)->GetImage()->GetNumberOfDimensions() > 2 - && mSlicerManagers[slicer]->GetType() != vvImageReader::IMAGEWITHTIME - && mSlicerManagers[slicer]->GetType() != vvImageReader::MERGEDWITHTIME)) - showVertical = true; - if (mSlicerManagers[slicer]->GetSlicer(window)->GetImage()->GetNumberOfDimensions() > 3 - || mSlicerManagers[slicer]->GetType() == vvImageReader::IMAGEWITHTIME - || mSlicerManagers[slicer]->GetType() == vvImageReader::MERGEDWITHTIME) - showHorizontal = true; - - if (showVertical) + if (range[1]>0) verticalSliders[window]->show(); else verticalSliders[window]->hide(); verticalSliders[window]->setRange(range[0],range[1]); verticalSliders[window]->setValue(position); - if (showHorizontal) + int tRange[2]; + tRange[0] = 0; + tRange[1] = mSlicerManagers[slicer]->GetSlicer(window)->GetTMax(); + if (tRange[1]>0) horizontalSliders[window]->show(); else horizontalSliders[window]->hide(); horizontalSliders[window]->setRange(tRange[0],tRange[1]); + int tPosition = mSlicerManagers[slicer]->GetSlicer(window)->GetMaxCurrentTSlice(); horizontalSliders[window]->setValue(tPosition); } //------------------------------------------------------------------------------ @@ -1773,6 +1811,32 @@ void vvMainWindow::ApplyWindowLevelToAllImages() } //------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +void vvMainWindow::ApplyWindowToSetOfImages(double window, unsigned int indexMin, unsigned int indexMax) +{ + for (unsigned int i = indexMin; i <= indexMax && i < mSlicerManagers.size(); i++) { + if (mSlicerManagers[i] == NULL) + continue; + mSlicerManagers[i]->SetColorWindow(window); + mSlicerManagers[i]->SetPreset(6); + mSlicerManagers[i]->Render(); + } +} +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +void vvMainWindow::ApplyLevelToSetOfImages(double level, unsigned int indexMin, unsigned int indexMax) +{ + for (unsigned int i = indexMin; i <= indexMax && i < mSlicerManagers.size(); i++) { + if (mSlicerManagers[i] == NULL) + continue; + mSlicerManagers[i]->SetColorLevel(level); + mSlicerManagers[i]->SetPreset(6); + mSlicerManagers[i]->Render(); + } +} +//------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ void vvMainWindow::UpdateLinkManager(std::string id, int slicer, double x, double y, double z, int temps) { @@ -1858,21 +1922,28 @@ void vvMainWindow::SelectOverlayImage() QString Extensions = EXTENSIONS; Extensions += ";;All Files (*)"; - QString file = QFileDialog::getOpenFileName(this,tr("Load Overlay image"),mInputPathName,Extensions); - if (!file.isEmpty()) - AddOverlayImage(index,file); + QStringList files = QFileDialog::getOpenFileNames(this,tr("Load Overlay image"),mInputPathName,Extensions); + if (files.isEmpty()) + return; + + std::vector vecFileNames; + for (int i = 0; i < files.size(); i++) { + vecFileNames.push_back(files[i].toStdString()); + } + AddOverlayImage(index,vecFileNames,vvImageReader::IMAGE); } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ -void vvMainWindow::AddOverlayImage(int index, QString file) +void vvMainWindow::AddOverlayImage(int index, std::vector fileNames, vvImageReader::LoadedImageType type) { + QString file(fileNames[0].c_str()); if (QFile::exists(file)) { mInputPathName = itksys::SystemTools::GetFilenamePath(file.toStdString()).c_str(); itk::ImageIOBase::Pointer reader = itk::ImageIOFactory::CreateImageIO( file.toStdString().c_str(), itk::ImageIOFactory::ReadMode); - reader->SetFileName(file.toStdString().c_str()); + reader->SetFileName(fileNames[0].c_str()); reader->ReadImageInformation(); std::string component = reader->GetComponentTypeAsString(reader->GetComponentType()); int dimension = reader->GetNumberOfDimensions(); @@ -1881,7 +1952,7 @@ void vvMainWindow::AddOverlayImage(int index, QString file) qApp->processEvents(); std::string filename = itksys::SystemTools::GetFilenameWithoutExtension(file.toStdString()).c_str(); - if (mSlicerManagers[index]->SetOverlay(file.toStdString(),dimension, component)) { + if (mSlicerManagers[index]->SetOverlay(fileNames,dimension, component,type)) { //create an item in the tree with good settings QTreeWidgetItem *item = new QTreeWidgetItem(); item->setData(0,Qt::UserRole,file.toStdString().c_str()); @@ -1925,6 +1996,10 @@ void vvMainWindow::AddOverlayImage(int index, QString file) qApp->processEvents(); ImageInfoChanged(); QApplication::restoreOverrideCursor(); + + // Update the display to update, e.g., the sliders + for(int i=0; i<4; i++) + DisplaySliders(index, i); } else { QApplication::restoreOverrideCursor(); QString error = "Cannot import the new image.\n"; @@ -2406,8 +2481,14 @@ void vvMainWindow::LinkAllImages() } //------------------------------------------------------------------------------ -void vvMainWindow::AddLink(QString image1,QString image2) +void vvMainWindow::AddLink(QString image1,QString image2,bool fromPanel) { + if (!fromPanel) { + // delegate to linkPanel if call came from elsewhere... + linkPanel->addLinkFromIds(image1, image2); + return; + } + unsigned int sm1 = 0; unsigned int sm2 = 0; @@ -2664,23 +2745,24 @@ void vvMainWindow::UpdateTSlice(int slicer, int slice) //------------------------------------------------------------------------------ void vvMainWindow::UpdateSliceRange(int slicer, int min, int max, int tmin, int tmax) { - int position = int((min+max)/2); + //int position = int((min+max)/2); + int position = mSlicerManagers[mCurrentPickedImageIndex]->GetSlicer(slicer)->GetSlice(); if (slicer == 0) { - NOVerticalSlider->setValue(position); NOVerticalSlider->setRange(min,max); NOHorizontalSlider->setRange(tmin,tmax); + NOVerticalSlider->setValue(position); } else if (slicer == 1) { - NEVerticalSlider->setValue(position); NEVerticalSlider->setRange(min,max); NEHorizontalSlider->setRange(tmin,tmax); + NEVerticalSlider->setValue(position); } else if (slicer == 2) { - SOVerticalSlider->setValue(position); SOVerticalSlider->setRange(min,max); SOHorizontalSlider->setRange(tmin,tmax); + SOVerticalSlider->setValue(position); } else if (slicer == 3) { - SEVerticalSlider->setValue(position); SEVerticalSlider->setRange(min,max); SEHorizontalSlider->setRange(tmin,tmax); + SEVerticalSlider->setValue(position); } } //------------------------------------------------------------------------------ @@ -2888,9 +2970,8 @@ void vvMainWindow::SaveScreenshot(QVTKWidget *widget) vidwriter->SetInput(image); vidwriter->SetFileName(fileName.toStdString().c_str()); vidwriter->Start(); - vvImage * vvImg = mSlicerManagers[smIndex]->GetImage(); - int nSlice = vvImg->GetVTKImages().size(); - for(int i=0; iGetSlicer(0)->GetTMax(); + for(int i=0; i<=nSlice; i++) { mSlicerManagers[smIndex]->SetNextTSlice(0); vtkSmartPointer w2i = vtkSmartPointer::New(); w2i->SetInput(widget->GetRenderWindow()); @@ -2938,7 +3019,7 @@ void vvMainWindow::PlayPause() int image_number=DataTree->topLevelItemCount(); bool has_temporal; for (int i=0; iGetImage()->GetVTKImages().size() > 1) { + if (mSlicerManagers[i]->GetSlicer(0)->GetTMax() > 0) { has_temporal=true; break; } @@ -2959,7 +3040,7 @@ void vvMainWindow::PlayNext() ///Only play one slicer per SM, and only if the SM is being displayed for (int i=0; iGetImage()->GetVTKImages().size() > 1 && + if (mSlicerManagers[i]->GetSlicer(0)->GetTMax() > 0 && DataTree->topLevelItem(i)->data(j+1,Qt::CheckStateRole).toInt() > 0) { mSlicerManagers[i]->SetNextTSlice(j); break; @@ -3068,7 +3149,7 @@ vvSlicerManager* vvMainWindow::AddImage(vvImage::Pointer image,std::string filen DataTree->setItemWidget(item, COLUMN_RELOAD_IMAGE, rButton); //set the id of the image - QString id = slicer_manager->GetFileName().c_str() + QString::number(mSlicerManagers.size()-1); + QString id = QDir::current().absoluteFilePath(slicer_manager->GetFileName().c_str()) + QString::number(mSlicerManagers.size()-1); item->setData(COLUMN_IMAGE_NAME,Qt::UserRole,id.toStdString().c_str()); mSlicerManagers.back()->SetId(id.toStdString());