X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvMainWindow.cxx;h=5cf7c9810cbeb46e7cc83f67773edc59be3f205a;hb=1c402506d8f184899673b73f5def6bd98d73f116;hp=e9d4e8d8435ff075614b1de0cc49e5cc0f791214;hpb=9b0c1e68a5406bab48d7e4a6d5a22baa3a31d027;p=clitk.git diff --git a/vv/vvMainWindow.cxx b/vv/vvMainWindow.cxx index e9d4e8d..5cf7c98 100644 --- a/vv/vvMainWindow.cxx +++ b/vv/vvMainWindow.cxx @@ -100,7 +100,11 @@ #define COLUMN_RELOAD_IMAGE 6 #define COLUMN_IMAGE_NAME 7 -#define EXTENSIONS "Images ( *.bmp *.png *.jpeg *.jpg *.tif *.mhd *.mha *.hdr *.vox *.his *.xdr *.SCAN *.nii *.nrrd *.nhdr)" +#if CLITK_PRIVATE_FEATURES + #define EXTENSIONS "Images ( *.bmp *.png *.jpeg *.jpg *.tif *.mhd *.mha *.hdr *.vox *.his *.xdr *.SCAN *.nii *.nrrd *.nhdr *.refscan *.usf *.svl)" +#else + #define EXTENSIONS "Images ( *.bmp *.png *.jpeg *.jpg *.tif *.mhd *.mha *.hdr *.vox *.his *.xdr *.SCAN *.nii *.nrrd *.nhdr *.refscan)" +#endif /*Data Tree values 0,Qt::UserRole full filename @@ -305,19 +309,19 @@ vvMainWindow::vvMainWindow():vvMainWindowBase() connect(levelSpinBox,SIGNAL(editingFinished()),this,SLOT(WindowLevelEdited())); connect(colorMapComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(UpdateColorMap())); connect(presetComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(UpdateWindowLevel())); + connect(slicingPresetComboBox, SIGNAL(currentIndexChanged(int)),this,SLOT(UpdateSlicingPreset())); connect(inverseButton,SIGNAL(clicked()),this,SLOT(SwitchWindowLevel())); connect(applyWindowLevelToAllButton,SIGNAL(clicked()),this,SLOT(ApplyWindowLevelToAllImages())); - 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)), this,SLOT(SetOverlayProperty(int,int,double,double))); - connect(overlayPanel,SIGNAL(FusionPropertyUpdated(int,int,int,double,double)), - this,SLOT(SetFusionProperty(int,int,int,double,double))); + connect(overlayPanel,SIGNAL(FusionPropertyUpdated(int,int,int,double,double, bool)), + this,SLOT(SetFusionProperty(int,int,int,double,double, bool))); connect(landmarksPanel,SIGNAL(UpdateRenderWindows()),this,SLOT(UpdateRenderWindows())); playMode = 0;//pause @@ -924,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()); @@ -948,6 +952,8 @@ void vvMainWindow::LoadImages(std::vector files, vvImageReader::Loa this,SLOT(UpdateSlice(int,int))); connect(mSlicerManagers.back(), SIGNAL(UpdateTSlice(int, int)), this,SLOT(UpdateTSlice(int, int))); + connect(mSlicerManagers.back(), SIGNAL(UpdateTSlice(int, int)), + this,SLOT(ImageInfoChanged())); connect(mSlicerManagers.back(), SIGNAL(UpdateSliceRange(int,int,int,int,int)), this,SLOT(UpdateSliceRange(int,int,int,int,int))); connect(mSlicerManagers.back(), SIGNAL(UpdateLinkManager(std::string,int,double,double,double,int)), @@ -1080,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); @@ -1093,21 +1100,28 @@ void vvMainWindow::ImageInfoChanged() //read image header int NPixel = 1; + int tSlice = 0; vvImage::Pointer imageSelected; if (DataTree->topLevelItem(index) == DataTree->selectedItems()[0]) { imageSelected = mSlicerManagers[index]->GetSlicer(0)->GetImage(); + tSlice = mSlicerManagers[index]->GetSlicer(0)->GetTSlice(); } else if (DataTree->selectedItems()[0]->data(1,Qt::UserRole).toString() == "vector") { imageSelected = mSlicerManagers[index]->GetSlicer(0)->GetVF(); + tSlice = mSlicerManagers[index]->GetSlicer(0)->GetOverlayTSlice(); } else if (DataTree->selectedItems()[0]->data(1,Qt::UserRole).toString() == "overlay") { imageSelected = mSlicerManagers[index]->GetSlicer(0)->GetOverlay(); + tSlice = mSlicerManagers[index]->GetSlicer(0)->GetOverlayTSlice(); } else if (DataTree->selectedItems()[0]->data(1,Qt::UserRole).toString() == "fusion") { imageSelected = mSlicerManagers[index]->GetSlicer(0)->GetFusion(); + tSlice = mSlicerManagers[index]->GetSlicer(0)->GetFusionTSlice(); } else if (DataTree->selectedItems()[0]->data(1,Qt::UserRole).toString() == "contour") { imageSelected = mSlicerManagers[index]->GetSlicer(0)->GetImage(); + tSlice = mSlicerManagers[index]->GetSlicer(0)->GetTSlice(); } else { imageSelected = mSlicerManagers[index]->GetSlicer(0)->GetImage(); + tSlice = mSlicerManagers[index]->GetSlicer(0)->GetTSlice(); } dimension = imageSelected->GetNumberOfDimensions(); @@ -1135,7 +1149,7 @@ void vvMainWindow::ImageInfoChanged() infoPanel->setOrigin(GetVectorDoubleAsString(origin)); infoPanel->setSpacing(GetVectorDoubleAsString(inputSpacing)); infoPanel->setNPixel(QString::number(NPixel)+" ("+inputSizeInBytes+")"); - transformation = imageSelected->GetTransform()->GetMatrix(); + transformation = imageSelected->GetTransform()[tSlice]->GetMatrix(); infoPanel->setTransformation(Get4x4MatrixDoubleAsString(transformation)); landmarksPanel->SetCurrentLandmarks(mSlicerManagers[index]->GetLandmarks(), @@ -1172,6 +1186,7 @@ void vvMainWindow::ImageInfoChanged() } } WindowLevelChanged(); + slicingPresetComboBox->setCurrentIndex(mSlicerManagers[index]->GetSlicingPreset()); if (mSlicerManagers[index]->GetSlicer(0)->GetVF()) { overlayPanel->getVFName(mSlicerManagers[index]->GetVFName().c_str()); @@ -1229,25 +1244,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(); /* @@ -1255,10 +1315,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(); } } //------------------------------------------------------------------------------ @@ -1486,38 +1548,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); } //------------------------------------------------------------------------------ @@ -1717,6 +1769,16 @@ void vvMainWindow::UpdateWindowLevel() } //------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +void vvMainWindow::UpdateSlicingPreset() +{ + if (DataTree->selectedItems().size()) { + int index = GetSlicerIndexFromItem(DataTree->selectedItems()[0]); + mSlicerManagers[index]->SetSlicingPreset(vvSlicerManager::SlicingPresetType(slicingPresetComboBox->currentIndex())); + } +} +//------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ void vvMainWindow::UpdateColorMap() { @@ -1756,6 +1818,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) { @@ -1841,21 +1929,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(); @@ -1864,7 +1959,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()); @@ -1908,6 +2003,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"; @@ -2221,7 +2320,7 @@ void vvMainWindow::SetOverlayProperty(int color, int linked, double window, doub //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ -void vvMainWindow::SetFusionProperty(int opacity, int thresOpacity, int colormap,double window, double level) +void vvMainWindow::SetFusionProperty(int opacity, int thresOpacity, int colormap,double window, double level, bool showLegend) { int index = GetSlicerIndexFromItem(DataTree->selectedItems()[0]); if (mSlicerManagers[index]->GetSlicer(0)->GetFusion()) { @@ -2230,6 +2329,7 @@ void vvMainWindow::SetFusionProperty(int opacity, int thresOpacity, int colormap mSlicerManagers[index]->SetFusionThresholdOpacity(thresOpacity); mSlicerManagers[index]->SetFusionWindow(window); mSlicerManagers[index]->SetFusionLevel(level); + mSlicerManagers[index]->SetFusionShowLegend(showLegend); mSlicerManagers[index]->SetColorMap(0); mSlicerManagers[index]->Render(); } @@ -2303,7 +2403,8 @@ void vvMainWindow::SaveAs() bool bId = true; for(int i=0; i<4; i++) for(int j=0; j<4; j++) { - double elt = mSlicerManagers[index]->GetImage()->GetTransform()->GetMatrix()->GetElement(i,j); + // TODO SR and BP: check on the list of transforms and not the first only + double elt = mSlicerManagers[index]->GetImage()->GetTransform()[0]->GetMatrix()->GetElement(i,j); if(i==j && elt!=1.) bId = false; if(i!=j && elt!=0.) @@ -2387,8 +2488,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; @@ -2645,23 +2752,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); } } //------------------------------------------------------------------------------ @@ -2779,19 +2887,19 @@ void vvMainWindow::SaveScreenshot(QVTKWidget *widget) w2i->Update(); vtkImageData *image = w2i->GetOutput(); - const char *ext = fileName.toStdString().c_str() + strlen(fileName.toStdString().c_str()) - 4; + std::string ext(itksys::SystemTools::GetFilenameLastExtension(fileName.toStdString())); // Image vtkImageWriter *imgwriter = NULL; - if (!strcmp(ext, ".bmp")) + if (ext==".bmp") imgwriter = vtkBMPWriter::New(); - else if (!strcmp(ext, ".tif")) + else if (ext==".tif") imgwriter = vtkTIFFWriter::New(); - else if (!strcmp(ext, ".ppm")) + else if (ext==".ppm") imgwriter = vtkPNMWriter::New(); - else if (!strcmp(ext, ".png")) + else if (ext==".png") imgwriter = vtkPNGWriter::New(); - else if (!strcmp(ext, ".jpg")) + else if (ext==".jpg") imgwriter = vtkJPEGWriter::New(); // Snapshot image if not null @@ -2804,8 +2912,8 @@ void vvMainWindow::SaveScreenshot(QVTKWidget *widget) // Video vtkGenericMovieWriter *vidwriter = NULL; -#ifdef CLITK_EXPERIMENTAL - if (!strcmp(ext, ".gif")) { +#if CLITK_EXPERIMENTAL == 1 + if (ext==".gif") { vvAnimatedGIFWriter *gif = vvAnimatedGIFWriter::New(); vidwriter = gif; @@ -2821,10 +2929,17 @@ void vvMainWindow::SaveScreenshot(QVTKWidget *widget) tr("Number of loops (0 means infinite):"), 0, 0, 1000000000, 1, &ok); if(ok) gif->SetLoops(loops); + + // Dithering + QString msg = "Would you like to activate dithering?"; + QMessageBox msgBox(QMessageBox::Question, tr("Dithering"),msg, 0, this); + msgBox.addButton(tr("Yes"), QMessageBox::AcceptRole); + msgBox.addButton(tr("No"), QMessageBox::RejectRole); + gif->SetDither(msgBox.exec() == QMessageBox::AcceptRole); } #endif #ifdef VTK_USE_VIDEO_FOR_WINDOWS - if (!strcmp(ext, ".avi")) { + if (ext==".avi") { vtkAVIWriter *mpg = vtkAVIWriter::New(); vidwriter = mpg; mpg->SetQuality(2); @@ -2837,7 +2952,7 @@ void vvMainWindow::SaveScreenshot(QVTKWidget *widget) } #endif #ifdef VTK_USE_FFMPEG_ENCODER - if (!strcmp(ext, ".avi")) { + if (ext==".avi") { vtkFFMPEGWriter *mpg = vtkFFMPEGWriter::New(); vidwriter = mpg; mpg->SetQuality(2); @@ -2851,7 +2966,7 @@ void vvMainWindow::SaveScreenshot(QVTKWidget *widget) } #endif #ifdef VTK_USE_MPEG2_ENCODER - if (!strcmp(ext, ".mpg")) { + if (ext==".mpg") { vtkMPEG2Writer *mpg = vtkMPEG2Writer::New(); vidwriter = mpg; } @@ -2862,9 +2977,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()); @@ -2912,7 +3026,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; } @@ -2933,7 +3047,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; @@ -2956,6 +3070,12 @@ void vvMainWindow::ShowLastImage() //------------------------------------------------------------------------------ void vvMainWindow::UpdateRenderWindows() { + for (unsigned int i = 0; i < mSlicerManagers.size(); i++) { + mSlicerManagers[i]->GetSlicer(0)->UpdateLandmarks(); + mSlicerManagers[i]->GetSlicer(1)->UpdateLandmarks(); + mSlicerManagers[i]->GetSlicer(2)->UpdateLandmarks(); + mSlicerManagers[i]->GetSlicer(3)->UpdateLandmarks(); + } if (NOViewWidget->GetRenderWindow()) NOViewWidget->GetRenderWindow()->Render(); if (NEViewWidget->GetRenderWindow()) NEViewWidget->GetRenderWindow()->Render(); if (SOViewWidget->GetRenderWindow()) SOViewWidget->GetRenderWindow()->Render(); @@ -3042,7 +3162,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()); @@ -3067,6 +3187,8 @@ vvSlicerManager* vvMainWindow::AddImage(vvImage::Pointer image,std::string filen this,SLOT(UpdateSlice(int,int))); connect(mSlicerManagers.back(), SIGNAL(UpdateTSlice(int, int)), this,SLOT(UpdateTSlice(int, int))); + connect(mSlicerManagers.back(), SIGNAL(UpdateTSlice(int, int)), + this,SLOT(ImageInfoChanged())); connect(mSlicerManagers.back(), SIGNAL(UpdateSliceRange(int,int,int,int,int)), this,SLOT(UpdateSliceRange(int,int,int,int,int))); connect(mSlicerManagers.back(), SIGNAL(UpdateLinkManager(std::string,int,double,double,double,int)),