]> Creatis software - clitk.git/blobdiff - vv/vvSlicerManager.cxx
Merge branch 'master' of git.creatis.insa-lyon.fr:clitk
[clitk.git] / vv / vvSlicerManager.cxx
index 94a834f2f5277d2e50d952bc2dff5f154228a0da..89fd42b49fae4177e89ec0c2ee4590e38c9a6f54 100644 (file)
@@ -279,20 +279,18 @@ bool vvSlicerManager::SetOverlay(std::vector<std::string> filenames,int dim, std
 \r
 \r
 //----------------------------------------------------------------------------\r
-bool vvSlicerManager::SetFusion(std::string filename,int dim, std::string component)\r
+bool vvSlicerManager::SetFusion(std::vector<std::string> filenames,int dim, std::string component, vvImageReader::LoadedImageType type)\r
 {\r
-  mFusionName = filename;\r
+  mFusionName = filenames[0];\r
   mFusionComponent = component;\r
   if (dim > mImage->GetNumberOfDimensions()) {\r
-    mLastError = " Overlay dimension cannot be greater then reference image!";\r
+    mLastError = " Fusion dimension cannot be greater than reference image!";\r
     return false;\r
   }\r
   if (mFusionReader.IsNull())\r
     mFusionReader = vvImageReader::New();\r
-  std::vector<std::string> filenames;\r
-  filenames.push_back(filename);\r
   mFusionReader->SetInputFilenames(filenames);\r
-  mFusionReader->Update(mImage->GetNumberOfDimensions(),component.c_str(),mType);\r
+  mFusionReader->Update(type);\r
   if (mFusionReader->GetLastError().size() == 0) {\r
     for ( unsigned int i = 0; i < mSlicers.size(); i++) {\r
       mSlicers[i]->SetFusion(mFusionReader->GetOutput());\r
@@ -351,7 +349,7 @@ bool vvSlicerManager::SetFusionSequence(std::vector<std::string> filenames, int
        }\r
 \r
        //adjust the time slider in the overlay panel\r
-       mFusionSequenceNbFrames = mFusionSequenceReader->GetOutput()->GetTransform().size()-1; //actually, this is the maximum index...\r
+       mFusionSequenceNbFrames = mFusionSequenceReader->GetOutput()->GetTransform().size()\r
        mFusionSequenceFrameIndex = std::max<int>( 0, std::min<int>(mFusionSequenceFrameIndex, mFusionSequenceNbFrames));\r
 \r
        return true;\r
@@ -785,7 +783,6 @@ void vvSlicerManager::UpdateLinked(int slicer)
     for (std::list<std::string>::const_iterator i = mLinkedId.begin(); i != mLinkedId.end(); i++) {\r
                if (this->IsInvolvedInFusionSequence()) {\r
                        //this SlicerManager is involved in fusionSequence => do not synchronize the times\r
-      //TODO: check is something more specific should be done ...\r
                        emit UpdateLinkManager(*i, slicer, p[0], p[1], p[2], -1);\r
                }\r
                else {\r
@@ -966,6 +963,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
@@ -985,6 +986,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
@@ -1245,41 +1253,46 @@ void vvSlicerManager::SetSlicingPreset(SlicingPresetType preset)
 //----------------------------------------------------------------------------\r
 void vvSlicerManager::SetPreset(int preset)\r
 {\r
+\r
   //vtkLookupTable* LUT = static_cast<vtkLookupTable*>(mSlicers[0]->GetWindowLevel()->GetLookupTable());\r
   double window = mSlicers[0]->GetColorWindow();\r
   double level = mSlicers[0]->GetColorLevel();\r
 \r
   std::string component_type=mImage->GetScalarTypeAsITKString();\r
   switch (preset) {\r
-  case 0:\r
+  case WL_AUTO:\r
     double range[2];\r
     mImage->GetScalarRange(range);\r
     window = range[1] - range[0];\r
     level = (range[1] + range[0])* 0.5;\r
     break;\r
-  case 1:\r
+  case WL_HOUNSFIELD:\r
     window = 2000;\r
     level = 0;\r
     break;\r
-  case 2:\r
+  case WL_SOFTTISSUE:\r
     window = 400;\r
     level = 20;\r
     break;\r
-  case 3: // lungs (same as FOCAL)\r
+  case WL_LUNGS: // lungs (same as FOCAL)\r
     window = 1700;\r
     level = -300;\r
     break;\r
-  case 4:\r
+  case WL_BONES:\r
     window = 1000;\r
     level = 500;\r
     break;\r
-  case 5:\r
+  case WL_HEAD:\r
+    window = 200;\r
+    level = 70;\r
+    break;\r
+  case WL_BINARY:\r
     window = 1;\r
     level = 0.5;\r
     break;\r
-  case 6:\r
+  case WL_USER:\r
     break;\r
-  case 7:\r
+  case WL_VENTILATION:\r
     window=1.;\r
     level=0.;\r
     break;\r
@@ -1329,7 +1342,7 @@ void vvSlicerManager::SetLocalColorWindowing(const int slicer, const bool bCtrlK
                                                           this->mSlicers[slicer]->GetConcatenatedTransform());\r
     this->SetColorWindow(max-min);\r
     this->SetColorLevel(0.5*(min+max));\r
-    this->SetPreset(6);\r
+    this->SetPreset(WL_USER);\r
   }\r
   this->Render();\r
   this->UpdateWindowLevel();\r