connect(actionWarp_image_with_vector_field,SIGNAL(triggered()),this,SLOT(WarpImage()));
connect(actionLoad_images,SIGNAL(triggered()),this,SLOT(OpenImages()));
connect(actionOpen_Dicom,SIGNAL(triggered()),this,SLOT(OpenDicom()));
- connect(actionOpen_Dicom_Struct,SIGNAL(triggered()),this,SLOT(OpenDCStructContour()));
+ // connect(actionOpen_Dicom_Struct,SIGNAL(triggered()),this,SLOT(OpenDCStructContour()));
connect(actionOpen_VTK_contour,SIGNAL(triggered()),this,SLOT(OpenVTKContour()));
connect(actionOpen_Multiple_Images_As_One,SIGNAL(triggered()),this,SLOT(MergeImages()));
connect(actionSlice_Image_As_Multiple_Images,SIGNAL(triggered()),this,SLOT(SliceImages()));
brush.setColor(QColor(contour->r*255,contour->g*255,contour->b*255));
brush.setStyle(Qt::SolidPattern);
item->setData(COLUMN_IMAGE_NAME,Qt::BackgroundRole,brush);
- item->setData(COLUMN_IMAGE_NAME,Qt::DisplayRole,contour->structure_name.c_str());
+ // item->setData(COLUMN_IMAGE_NAME,Qt::DisplayRole,contour->structure_name.c_str());
for (int j = 1; j <= 4; j++)
item->setData(j,Qt::CheckStateRole,DataTree->topLevelItem(image_index)->data(j,Qt::CheckStateRole));
{
std::vector<std::string> files;
- std::cout << "dicomSeriesSelector " << std::endl;
+ //std::cout << "dicomSeriesSelector " << std::endl;
if (dicomSeriesSelector->exec() == QDialog::Accepted) {
files = *(dicomSeriesSelector->GetFilenames());
LoadImages(files, vvImageReader::DICOM);
}
//if the slicer manager was involved in a fusion sequence visualization...
if ( mSlicerManagers[index]->IsInvolvedInFusionSequence() ) {
+ //in both cases, close the overlay: find it... and close it
+ //ideally, I should duplicate the code, and avoid calling CloseImage, since this pops up another interactive box
+ QTreeWidgetItem* overlayItem;
+ if (mSlicerManagers[index]->IsMainSequenceOfFusionSequence()) {
+ for (unsigned i=0 ; i<item->childCount() ; i++) {
+ overlayItem = item->child(i);
+ this->CloseImage( overlayItem, 0 );
+ }
+ }
+ else {
+ QTreeWidgetItem* linkedItem = this->GetItemFromSlicerManager( mSlicerManagers[mSlicerManagers[index]->GetFusionSequenceIndexOfLinkedManager()] );
+ for (unsigned i=0 ; i<linkedItem->childCount() ; i++) {
+ overlayItem = linkedItem->child(i);
+ this->CloseImage( overlayItem, 0 );
+ }
+ }
+
+ /* -- this is normally already done when closing the overlay.
//reset the transforms
overlayPanel->getFusionSequenceProperty(-1, false, 0, false);
mSlicerManagers[index]->GetSlicer(i)->SetFusionSequenceCode(-1);
mSlicerManagers[mSlicerManagers[index]->GetFusionSequenceIndexOfLinkedManager()]->GetSlicer(i)->SetFusionSequenceCode(-1);
}
-
- //TODO: also remove the image overlaid with the main sequence, as it is becoming invalid...
- //this shall be done by calling this->CloseImage() with the correct index;...
+ */
}
linkPanel->removeImage(index);
bool signalOK = true;
unsigned nbFrameMain = mSlicerManagers[index]->GetImage()->GetTransform().size();
unsigned nbFrameSecondary = mSlicerManagers[index]->GetFusionSequenceNbFrames();
-
+std::cout<<"nbFrameMain = "<<nbFrameMain<<", nbFrameSecondary= "<<nbFrameSecondary<<", signal size: "<<tmpVect.size()<<std::endl;
std::vector<unsigned> temporalCorrespondances;
if ( tmpVect.size() == nbFrameMain + nbFrameSecondary ) {
for (unsigned i=0 ; i<tmpVect.size() ; i++) {
mInputPathName = itksys::SystemTools::GetFilenamePath(file.toStdString()).c_str();
itk::ImageIOBase::Pointer reader = itk::ImageIOFactory::CreateImageIO(
file.toStdString().c_str(), itk::ImageIOFactory::ReadMode);
+ std::sort (fileNames.begin(), fileNames.end());//make sure the files are sorted.
reader->SetFileName(fileNames[0].c_str());
reader->ReadImageInformation();
std::string component = reader->GetComponentTypeAsString(reader->GetComponentType());
//This loads the secondary sequence (US) as an independent sequence
LoadImages(fileNames, type);
- //reset the transforms to identiy
+ //reset the transforms to identity
+ //FIX -- and set the thickness of the US slices to a large value (necessary for visualization purposes...)
+ double sp_x, sp_y, sp_z;
+ mSlicerManagers[indexParent]->GetImage()->GetVTKImages()[0]->GetSpacing(sp_x, sp_y, sp_z);
+ sp_z = std::max(sp_x, std::max(sp_y, sp_z)) + 0.5; //
for (unsigned i=0 ; i<mSlicerManagers.back()->GetImage()->GetTransform().size() ; i++) {
+ sp_x = mSlicerManagers.back()->GetImage()->GetVTKImages()[i]->GetSpacing()[0];
+ sp_y = mSlicerManagers.back()->GetImage()->GetVTKImages()[i]->GetSpacing()[1];
+ mSlicerManagers.back()->GetImage()->GetVTKImages()[i]->SetSpacing( sp_x, sp_y, sp_z);
mSlicerManagers.back()->GetImage()->GetTransform()[i]->Identity();
mSlicerManagers.back()->GetImage()->GetTransform()[i]->Update();
}
error += mSlicerManagers[index]->GetLastError().c_str();
QMessageBox::information(this,tr("Problem reading image !"),error);
}
- //WindowLevelChanged();
+ WindowLevelChanged();
ImageInfoChanged(); //this internally calls WindowLevelChanged...
}
else {