]> Creatis software - clitk.git/commitdiff
Merge branch 'master' of git.creatis.insa-lyon.fr:clitk
authorDavid Sarrut <david.sarrut@gmail.com>
Wed, 4 Jan 2012 14:53:54 +0000 (15:53 +0100)
committerDavid Sarrut <david.sarrut@gmail.com>
Wed, 4 Jan 2012 14:53:54 +0000 (15:53 +0100)
12 files changed:
common/vvImage.cxx
common/vvImage.h
scripts/create_midP-2.0.sh
scripts/pts_to_landmarks.sh
scripts/registration.sh
tools/clitkDicom2Image.cxx
vv/vvOverlayPanel.cxx
vv/vvReadState.cxx
vv/vvSaveState.cxx
vv/vvSaveState.h
vv/vvSlicerManager.cxx
vv/vvSlicerManager.h

index 9a6fc8ff489f39c1d661b1a55940a46253d3a2c3..0bddb262cb7a4f8ce70d204d8be1750e3ae35f0c 100644 (file)
@@ -63,6 +63,27 @@ void vvImage::Reset()
 }
 //--------------------------------------------------------------------
 
+//--------------------------------------------------------------------
+void vvImage::AddVtkImage(vtkImageData* input)
+{
+  // RP: 20/12/2011
+  // Note that we're simply adding a new image to the vector.
+  // mItkToVtkConverters is therefore not being updated, but 
+  // up to here it's not being used anyway...
+  mImageDimension = 0;
+  int* extent = input->GetWholeExtent();
+  if (extent[4] != extent[5])
+    mImageDimension = 3;
+  else if (extent[3] != extent[4])
+    mImageDimension = 2;
+  else if (extent[0] != extent[1])
+    mImageDimension = 1;
+  
+  mVtkImages.push_back(input);
+}
+
+//--------------------------------------------------------------------
+
 //--------------------------------------------------------------------
 int vvImage::GetNumberOfSpatialDimensions()
 {
index e48dbfa323b8a70b2e387227eced9212b33550f4..ec01a1ffbe40d67f0f8b6a095f8cd56a80edacef 100644 (file)
@@ -40,6 +40,7 @@ public :
   void Init();
   void Reset();
   template<class TItkImageType> void AddItkImage(TItkImageType *input);
+  void AddVtkImage(vtkImageData* input);
   const std::vector<vtkImageData*>& GetVTKImages();
   vtkImageData* GetFirstVTKImageData();
   int GetNumberOfDimensions() const;
index 1f18830311102decf806136bd23f1c7ef4ca9a97..c38555a6196029396f79c1486d8bf4e1c347eb05 100755 (executable)
@@ -41,6 +41,7 @@ registration()
   banded=""
 
   # params read from conf file
+  use_coeffs=1
   params="$nb_iter $nb_samples $sampling_algo $nb_hist_bins $nb_levels $bspline_spacing $metric $optimizer $interpolator"
 
   # register all phases to the reference
@@ -57,6 +58,10 @@ registration()
       vf_in=$vf_dir/vf_inside_${ref_phase_nb}_$phase_nb.mhd
       result_in=$output_dir/result_inside_${ref_phase_nb}_$phase_nb.mhd
       log_in=$log_dir/log_inside_${ref_phase_nb}_$phase_nb.log
+      if [ $use_coeffs = 1 ]; then
+        init_coeff_in=$coeff_in # empty at first iteration
+        coeff_in=$vf_dir/coeff_inside_${ref_phase_nb}_$phase_nb.mhd
+      fi
 
       # outside params
       reference_out=$mask_dir/${banded}outside_$ref_phase_nb.mhd
@@ -66,11 +71,15 @@ registration()
       vf_out=$vf_dir/vf_outside_$ref_phase_nb\_$phase_nb.mhd
       result_out=$output_dir/result_outside_$ref_phase_nb\_$phase_nb.mhd
       log_out=$log_dir/log_outside_${ref_phase_nb}_$phase_nb.log
+      if [ $use_coeffs = 1 ]; then
+        init_coeff_out=$coeff_out # empty at first iteration
+        coeff_out=$vf_dir/coeff_outside_${ref_phase_nb}_$phase_nb.mhd
+      fi
 
       # registration
       if [ "$method" == "blutdir" ]; then
-        registration_blutdir $reference_in $target_in $mask_ref_in $mask_targ_in $vf_in $result_in $params $log_in
-        registration_blutdir $reference_out $target_out $mask_ref_out $mask_targ_out $vf_out $result_out $params $log_out
+        registration_blutdir $reference_in $target_in $mask_ref_in $mask_targ_in $vf_in $result_in $params $log_in $coeff_in $init_coeff_in
+        registration_blutdir $reference_out $target_out $mask_ref_out $mask_targ_out $vf_out $result_out $params $log_out $coeff_out $init_coeff_out
       elif [ "$method" == "elastix" ]; then
         registration_elastix $reference_in $target_in $mask_ref_in $mask_targ_in $vf_in $result_in $params $log_in
         registration_elastix $reference_out $target_out $mask_ref_out $mask_targ_out $vf_out $result_out $params $log_out
@@ -212,6 +221,107 @@ midp()
   echo
 }
 
+midp_in_out()
+{
+  echo
+  echo "----------- Mid-position ------------"
+  start=`date`
+  echo "start: $start"
+  echo
+
+  mkdir -p $midp_dir
+
+  ########### calculate the midp wrt the reference phase
+  phase_nb=$ref_phase_nb
+  phase_file=$ref_phase_file
+  echo "Calculating midp_$phase_nb.mhd..."
+  vf_midp_in=$midp_dir/vf_inside_midp_$phase_nb.mhd
+  vf_midp_out=$midp_dir/vf_outside_midp_$phase_nb.mhd
+  # average the vf's from reference phase to phase
+  clitkAverageTemporalDimension -i $vf_dir/vf_inside_${ref_phase_nb}_4D.mhd -o $vf_midp_in
+  abort_on_error midp $? clean_up_midp
+  clitkAverageTemporalDimension -i $vf_dir/vf_outside_${ref_phase_nb}_4D.mhd -o $vf_midp_out
+  abort_on_error midp $? clean_up_midp
+
+  # invert the vf (why?)
+  clitkInvertVF -i $vf_midp_in -o $vf_midp_in
+  abort_on_error midp $? clean_up_midp
+  clitkInvertVF -i $vf_midp_out -o $vf_midp_out
+  abort_on_error midp $? clean_up_midp
+
+  # combine in and out VF's
+  ref_vf_midp_in=$vf_midp_in
+  ref_vf_midp_out=$vf_midp_out
+  vf_midp=$midp_dir/vf_midp_$phase_nb.mhd
+  clitkCombineImage -i $vf_midp_in -j $vf_midp_out -o $vf_midp -m $mask_dir/mm_$phase_nb.mhd
+  clitkZeroVF -i $vf_midp -o vf_zero.mhd
+  clitkCombineImage -i $vf_midp -j vf_zero.mhd -o $vf_midp -m $mask_dir/patient_mask_$phase_nb.mhd
+
+  # create the midp by warping the reference phase with the reference vf
+  midp=$midp_dir/midp_$phase_nb.mhd
+  clitkWarpImage -i $phase_file -o $midp --vf=$vf_midp -s 1
+  abort_on_error midp $? clean_up_midp
+
+  clitkImageConvert -i $midp -o $midp -t float
+  abort_on_error midp $? clean_up_midp
+
+  ########### calculate the midp wrt the other phases
+  for i in $( seq 0 $((${#phase_files[@]} - 1))); do
+    phase_file=${phase_files[$i]}
+    phase_nb=${phase_nbs[$i]}
+    vf_midp_in=$midp_dir/vf_inside_midp_$phase_nb.mhd
+    vf_midp_out=$midp_dir/vf_outside_midp_$phase_nb.mhd
+
+    if [ "$phase_nb" != "$ref_phase_nb" ]; then
+      echo "Calculating midp_$phase_nb.mhd..."
+      # calculate vf from phase to midp, using the vf from reference phase to midp (-i)
+      # and the vf from reference phase to phase (-j)
+      clitkComposeVF -i $ref_vf_midp_in -j $vf_dir/vf_inside_$ref_phase_nb\_$phase_nb.mhd -o $vf_midp_in
+      abort_on_error midp $? clean_up_midp
+      clitkComposeVF -i $ref_vf_midp_out -j $vf_dir/vf_outside_$ref_phase_nb\_$phase_nb.mhd -o $vf_midp_out
+      abort_on_error midp $? clean_up_midp
+
+      # combine in and out VF's
+      vf_midp=$midp_dir/vf_midp_$phase_nb.mhd
+      clitkCombineImage -i $vf_midp_in -j $vf_midp_out -o $vf_midp -m $mask_dir/mm_$phase_nb.mhd
+      clitkZeroVF -i $vf_midp -o vf_zero.mhd
+      clitkCombineImage -i $vf_midp -j vf_zero.mhd -o $vf_midp -m $mask_dir/patient_mask_$phase_nb.mhd
+      
+      midp=$midp_dir/midp_$phase_nb.mhd
+      clitkWarpImage -i $phase_file -o $midp --vf=$vf_midp -s 1
+      abort_on_error midp $? clean_up_midp
+      
+      clitkImageConvert -i $midp -o $midp -t float
+      abort_on_error midp $? clean_up_midp
+    fi
+  done
+
+  rm vf_zero.*
+
+  # create 4D midp
+  create_mhd_4D_pattern.sh $midp_dir/midp_
+  create_mhd_4D_pattern.sh $midp_dir/vf_midp_
+  create_mhd_4D_pattern.sh $midp_dir/vf_inside_midp_
+  create_mhd_4D_pattern.sh $midp_dir/vf_outside_midp_
+
+  echo "Calculating midp_avg.mhd..."
+  clitkAverageTemporalDimension -i $midp_dir/midp_4D.mhd -o $midp_dir/midp_avg.mhd
+  abort_on_error midp $? clean_up_midp
+
+  echo "Calculating midp_med.mhd..."
+  clitkMedianTemporalDimension -i $midp_dir/midp_4D.mhd -o $midp_dir/midp_med.mhd
+  abort_on_error midp $? clean_up_midp
+
+  # clean-up
+  #rm $midp_dir/vf_*
+      
+  echo
+  echo "-------- Mid-position done ! --------"
+  end=`date`
+  echo "start: $start"
+  echo "end: $end"
+  echo
+}
 
 
 ######################### main
@@ -248,8 +358,13 @@ if [ "$step" == "registration" -o "$step" == "all" ]; then
   registration
 fi 
 
+midp_combined_vf=0
 if [ "$step" == "midp" -o "$step" == "all" ]; then
-  midp
+  if [ $midp_combined_vf = 0 ]; then
+    midp_in_out
+  else
+    midp
+  fi
 fi 
 
 echo
index 87bc9eeeccfb0729b5cfdcbfb578c2a9eb20d1cf..e93cbe465518beedcf2ef08a584e5acbcf57c021 100755 (executable)
 
 if [ $# -ne 2 ]; then
   echo "Usage: $0 input.pts output.txt" 1>&2
+  exit 1
 fi
 
-to_append=/tmp/$RANDOM
-to_prepend=/tmp/$RANDOM
+to_append=`mktemp`
+to_prepend=`mktemp`
 
 for i in $(seq 0 $((`cat $1 | wc -l` - 1)));
 do
@@ -25,3 +26,5 @@ done
 
 echo "LANDMARKS1" > $2
 paste -d ' ' $to_prepend $1 $to_append >> $2
+
+rm $to_append $to_prepend
index 724e3ac392f804e842e408bc67e92733fd52c6fa..5431342394d4c70346169dbabbe985e71527e89e 100755 (executable)
@@ -37,26 +37,37 @@ source `dirname $0`/midp_common.sh
 ################# BLUTDIR #####################
 registration_blutdir()
 {
-  reference=$1
-  target=$2
-  mask_ref=$3
-  mask_targ=$4
-  vf=$5
-  result=$6
-  nb_iter=$7
-  nb_samples=$8
-  sampling_algo=$9
-  hist_bins=${10}
-  nb_levels=${11}
-  spacing=${12}
-  metric=${13}
-  optimizer=${14}
-  interpolator=${15}
-  log=${16}
+  local reference=$1
+  local target=$2
+  local mask_ref=$3
+  local mask_targ=$4
+  local vf=$5
+  local result=$6
+  local nb_iter=$7
+  local nb_samples=$8
+  local sampling_algo=$9
+  local hist_bins=${10}
+  local nb_levels=${11}
+  local spacing=${12}
+  local metric=${13}
+  local optimizer=${14}
+  local interpolator=${15}
+  local log=${16}
+  local coeff=${17}
+  local init_coeff=${18}
 
   echo "Computing BLUTDIR $reference -> $target ..."
   blutdir_params="--levels $nb_levels  --metric $metric --optimizer $optimizer --samples $nb_samples --spacing $spacing,$spacing,$spacing --bins $hist_bins --maxIt $nb_iter --interp $interpolator --verbose"
-  cmd="clitkBLUTDIR -r $reference -t $target -m $mask_ref --targetMask $mask_targ --vf $vf -o $result $blutdir_params"
+
+  if [ -n "$coeff" ]; then
+    coeff="--coeff $coeff"
+  fi
+  
+  if [ -n "$init_coeff" ]; then
+    init_coeff="--initCoeff $init_coeff"
+  fi
+  
+  cmd="clitkBLUTDIR -r $reference -t $target -m $mask_ref --targetMask $mask_targ --vf $vf $coeff $init_coeff -o $result $blutdir_params"
   $cmd > $log
 
   abort_on_error registration_blutdir $? clean_up_registration
index b13de42b419c04fef3d4475ca6c6ae8319688b4a..0ad79ef645d9ed6843be00ce10f15c6e15477c27 100644 (file)
@@ -23,6 +23,7 @@
 #include "vvImageReader.h"
 #include "vvImageWriter.h"
 #include <gdcmFile.h>
+#include <vtkImageChangeInformation.h>
 #if GDCM_MAJOR_VERSION == 2
   #include <gdcmImageHelper.h>
   #include <gdcmAttribute.h>
@@ -51,6 +52,7 @@ int main(int argc, char * argv[])
 
   //===========================================
   /// Get slices locations ...
+  std::vector<double> theorigin(3);
   std::vector<double> sliceLocations;
   for(unsigned int i=0; i<args_info.inputs_num; i++) {
     //std::cout << "Reading <" << input_files[i] << std::endl;
@@ -58,7 +60,7 @@ int main(int argc, char * argv[])
     gdcm::Reader hreader;
     hreader.SetFileName(input_files[i].c_str());
     hreader.Read();
-    std::vector<double> theorigin = gdcm::ImageHelper::GetOriginValue(hreader.GetFile());
+    theorigin = gdcm::ImageHelper::GetOriginValue(hreader.GetFile());
     sliceLocations.push_back(theorigin[2]);
     gdcm::Attribute<0x28, 0x100> pixel_size;
     gdcm::DataSet& ds = hreader.GetFile().GetDataSet();
@@ -74,7 +76,10 @@ int main(int argc, char * argv[])
   header->SetFileName(input_files[i]);
   header->SetMaxSizeLoadEntry(16384); // required ?
   header->Load();
-  sliceLocations.push_back(header->GetZOrigin());
+  theorigin[0] = header->GetXOrigin();
+  theorigin[1] = header->GetYOrigin();
+  theorigin[2] = header->GetZOrigin();
+  sliceLocations.push_back(theorigin[2]);
   if (header->GetPixelSize() != 2) {
     std::cerr << "Pixel type 2 bytes ! " << std::endl;
     std::cerr << "In file " << input_files[i] << std::endl;
@@ -143,11 +148,29 @@ int main(int argc, char * argv[])
     std::cerr << reader->GetLastError() << std::endl;
     return 1;
   }
+  
+  vvImage::Pointer image = reader->GetOutput();
+  vtkImageData* vtk_image = image->GetFirstVTKImageData();
+  vtkImageChangeInformation* modifier = vtkImageChangeInformation::New();
+  if  (args_info.focal_origin_given) {
+    std::vector<double> spacing = image->GetSpacing();
+    std::vector<int> size = image->GetSize();
+    theorigin[0] = -spacing[0]*size[0]/2.0;
+    theorigin[1] = -spacing[1]*size[1]/2.0;
+    modifier->SetInput(vtk_image);
+    modifier->SetOutputOrigin(theorigin[0], theorigin[1], theorigin[2]);
+    modifier->Update();
+    vvImage::Pointer focal_image = vvImage::New();
+    focal_image->AddVtkImage(modifier->GetOutput());
+    image = focal_image;
+  }
 
   vvImageWriter::Pointer writer = vvImageWriter::New();
-  writer->SetInput(reader->GetOutput());
+  writer->SetInput(image);
   writer->SetOutputFileName(args_info.output_arg);
   writer->Update();
 
+  modifier->Delete();
+
   return 0;
 }
index 68356bfd2df1d91d1fc7029d20d5e6afe331d44b..28d893991556a77eed1277aa8e4738989040428b 100644 (file)
@@ -250,7 +250,8 @@ void vvOverlayPanel::VFColorChangeRequest()
   QColor color(vfColorButton->palette().color(QPalette::Background));
   color = QColorDialog::getColor(color, this, "Choose the new color of the vector field");
   //vfColorButton->palette().setColor(QPalette::Background, color); SR: Not working?
-  vfColorButton->setStyleSheet("* { background-color: " + color.name() + "; border: 0px }");
+  if (color.isValid())
+    vfColorButton->setStyleSheet("* { background-color: " + color.name() + "; border: 0px }");
   this->setVFProperty();
 }
 
index 83a7c5e17e4194e4c1474d519f5310da8db55969..dafcf3f4865f7f038d17f47820161a93d322bae4 100644 (file)
@@ -1,5 +1,6 @@
 #include "vvReadState.h"
 #include "vvMainWindow.h"
+#include "vvSlicerManager.h"
 
 #include <qtreewidget.h>
 
@@ -75,7 +76,7 @@ std::string  vvReadState::ReadImage()
         }
       }
       else if (current_index >= 0) {
-        if (value == "Fusion") 
+        if (value == "Fusion")
           value = ReadFusion(current_index);
         else if (value == "Overlay")
           value = ReadOverlay(current_index);
@@ -94,6 +95,9 @@ std::string  vvReadState::ReadImage()
 std::string vvReadState::ReadFusion(int index)
 {
   std::string file, value;
+  int vali;
+  double vald;
+  vvSlicerManager* slicerManager = m_Window->GetSlicerManagers()[index];
   while (!m_XmlReader->isEndElement() || value != "Fusion") {
     m_XmlReader->readNext();
     value = m_XmlReader->qualifiedName().toString().toStdString();
@@ -103,14 +107,43 @@ std::string vvReadState::ReadFusion(int index)
         if (!m_XmlReader->hasError())
           m_Window->AddFusionImage(index, file.c_str());
       }
+      if (value == "FusionOpacity") {
+        vali = m_XmlReader->readElementText().toInt();
+        if (!m_XmlReader->hasError())
+          slicerManager->SetFusionOpacity(vali);
+      }
+      if (value == "FusionThresholdOpacity") {
+        vali = m_XmlReader->readElementText().toInt();
+        if (!m_XmlReader->hasError())
+          slicerManager->SetFusionThresholdOpacity(vali);
+      }
+      if (value == "FusionColorMap") {
+        vali = m_XmlReader->readElementText().toInt();
+        if (!m_XmlReader->hasError())
+          slicerManager->SetFusionColorMap(vali);
+      }
+      if (value == "FusionWindow") {
+        vald = m_XmlReader->readElementText().toDouble();
+        if (!m_XmlReader->hasError())
+          slicerManager->SetFusionWindow(vald);
+      }
+      if (value == "FusionLevel") {
+        vald = m_XmlReader->readElementText().toDouble();
+        if (!m_XmlReader->hasError())
+          slicerManager->SetFusionLevel(vald);
+      }
     }
   }
+  m_Window->ImageInfoChanged();
   return value;
 }
 
 std::string vvReadState::ReadOverlay(int index)
 {
   std::string file, value;
+  int vali;
+  double vald;
+  vvSlicerManager* slicerManager = m_Window->GetSlicerManagers()[index];
   while (!m_XmlReader->isEndElement() || value != "Overlay") {
     m_XmlReader->readNext();
     value = m_XmlReader->qualifiedName().toString().toStdString();
@@ -120,8 +153,29 @@ std::string vvReadState::ReadOverlay(int index)
         if (!m_XmlReader->hasError())
           m_Window->AddOverlayImage(index, file.c_str());
       }
+      if (value == "OverlayColorWindow") {
+        vald = m_XmlReader->readElementText().toDouble();
+        if (!m_XmlReader->hasError())
+          slicerManager->SetOverlayColorWindow(vald);
+      }
+      if (value == "OverlayColorLevel") {
+        vald = m_XmlReader->readElementText().toDouble();
+        if (!m_XmlReader->hasError())
+          slicerManager->SetOverlayColorLevel(vald);
+      }
+      if (value == "LinkOverlayWindowLevel") {
+        vali = m_XmlReader->readElementText().toInt();
+        if (!m_XmlReader->hasError())
+          slicerManager->SetLinkOverlayWindowLevel(vali);
+      }
+      if (value == "OverlayColor") {
+        vali = m_XmlReader->readElementText().toInt();
+        if (!m_XmlReader->hasError())
+          slicerManager->SetOverlayColor(vali);
+      }
     }
   }
+  m_Window->ImageInfoChanged();
   return value;
 }
 
index e573bb9e0f9bcb940c5863f7a6dd5a6ab8b447dd..c1a7e496aa4dacc769832bef41f8e3139d5b050d 100644 (file)
@@ -59,10 +59,11 @@ void vvSaveState::SaveTree()
   m_XmlWriter->writeEndElement();
 }
 
-void vvSaveState::SaveImage(QTreeWidgetItem* item, int index)
+void vvSaveState::SaveImage(const QTreeWidgetItem* item, int index)
 {
+  const vvSlicerManager * slicerManager = m_Window->GetSlicerManagers()[index];
   m_XmlWriter->writeStartElement("Image");
-  
+
   std::ostringstream indexStr;
   indexStr.str("");
   indexStr << index;
@@ -70,40 +71,49 @@ void vvSaveState::SaveImage(QTreeWidgetItem* item, int index)
 
   std::string filename = item->data(0, Qt::UserRole).toString().toStdString();
   m_XmlWriter->writeTextElement("FileName", QDir::current().absoluteFilePath(filename.c_str()));
-  
+
   QTreeWidgetItem* item_child;
   std::string role;
   for (int i = 0; i < item->childCount(); i++) {
     item_child = item->child(i);
     role = item_child->data(1,Qt::UserRole).toString().toStdString();
     if (role == "fusion")
-      SaveFusion(item_child);
+      SaveFusion(item_child, slicerManager);
     else if (role == "overlay")
-      SaveOverlay(item_child);
+      SaveOverlay(item_child, slicerManager);
     else if (role == "vector")
       SaveVector(item_child);
   }
-  
+
   m_XmlWriter->writeEndElement();
 }
 
-void vvSaveState::SaveFusion(QTreeWidgetItem* item)
+void vvSaveState::SaveFusion(const QTreeWidgetItem* item, const vvSlicerManager* vvManager)
 {
   m_XmlWriter->writeStartElement("Fusion");
   std::string filename = item->data(0, Qt::UserRole).toString().toStdString();
   m_XmlWriter->writeTextElement("FileName", QDir::current().absoluteFilePath(filename.c_str()));
+  m_XmlWriter->writeTextElement("FusionOpacity", QString::number(vvManager->GetFusionOpacity()));
+  m_XmlWriter->writeTextElement("FusionThresholdOpacity", QString::number(vvManager->GetFusionThresholdOpacity()));
+  m_XmlWriter->writeTextElement("FusionColorMap", QString::number(vvManager->GetFusionColorMap()));
+  m_XmlWriter->writeTextElement("FusionWindow", QString::number(vvManager->GetFusionWindow()));
+  m_XmlWriter->writeTextElement("FusionLevel", QString::number(vvManager->GetFusionLevel()));
   m_XmlWriter->writeEndElement();
 }
 
-void vvSaveState::SaveOverlay(QTreeWidgetItem* item)
+void vvSaveState::SaveOverlay(const QTreeWidgetItem* item, const vvSlicerManager* vvManager)
 {
   m_XmlWriter->writeStartElement("Overlay");
   std::string filename = item->data(0, Qt::UserRole).toString().toStdString();
   m_XmlWriter->writeTextElement("FileName", QDir::current().absoluteFilePath(filename.c_str()));
+  m_XmlWriter->writeTextElement("OverlayColorWindow", QString::number(vvManager->GetOverlayColorWindow()));
+  m_XmlWriter->writeTextElement("OverlayColorLevel", QString::number(vvManager->GetOverlayColorLevel()));
+  m_XmlWriter->writeTextElement("LinkOverlayWindowLevel", QString::number(vvManager->GetLinkOverlayWindowLevel()));
+  m_XmlWriter->writeTextElement("OverlayColor", QString::number(vvManager->GetOverlayColor()));
   m_XmlWriter->writeEndElement();
 }
 
-void vvSaveState::SaveVector(QTreeWidgetItem* item)
+void vvSaveState::SaveVector(const QTreeWidgetItem* item)
 {
   m_XmlWriter->writeStartElement("Vector");
   std::string filename = item->data(0, Qt::UserRole).toString().toStdString();
index 7a7cda97bd9ce3a18ec3b4356f6de99fc9da3647..299158029fe01ac783485b65f713c96e1e05130f 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <string>
 #include <memory>
+#include "vvSlicerManager.h"
 
 class vvMainWindow;
 class QXmlStreamWriter;
@@ -22,10 +23,10 @@ protected:
   void SaveGlobals();
   void SaveGUI();
   void SaveTree();
-  void SaveImage(QTreeWidgetItem* item, int index);
-  void SaveFusion(QTreeWidgetItem* item);
-  void SaveOverlay(QTreeWidgetItem* item);
-  void SaveVector(QTreeWidgetItem* item);
+  void SaveImage(const QTreeWidgetItem* item, int index);
+  void SaveFusion(const QTreeWidgetItem* item, const vvSlicerManager* slicerManager);
+  void SaveOverlay(const QTreeWidgetItem* item, const vvSlicerManager* slicerManager);
+  void SaveVector(const QTreeWidgetItem* item);
 
   std::auto_ptr<QXmlStreamWriter> m_XmlWriter;
   std::auto_ptr<QFile> m_File;
index 9a163093ea40b9db9397581f9f56c57a6befeb4c..e739eef8e56f866983a78d28a5fbeb0fa3eff33b 100644 (file)
@@ -763,7 +763,7 @@ double vvSlicerManager::GetColorLevel()
 //----------------------------------------------------------------------------
 
 //----------------------------------------------------------------------------
-double vvSlicerManager::GetOverlayColorWindow()
+double vvSlicerManager::GetOverlayColorWindow() const
 {
   if (mSlicers.size())
     return mSlicers[0]->GetOverlayColorWindow();
@@ -772,7 +772,7 @@ double vvSlicerManager::GetOverlayColorWindow()
 //----------------------------------------------------------------------------
 
 //----------------------------------------------------------------------------
-double vvSlicerManager::GetOverlayColorLevel()
+double vvSlicerManager::GetOverlayColorLevel() const
 {
   if (mSlicers.size())
     return mSlicers[0]->GetOverlayColorLevel();
@@ -781,7 +781,7 @@ double vvSlicerManager::GetOverlayColorLevel()
 //----------------------------------------------------------------------------
 
 //----------------------------------------------------------------------------
-bool vvSlicerManager::GetLinkOverlayWindowLevel()
+bool vvSlicerManager::GetLinkOverlayWindowLevel() const
 {
   if (mSlicers.size())
     return mSlicers[0]->GetLinkOverlayWindowLevel();
index e8a229b877d8dc3e9d669c58d429742401e2753d..aff339a42b0f846e388265369cc724fecf31ac9e 100644 (file)
@@ -139,31 +139,31 @@ class vvSlicerManager : public QObject {
 
   double GetColorWindow();
   double GetColorLevel();
-  double GetOverlayColorWindow();
-  double GetOverlayColorLevel();
-  bool GetLinkOverlayWindowLevel();
+  double GetOverlayColorWindow() const;
+  double GetOverlayColorLevel() const;
+  bool GetLinkOverlayWindowLevel() const;
   int GetColorMap() {
     return mColorMap;
   }
   int GetPreset() {
     return mPreset;
   }
-  int GetOverlayColor() {
+  int GetOverlayColor() const {
     return mOverlayColor;
   }
-  int GetFusionOpacity() {
+  int GetFusionOpacity() const {
     return mFusionOpacity;
   }
-  int GetFusionThresholdOpacity() {
+  int GetFusionThresholdOpacity() const {
     return mFusionThresOpacity;
   }
-  int GetFusionColorMap() {
+  int GetFusionColorMap() const {
     return mFusionColorMap;
   }
-  double GetFusionWindow() {
+  double GetFusionWindow() const {
     return mFusionWindow;
   }
-  double GetFusionLevel() {
+  double GetFusionLevel() const {
     return mFusionLevel;
   }