]> Creatis software - clitk.git/commitdiff
fusion sequence: artificially thicken the US images to avoid slices being *hidden...
authorrblanc <rblanc33@gmail.com>
Mon, 22 Apr 2013 16:47:38 +0000 (18:47 +0200)
committerrblanc <rblanc33@gmail.com>
Mon, 22 Apr 2013 16:47:38 +0000 (18:47 +0200)
vv/vvMainWindow.cxx
vv/vvSlicerManager.cxx

index ca0f542989b9fb6f715de7b8c483e38554d4c30e..409919f8019a8bca8105a8beac2ff7fce97fc859 100644 (file)
@@ -1642,6 +1642,24 @@ void vvMainWindow::CloseImage(QTreeWidgetItem* item, int column)
       }
       //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);
 
@@ -1653,9 +1671,7 @@ void vvMainWindow::CloseImage(QTreeWidgetItem* item, int column)
             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);
@@ -2588,8 +2604,15 @@ void vvMainWindow::AddFusionSequence(int index, std::vector<std::string> fileNam
 
       //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();
       }
@@ -2612,7 +2635,7 @@ void vvMainWindow::AddFusionSequence(int index, std::vector<std::string> fileNam
       error += mSlicerManagers[index]->GetLastError().c_str();
       QMessageBox::information(this,tr("Problem reading image !"),error);
     }
-    //WindowLevelChanged();
+    WindowLevelChanged();
     ImageInfoChanged(); //this internally calls WindowLevelChanged...
   }
   else {
index 24ec62a36d6d8473d0a6c8cb61aa34b067362cce..5afe71bd9a2df0ce2f5265916ba47f787a2ad78d 100644 (file)
@@ -965,6 +965,10 @@ void vvSlicerManager::ReloadFusion()
 //the secondary sequence is being reloaded.\r
 void vvSlicerManager::ReloadFusionSequence()\r
 {\r
+  //  this is to keep the slice thickness, which needs to be artificially increased for visualization\r
+  double sp_x, sp_y, sp_z;\r
+  this->GetImage()->GetVTKImages()[0]->GetSpacing(sp_x, sp_y, sp_z);\r
+\r
   mFusionSequenceReader->Update(mImage->GetNumberOfDimensions(),mFusionComponent.c_str(),vvImageReader::MERGEDWITHTIME);\r
 \r
   for ( unsigned int i = 0; i < mSlicers.size(); i++) {\r
@@ -984,6 +988,13 @@ void vvSlicerManager::ReloadFusionSequence()
          this->AddFusionSequenceInitialTransformMatrices( mFusionSequenceReader->GetOutput()->GetTransform()[i]->GetMatrix() );\r
   }\r
 \r
+  //  also update the slice thickness\r
+  for (unsigned i=0 ; i<this->GetImage()->GetTransform().size() ; i++) {\r
+    sp_x = this->GetImage()->GetVTKImages()[i]->GetSpacing()[0];\r
+    sp_y = this->GetImage()->GetVTKImages()[i]->GetSpacing()[1];\r
+    this->GetImage()->GetVTKImages()[i]->SetSpacing( sp_x, sp_y, sp_z);\r
+  }\r
+\r
 }\r
 //----------------------------------------------------------------------------\r
 \r