X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvMainWindow.cxx;h=aa5b5cc7cf9a74e93d2bfa66074a7cebf57075ea;hb=d67434c9a2a790a07d3c832e3956d7eeb6f18c00;hp=abdbd1ae45393729c662180780208c0373505500;hpb=0b04af7278ad344a167c4e8d99e6e67c535f0d95;p=clitk.git diff --git a/vv/vvMainWindow.cxx b/vv/vvMainWindow.cxx index abdbd1a..aa5b5cc 100644 --- a/vv/vvMainWindow.cxx +++ b/vv/vvMainWindow.cxx @@ -44,6 +44,7 @@ #include "vvStructSelector.h" #include "vvMeshReader.h" #include "vvConstants.h" +#include "clitkConfiguration.h" // ITK include #include "itkImage.h" @@ -79,7 +80,7 @@ #define COLUMN_RELOAD_IMAGE 6 #define COLUMN_IMAGE_NAME 7 -#define EXTENSIONS "Images ( *.bmp *.png *.jpeg *.jpg *.tif *.mhd *.hdr *.vox *.his *.xdr)" +#define EXTENSIONS "Images ( *.bmp *.png *.jpeg *.jpg *.tif *.mhd *.hdr *.vox *.his *.xdr *.SCAN )" /*Data Tree values 0,Qt::UserRole full filename @@ -98,10 +99,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); @@ -153,7 +156,7 @@ vvMainWindow::vvMainWindow():vvMainWindowBase() connect(actionAdd_Overlay_to_current_Image,SIGNAL(triggered()), this,SLOT(SelectOverlayImage())); contextMenu.addAction(actionAdd_fusion_image); - connect(actionAdd_fusion_image,SIGNAL(triggered()),this,SLOT(AddFusionImage())); + connect(actionAdd_fusion_image,SIGNAL(triggered()),this,SLOT(SelectFusionImage())); contextActions.push_back(actionAdd_fusion_image); // TRIAL DS @@ -439,7 +442,7 @@ void vvMainWindow::OpenVTKContour() void vvMainWindow::OpenDCStructContour() { if (mSlicerManagers.size() > 0) { - QString Extensions = "Dicom Files ( *.dcm; RS*)"; + QString Extensions = "Dicom Files ( *.dcm RS*)"; Extensions += ";;All Files (*)"; QString file = QFileDialog::getOpenFileName(this,tr("Merge Images"),mInputPathName,Extensions); if (file.isNull()) @@ -753,7 +756,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 +767,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); @@ -899,7 +891,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) { @@ -912,7 +907,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]); } //------------------------------------------------------------------------------ @@ -974,7 +970,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]; @@ -990,7 +986,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]; @@ -1006,7 +1002,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]; @@ -1022,7 +1018,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]; @@ -1875,8 +1871,39 @@ void vvMainWindow::AddOverlayImage(int index, QString file) QMessageBox::information(this,tr("Problem reading image !"),error); } } +//------------------------------------------------------------------------------ -void vvMainWindow::AddFusionImage() + +//------------------------------------------------------------------------------ +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::SelectFusionImage() { int index = GetSlicerIndexFromItem(DataTree->selectedItems()[0]); @@ -1893,74 +1920,80 @@ void vvMainWindow::AddFusionImage() QString Extensions = EXTENSIONS; Extensions += ";;All Files (*)"; QString file = QFileDialog::getOpenFileName(this,tr("Load Fusion image"),mInputPathName,Extensions); - if (!file.isEmpty()) { - 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->ReadImageInformation(); - std::string component = reader->GetComponentTypeAsString(reader->GetComponentType()); - if (reader) { - QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - vvProgressDialog progress("Opening fusion"); - qApp->processEvents(); + if (!file.isEmpty()) + AddFusionImage(index,file); +} +//------------------------------------------------------------------------------ - std::string filename = itksys::SystemTools::GetFilenameWithoutExtension(file.toStdString()).c_str(); - if (mSlicerManagers[index]->SetFusion(file.toStdString(), - reader->GetNumberOfDimensions(), component)) { - //create an item in the tree with good settings - QTreeWidgetItem *item = new QTreeWidgetItem(); - item->setData(0,Qt::UserRole,file.toStdString().c_str()); - item->setData(1,Qt::UserRole,tr("fusion")); - item->setData(COLUMN_IMAGE_NAME,Qt::DisplayRole,filename.c_str()); - qApp->processEvents(); +//------------------------------------------------------------------------------ +void vvMainWindow::AddFusionImage(int index, QString 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->ReadImageInformation(); + std::string component = reader->GetComponentTypeAsString(reader->GetComponentType()); + if (reader) { + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + vvProgressDialog progress("Opening fusion"); + qApp->processEvents(); - for (int j = 1; j <= 4; j++) { - item->setData(j,Qt::CheckStateRole,DataTree->topLevelItem(index)->data(j,Qt::CheckStateRole)); - mSlicerManagers[index]->GetSlicer(j-1)->SetActorVisibility("fusion",0, - DataTree->topLevelItem(index)->data(j,Qt::CheckStateRole).toInt()); - } + std::string filename = itksys::SystemTools::GetFilenameWithoutExtension(file.toStdString()).c_str(); + if (mSlicerManagers[index]->SetFusion(file.toStdString(), + reader->GetNumberOfDimensions(), component)) { + //create an item in the tree with good settings + QTreeWidgetItem *item = new QTreeWidgetItem(); + item->setData(0,Qt::UserRole,file.toStdString().c_str()); + item->setData(1,Qt::UserRole,tr("fusion")); + item->setData(COLUMN_IMAGE_NAME,Qt::DisplayRole,filename.c_str()); + qApp->processEvents(); - //Create the buttons for reload and close - qApp->processEvents(); - QTreePushButton* cButton = new QTreePushButton; - cButton->setItem(item); - cButton->setColumn(COLUMN_CLOSE_IMAGE); - cButton->setToolTip(tr("close image")); - cButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/exit.png"))); - connect(cButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)), - this,SLOT(CloseImage(QTreeWidgetItem*, int))); + for (int j = 1; j <= 4; j++) { + item->setData(j,Qt::CheckStateRole,DataTree->topLevelItem(index)->data(j,Qt::CheckStateRole)); + mSlicerManagers[index]->GetSlicer(j-1)->SetActorVisibility("fusion",0, + DataTree->topLevelItem(index)->data(j,Qt::CheckStateRole).toInt()); + } - QTreePushButton* rButton = new QTreePushButton; - rButton->setItem(item); - rButton->setColumn(COLUMN_RELOAD_IMAGE); - rButton->setToolTip(tr("reload image")); - rButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/rotateright.png"))); - connect(rButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)), - this,SLOT(ReloadImage(QTreeWidgetItem*, int))); + //Create the buttons for reload and close + qApp->processEvents(); + QTreePushButton* cButton = new QTreePushButton; + cButton->setItem(item); + cButton->setColumn(COLUMN_CLOSE_IMAGE); + cButton->setToolTip(tr("close image")); + cButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/exit.png"))); + connect(cButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)), + this,SLOT(CloseImage(QTreeWidgetItem*, int))); - DataTree->topLevelItem(index)->setExpanded(1); - DataTree->topLevelItem(index)->addChild(item); - DataTree->setItemWidget(item, COLUMN_CLOSE_IMAGE, cButton); - DataTree->setItemWidget(item, COLUMN_RELOAD_IMAGE, rButton); + QTreePushButton* rButton = new QTreePushButton; + rButton->setItem(item); + rButton->setColumn(COLUMN_RELOAD_IMAGE); + rButton->setToolTip(tr("reload image")); + rButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/rotateright.png"))); + connect(rButton,SIGNAL(clickedInto(QTreeWidgetItem*, int)), + this,SLOT(ReloadImage(QTreeWidgetItem*, int))); - //set the id of the image - QString id = DataTree->topLevelItem(index)->data(COLUMN_IMAGE_NAME,Qt::UserRole).toString(); - item->setData(COLUMN_IMAGE_NAME,Qt::UserRole,id.toStdString().c_str()); - UpdateTree(); - qApp->processEvents(); - ImageInfoChanged(); - QApplication::restoreOverrideCursor(); - } else { - QApplication::restoreOverrideCursor(); - QString error = "Cannot import the new image.\n"; - error += mSlicerManagers[index]->GetLastError().c_str(); - QMessageBox::information(this,tr("Problem reading image !"),error); - } + DataTree->topLevelItem(index)->setExpanded(1); + DataTree->topLevelItem(index)->addChild(item); + DataTree->setItemWidget(item, COLUMN_CLOSE_IMAGE, cButton); + DataTree->setItemWidget(item, COLUMN_RELOAD_IMAGE, rButton); + + //set the id of the image + QString id = DataTree->topLevelItem(index)->data(COLUMN_IMAGE_NAME,Qt::UserRole).toString(); + item->setData(COLUMN_IMAGE_NAME,Qt::UserRole,id.toStdString().c_str()); + UpdateTree(); + qApp->processEvents(); + ImageInfoChanged(); + QApplication::restoreOverrideCursor(); } else { + QApplication::restoreOverrideCursor(); QString error = "Cannot import the new image.\n"; + error += mSlicerManagers[index]->GetLastError().c_str(); QMessageBox::information(this,tr("Problem reading image !"),error); } + } else { + QString error = "Cannot import the new image.\n"; + QMessageBox::information(this,tr("Problem reading image !"),error); } } //------------------------------------------------------------------------------ @@ -2360,7 +2393,6 @@ void vvMainWindow::NEVerticalSliderChanged() //------------------------------------------------------------------------------ void vvMainWindow::SOVerticalSliderChanged() { - // DD("SOVerticalSliderChanged"); static int value=-1; // DD(value); // DD(SOVerticalSlider->value()); @@ -2680,13 +2712,36 @@ void vvMainWindow::SurfaceViewerLaunch() vvSurfaceViewerDialog surfaceViewer; surfaceViewer.exec(); } +//------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ -void vvMainWindow::AddImage(vvImage::Pointer image,std::string filename) +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; +} +//------------------------------------------------------------------------------ + + +//------------------------------------------------------------------------------ +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 @@ -2758,6 +2813,9 @@ void vvMainWindow::AddImage(vvImage::Pointer image,std::string filename) ShowLastImage(); InitDisplay(); qApp->processEvents(); + + // End + return slicer_manager; } //------------------------------------------------------------------------------