X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvMainWindow.cxx;h=10dc42d012885709d621a0ded415d650d6122c10;hb=870c69d4433f861755085ce2e398032223768a94;hp=c0abea3568925f6f8d698f48b143de4f20ee854f;hpb=db5359713d94f0dbc38b7f8060ad120f69ec3df4;p=clitk.git diff --git a/vv/vvMainWindow.cxx b/vv/vvMainWindow.cxx index c0abea3..10dc42d 100644 --- a/vv/vvMainWindow.cxx +++ b/vv/vvMainWindow.cxx @@ -98,10 +98,12 @@ vvMainWindow::vvMainWindow():vvMainWindowBase() mInputPathName = ""; mMenuTools = menuTools; + // mMenuSegmentation = menuSegmentation; mContextMenu = &contextMenu; mMenuExperimentalTools = menuExperimental; mMainWidget = this; mCurrentTime = -1; + mCurrentSelectedImageId = ""; //Init the contextMenu this->setContextMenuPolicy(Qt::CustomContextMenu); @@ -753,7 +755,7 @@ void vvMainWindow::LoadImages(std::vector files, LoadedImageType fi //open images as 1 or multiples for (int i = 0; i < fileSize; i++) { - progress.Update("Opening " + files[i]); + progress.SetText("Opening " + files[i]); progress.SetProgress(i,fileSize); qApp->processEvents(); @@ -764,18 +766,7 @@ void vvMainWindow::LoadImages(std::vector files, LoadedImageType fi bool SetImageSucceed=false; // Change filename if an image with the same already exist - // DD(files[i]); - int number=0; - for(unsigned int l=0; lGetBaseFileName()); - // DD(v->GetFileName()); - if (v->GetBaseFileName() == - vtksys::SystemTools::GetFilenameName(vtksys::SystemTools::GetFilenameWithoutLastExtension(files[i]))) { - number = std::max(number, v->GetBaseFileNameNumber()+1); - } - } - + int number = GetImageDuplicateFilenameNumber(files[i]); if (filetype == IMAGE || filetype == IMAGEWITHTIME) SetImageSucceed = imageManager->SetImage(files[i],filetype, number); @@ -849,6 +840,8 @@ void vvMainWindow::LoadImages(std::vector files, LoadedImageType fi this,SLOT(UpdateSliceRange(int,int,int,int,int))); connect(mSlicerManagers.back(), SIGNAL(UpdateLinkManager(std::string,int,double,double,double,int)), this,SLOT(UpdateLinkManager(std::string,int,double,double,double,int))); + connect(mSlicerManagers.back(), SIGNAL(UpdateLinkedNavigation(std::string,vvSlicerManager*)), + this,SLOT(UpdateLinkedNavigation(std::string,vvSlicerManager*))); connect(mSlicerManagers.back(), SIGNAL(ChangeImageWithIndexOffset(vvSlicerManager*,int,int)), this,SLOT(ChangeImageWithIndexOffset(vvSlicerManager*,int,int))); connect(mSlicerManagers.back(),SIGNAL(LandmarkAdded()),landmarksPanel,SLOT(AddPoint())); @@ -897,7 +890,10 @@ void vvMainWindow::UpdateTree() //------------------------------------------------------------------------------ void vvMainWindow::CurrentImageChanged(std::string id) { - // DD("CurrentImageChanged"); + // DD("CurrentImageChanged"); +// DD(id); +// DD(mCurrentSelectedImageId); + if (id == mCurrentSelectedImageId) return; // Do nothing int selected = 0; for (int i = 0; i < DataTree->topLevelItemCount(); i++) { if (DataTree->topLevelItem(i)->data(COLUMN_IMAGE_NAME,Qt::UserRole).toString().toStdString() == id) { @@ -910,7 +906,8 @@ void vvMainWindow::CurrentImageChanged(std::string id) } DataTree->topLevelItem(selected)->setSelected(1); - // DD(mSlicerManagers[selected]->GetFileName()); + // DD(mSlicerManagers[selected]->GetFileName()); + mCurrentSelectedImageId = id; emit SelectedImageHasChanged(mSlicerManagers[selected]); } //------------------------------------------------------------------------------ @@ -972,7 +969,7 @@ void vvMainWindow::ImageInfoChanged() inputSpacing.resize(dimension); inputSize.resize(dimension); sizeMM.resize(dimension); - pixelType = mSlicerManagers[index]->GetImage()->GetScalarTypeAsString().c_str(); + pixelType = mSlicerManagers[index]->GetImage()->GetScalarTypeAsITKString().c_str(); for (int i = 0; i < dimension; i++) { origin[i] = imageSelected->GetOrigin()[i]; inputSpacing[i] = imageSelected->GetSpacing()[i]; @@ -988,7 +985,7 @@ void vvMainWindow::ImageInfoChanged() inputSpacing.resize(dimension); inputSize.resize(dimension); sizeMM.resize(dimension); - pixelType = mSlicerManagers[index]->GetVF()->GetScalarTypeAsString().c_str(); + pixelType = mSlicerManagers[index]->GetVF()->GetScalarTypeAsITKString().c_str(); for (int i = 0; i < dimension; i++) { origin[i] = imageSelected->GetOrigin()[i]; inputSpacing[i] = imageSelected->GetSpacing()[i]; @@ -1004,7 +1001,7 @@ void vvMainWindow::ImageInfoChanged() inputSpacing.resize(dimension); inputSize.resize(dimension); sizeMM.resize(dimension); - pixelType = mSlicerManagers[index]->GetImage()->GetScalarTypeAsString().c_str(); + pixelType = mSlicerManagers[index]->GetImage()->GetScalarTypeAsITKString().c_str(); for (int i = 0; i < dimension; i++) { origin[i] = imageSelected->GetOrigin()[i]; inputSpacing[i] = imageSelected->GetSpacing()[i]; @@ -1020,7 +1017,7 @@ void vvMainWindow::ImageInfoChanged() inputSpacing.resize(dimension); inputSize.resize(dimension); sizeMM.resize(dimension); - pixelType = mSlicerManagers[index]->GetImage()->GetScalarTypeAsString().c_str(); + pixelType = mSlicerManagers[index]->GetImage()->GetScalarTypeAsITKString().c_str(); for (int i = 0; i < dimension; i++) { origin[i] = imageSelected->GetOrigin()[i]; inputSpacing[i] = imageSelected->GetSpacing()[i]; @@ -1606,6 +1603,8 @@ void vvMainWindow::SplitImage() this,SLOT(UpdateSliceRange(int,int,int,int,int))); connect(mSlicerManagers.back(),SIGNAL(UpdateLinkManager(std::string,int,double,double,double,int)), this,SLOT(UpdateLinkManager(std::string,int,double,double,double,int))); + connect(mSlicerManagers.back(), SIGNAL(UpdateLinkedNavigation(std::string,vvSlicerManager*)), + this,SLOT(UpdateLinkedNavigation(std::string,vvSlicerManager*))); connect(mSlicerManagers.back(),SIGNAL(LandmarkAdded()),landmarksPanel,SLOT(AddPoint())); UpdateTree(); qApp->processEvents(); @@ -1725,6 +1724,17 @@ void vvMainWindow::UpdateLinkManager(std::string id, int slicer, double x, doubl } //------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +void vvMainWindow::UpdateLinkedNavigation(std::string id, vvSlicerManager * sm) +{ + for (unsigned int i = 0; i < mSlicerManagers.size(); i++) { + if (id == mSlicerManagers[i]->GetId()) { + mSlicerManagers[i]->UpdateLinkedNavigation(sm->GetSlicer(0)); + } + } +} +//------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ void vvMainWindow::ShowContextMenu(QPoint point) { @@ -1860,7 +1870,38 @@ void vvMainWindow::AddOverlayImage(int index, QString file) QMessageBox::information(this,tr("Problem reading image !"),error); } } +//------------------------------------------------------------------------------ + + +//------------------------------------------------------------------------------ +void vvMainWindow::AddROI(int index, QString file) +{ + DD("AddImageAndROI"); + /* + // Get slice manager + + // Load image + + vvImageReader * mReader = new vvImageReader; + mReader->SetInputFilename(filename.toStdString()); + mReader->Update(IMAGE); + if (mReader->GetLastError().size() != 0) { + std::cerr << "Error while reading " << filename.toStdString() << std::endl; + QString error = "Cannot open file \n"; + error += mReader->GetLastError().c_str(); + QMessageBox::information(this,tr("Reading problem"),error); + delete mReader; + return; + } + vvImage::Pointer roi = mReader->GetOutput(); + + // Create roi in new tool + vvToolStructureSetManager::AddImage(mCurrentSlicerManager, roi); +*/ +} +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ void vvMainWindow::AddFusionImage() { int index = GetSlicerIndexFromItem(DataTree->selectedItems()[0]); @@ -2301,23 +2342,21 @@ void vvMainWindow::NOVerticalSliderChanged() if (value == NOVerticalSlider->value()) return; else value = NOVerticalSlider->value(); // int value = NOVerticalSlider->value(); - for (unsigned int i = 0; i < mSlicerManagers.size(); i++) - { - if (DataTree->topLevelItem(i)->data(COLUMN_UL_VIEW,Qt::CheckStateRole).toInt() > 1) - { - if (mSlicerManagers[i]->GetSlicer(0)->GetSlice() != value) { - mSlicerManagers[i]->GetSlicer(0)->SetSlice(value); - mSlicerManagers[i]->VerticalSliderHasChanged(0, value); - - // If nor Update/Render -> slider not work - // only render = ok navigation, but for contour Update needed but slower ? - - mSlicerManagers[i]->UpdateSlice(0); // <-- DS add this. Not too much update ? YES. but needed for ImageContour ... - //mSlicerManagers[i]->GetSlicer(0)->Render(); // <-- DS add this, needed for contour, seems ok ? not too slow ? - } - break; - } + for (unsigned int i = 0; i < mSlicerManagers.size(); i++) { + if (DataTree->topLevelItem(i)->data(COLUMN_UL_VIEW,Qt::CheckStateRole).toInt() > 1) { + if (mSlicerManagers[i]->GetSlicer(0)->GetSlice() != value) { + mSlicerManagers[i]->GetSlicer(0)->SetSlice(value); + mSlicerManagers[i]->VerticalSliderHasChanged(0, value); + + // If nor Update/Render -> slider not work + // only render = ok navigation, but for contour Update needed but slower ? + + mSlicerManagers[i]->UpdateSlice(0); // <-- DS add this. Not too much update ? YES. but needed for ImageContour ... + //mSlicerManagers[i]->GetSlicer(0)->Render(); // <-- DS add this, needed for contour, seems ok ? not too slow ? + } + break; } + } } //------------------------------------------------------------------------------ @@ -2347,7 +2386,6 @@ void vvMainWindow::NEVerticalSliderChanged() //------------------------------------------------------------------------------ void vvMainWindow::SOVerticalSliderChanged() { - // DD("SOVerticalSliderChanged"); static int value=-1; // DD(value); // DD(SOVerticalSlider->value()); @@ -2667,13 +2705,36 @@ void vvMainWindow::SurfaceViewerLaunch() vvSurfaceViewerDialog surfaceViewer; surfaceViewer.exec(); } +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +int vvMainWindow::GetImageDuplicateFilenameNumber(std::string filename) +{ + int number=0; + for(unsigned int l=0; lGetBaseFileName() == + vtksys::SystemTools::GetFilenameName(vtksys::SystemTools::GetFilenameWithoutLastExtension(filename))) { + number = std::max(number, v->GetBaseFileNameNumber()+1); + } + } + return number; +} //------------------------------------------------------------------------------ -void vvMainWindow::AddImage(vvImage::Pointer image,std::string filename) + + +//------------------------------------------------------------------------------ +vvSlicerManager* vvMainWindow::AddImage(vvImage::Pointer image,std::string filename) { + // Change filename if another image exist with the same name + int number = GetImageDuplicateFilenameNumber(filename); + + // Create new SliceManager vvSlicerManager* slicer_manager = new vvSlicerManager(4); - slicer_manager->SetImage(image); - slicer_manager->SetFilename(filename); + slicer_manager->SetImage(image);//, IMAGE, number); + // filename = filename+"_"+clitk::toString(number); + slicer_manager->SetFilename(filename, number); mSlicerManagers.push_back(slicer_manager); //create an item in the tree with good settings @@ -2734,6 +2795,8 @@ void vvMainWindow::AddImage(vvImage::Pointer image,std::string filename) this,SLOT(UpdateSliceRange(int,int,int,int,int))); connect(mSlicerManagers.back(), SIGNAL(UpdateLinkManager(std::string,int,double,double,double,int)), this,SLOT(UpdateLinkManager(std::string,int,double,double,double,int))); + connect(mSlicerManagers.back(), SIGNAL(UpdateLinkedNavigation(std::string,vvSlicerManager*)), + this,SLOT(UpdateLinkedNavigation(std::string,vvSlicerManager*))); connect(mSlicerManagers.back(), SIGNAL(ChangeImageWithIndexOffset(vvSlicerManager*,int,int)), this,SLOT(ChangeImageWithIndexOffset(vvSlicerManager*,int,int))); connect(mSlicerManagers.back(), SIGNAL(LandmarkAdded()),landmarksPanel,SLOT(AddPoint())); @@ -2743,6 +2806,9 @@ void vvMainWindow::AddImage(vvImage::Pointer image,std::string filename) ShowLastImage(); InitDisplay(); qApp->processEvents(); + + // End + return slicer_manager; } //------------------------------------------------------------------------------