]> Creatis software - clitk.git/commitdiff
Merge branch 'master' of git://git.creatis.insa-lyon.fr/clitk
authorBenoît Presles <benoit.presles@netcourrier.com>
Tue, 23 Oct 2012 17:02:58 +0000 (19:02 +0200)
committerBenoît Presles <benoit.presles@netcourrier.com>
Tue, 23 Oct 2012 17:02:58 +0000 (19:02 +0200)
1  2 
vv/CMakeLists.txt
vv/vvMainWindow.cxx
vv/vvSlicer.cxx

diff --combined vv/CMakeLists.txt
index e280cfc14a52223ca1f9bbca93d11bb0267e08e7,b77a52c27474b90f8f6aded9b421865d5009c42b..3a12e03553284530d580793a9b541624a0319982
@@@ -79,7 -79,6 +79,7 @@@ SET(vv_SRC
    vvSlicer.cxx
    vvLandmarks.cxx
    vvLandmarksGlyph.cxx
 +  vvClipPolyData.cxx
    vvGlyphSource.cxx
    vvGlyph2D.cxx
    vvSlicerManager.cxx
@@@ -253,7 -252,7 +253,7 @@@ ENDIF(UNIX OR APPLE
  
  IF(WIN32)
    #INCLUDE(InstallRequiredSystemLibraries)
-   INSTALL(FILES ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_BUILD_TYPE}/vv.exe DESTINATION .)
+   INSTALL(FILES ${EXECUTABLE_OUTPUT_PATH}/vv.exe DESTINATION .)
    #INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/icons/ducky.png DESTINATION .)
  ENDIF(WIN32)
  #=========================================================
@@@ -267,8 -266,8 +267,8 @@@ SET(CPACK_PACKAGE_VENDOR "Creatis-CLB"
  SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/ReadMe.txt")
  SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")
  SET(CPACK_PACKAGE_VERSION_MAJOR "1")
- SET(CPACK_PACKAGE_VERSION_MINOR "2")
- SET(CPACK_PACKAGE_VERSION_PATCH "2")
+ SET(CPACK_PACKAGE_VERSION_MINOR "3")
+ SET(CPACK_PACKAGE_VERSION_PATCH "0")
  SET(CPACK_PACKAGE_INSTALL_DIRECTORY "vv")
  SET(CPACK_STRIP_FILES TRUE)
  
@@@ -276,7 -275,7 +276,7 @@@ IF(WIN32
    # There is a bug in NSI that does not handle full unix paths properly. Make
    # sure there is at least one set of four (4) backlasshes.
    SET(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\icons\\\\ducky.ico")
-   SET(CPACK_NSIS_INSTALLED_ICON_NAME "${CMAKE_BUILD_TYPE}\\\\vv.exe")
+   SET(CPACK_NSIS_INSTALLED_ICON_NAME "vv.exe")
    SET(CPACK_NSIS_DISPLAY_NAME "vv - The 4D slicer")
    SET(CPACK_NSIS_HELP_LINK "http://www.creatis.insa-lyon.fr/rio/vv")
    SET(CPACK_NSIS_URL_INFO_ABOUT "http://www.creatis.insa-lyon.fr/rio")
diff --combined vv/vvMainWindow.cxx
index 1432b16c02ff5e68e1c43e0f28c89f6f6f812051,ef623d9fe21d6090db82e61faef60f50b1525f7d..ddc38fba97e5be92d50da869c7386002f346bec3
  #define COLUMN_IMAGE_NAME 7
  
  #if CLITK_PRIVATE_FEATURES
 -  #define EXTENSIONS "Images ( *.bmp *.png *.jpeg *.jpg *.tif *.mhd *.mha *.hdr *.vox *.his *.xdr *.SCAN *.nii *.nrrd *.nhdr *.usf)"
 +  #define EXTENSIONS "Images ( *.bmp *.png *.jpeg *.jpg *.tif *.mhd *.mha *.hdr *.vox *.his *.xdr *.SCAN *.nii *.nrrd *.nhdr *.refscan *.usf)"
  #else
 -  #define EXTENSIONS "Images ( *.bmp *.png *.jpeg *.jpg *.tif *.mhd *.mha *.hdr *.vox *.his *.xdr *.SCAN *.nii *.nrrd *.nhdr)"
 +  #define EXTENSIONS "Images ( *.bmp *.png *.jpeg *.jpg *.tif *.mhd *.mha *.hdr *.vox *.his *.xdr *.SCAN *.nii *.nrrd *.nhdr *.refscan)"
  #endif
  
  /*Data Tree values
@@@ -315,7 -315,7 +315,7 @@@ vvMainWindow::vvMainWindow():vvMainWind
  
    connect(this,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(ShowContextMenu(QPoint)));
  
-   connect(linkPanel,SIGNAL(addLink(QString,QString)),this,SLOT(AddLink(QString,QString)));
+   connect(linkPanel,SIGNAL(addLink(QString,QString,bool)),this,SLOT(AddLink(QString,QString,bool)));
    connect(linkPanel,SIGNAL(removeLink(QString,QString)),this,SLOT(RemoveLink(QString,QString)));
    connect(overlayPanel,SIGNAL(VFPropertyUpdated(int,int,int,int,double,double,double)),this,SLOT(SetVFProperty(int,int,int,int,double,double,double)));
    connect(overlayPanel,SIGNAL(OverlayPropertyUpdated(int,int,double,double)),
@@@ -928,7 -928,7 +928,7 @@@ void vvMainWindow::LoadImages(std::vect
          DataTree->setItemWidget(item, COLUMN_RELOAD_IMAGE, rButton);
  
          //set the id of the image
-         QString id = files[i].c_str() + QString::number(mSlicerManagers.size()-1);
+         QString id = QDir::current().absoluteFilePath(files[i].c_str()) + QString::number(mSlicerManagers.size()-1);
          item->setData(COLUMN_IMAGE_NAME,Qt::UserRole,id.toStdString().c_str());
          mSlicerManagers.back()->SetId(id.toStdString());
  
@@@ -1100,21 -1100,28 +1100,28 @@@ void vvMainWindow::ImageInfoChanged(
      //read image header
      int NPixel = 1;
  
+     int tSlice = 0;
      vvImage::Pointer imageSelected;
      if (DataTree->topLevelItem(index) == DataTree->selectedItems()[0]) {
        imageSelected = mSlicerManagers[index]->GetSlicer(0)->GetImage();
+       tSlice = mSlicerManagers[index]->GetSlicer(0)->GetTSlice();
      } else if (DataTree->selectedItems()[0]->data(1,Qt::UserRole).toString() == "vector") {
        imageSelected = mSlicerManagers[index]->GetSlicer(0)->GetVF();
+       tSlice = mSlicerManagers[index]->GetSlicer(0)->GetOverlayTSlice();
      } else if (DataTree->selectedItems()[0]->data(1,Qt::UserRole).toString() == "overlay") {
        imageSelected = mSlicerManagers[index]->GetSlicer(0)->GetOverlay();
+       tSlice = mSlicerManagers[index]->GetSlicer(0)->GetOverlayTSlice();
      } else if (DataTree->selectedItems()[0]->data(1,Qt::UserRole).toString() == "fusion") {
        imageSelected = mSlicerManagers[index]->GetSlicer(0)->GetFusion();
+       tSlice = mSlicerManagers[index]->GetSlicer(0)->GetFusionTSlice();
      }
      else if (DataTree->selectedItems()[0]->data(1,Qt::UserRole).toString() == "contour") {
        imageSelected = mSlicerManagers[index]->GetSlicer(0)->GetImage();
+       tSlice = mSlicerManagers[index]->GetSlicer(0)->GetTSlice();
      }
      else {
        imageSelected = mSlicerManagers[index]->GetSlicer(0)->GetImage();
+       tSlice = mSlicerManagers[index]->GetSlicer(0)->GetTSlice();
      }
  
      dimension = imageSelected->GetNumberOfDimensions();
      infoPanel->setOrigin(GetVectorDoubleAsString(origin));
      infoPanel->setSpacing(GetVectorDoubleAsString(inputSpacing));
      infoPanel->setNPixel(QString::number(NPixel)+" ("+inputSizeInBytes+")");
-     transformation = imageSelected->GetTransform()[mSlicerManagers[index]->GetTSlice()]->GetMatrix();
+     transformation = imageSelected->GetTransform()[tSlice]->GetMatrix();
      infoPanel->setTransformation(Get4x4MatrixDoubleAsString(transformation));
  
      landmarksPanel->SetCurrentLandmarks(mSlicerManagers[index]->GetLandmarks(),
@@@ -1237,25 -1244,70 +1244,70 @@@ void vvMainWindow::ShowHelpDialog(
  //------------------------------------------------------------------------------
  void vvMainWindow::ChangeViewMode()
  {
-   QList<int> size;
+   typedef struct _SIZE{
+     QSplitter* splitter;
+     QList<int> size1, size2;
+     int cols[3];
+   }SplitterSize;
+   SplitterSize sizes[4];
+   sizes[0].splitter = OSplitter;
+   sizes[0].size1.push_back(1);
+   sizes[0].size1.push_back(0);
+   sizes[0].size2.push_back(1);
+   sizes[0].size2.push_back(0);
+   sizes[0].cols[0] = 2;
+   sizes[0].cols[1] = 3;
+   sizes[0].cols[2] = 4;
+   sizes[1].splitter = ESplitter;
+   sizes[1].size1.push_back(0);
+   sizes[1].size1.push_back(1);
+   sizes[1].size2.push_back(1);
+   sizes[1].size2.push_back(0);
+   sizes[1].cols[0] = 1;
+   sizes[1].cols[1] = 3;
+   sizes[1].cols[2] = 4;
+   sizes[2].splitter = OSplitter;
+   sizes[2].size1.push_back(1);
+   sizes[2].size1.push_back(0);
+   sizes[2].size2.push_back(0);
+   sizes[2].size2.push_back(1);
+   sizes[2].cols[0] = 1;
+   sizes[2].cols[1] = 2;
+   sizes[2].cols[2] = 4;
+   sizes[3].splitter = ESplitter;
+   sizes[3].size1.push_back(0);
+   sizes[3].size1.push_back(1);
+   sizes[3].size2.push_back(0);
+   sizes[3].size2.push_back(1);
+   sizes[3].cols[0] = 1;
+   sizes[3].cols[1] = 2;
+   sizes[3].cols[2] = 3;
+   
+   int slicer = mSlicerManagers[mCurrentPickedImageIndex]->GetSelectedSlicer();
    if (viewMode == 1) {
-     viewMode = 0;
-     size.push_back(1);
-     size.push_back(0);
-     splitter_3->setSizes(size);
-     OSplitter->setSizes(size);
-     DataTree->setColumnHidden(2,1);
-     DataTree->setColumnHidden(3,1);
-     DataTree->setColumnHidden(4,1);
+     if (slicer >= 0) {
+       viewMode = 0;
+       splitter_3->setSizes(sizes[slicer].size1);
+       sizes[slicer].splitter->setSizes(sizes[slicer].size2);
+       DataTree->setColumnHidden(sizes[slicer].cols[0],1);
+       DataTree->setColumnHidden(sizes[slicer].cols[1],1);
+       DataTree->setColumnHidden(sizes[slicer].cols[2],1);
+     }
    } else {
-     viewMode = 1;
-     size.push_back(1);
-     size.push_back(1);
-     splitter_3->setSizes(size);
-     OSplitter->setSizes(size);
-     DataTree->setColumnHidden(2,0);
-     DataTree->setColumnHidden(3,0);
-     DataTree->setColumnHidden(4,0);
+     QList<int> size;
+     if (slicer >= 0) {
+       viewMode = 1;
+       size.push_back(1);
+       size.push_back(1);
+       splitter_3->setSizes(size);
+       sizes[slicer].splitter->setSizes(size);
+       DataTree->setColumnHidden(sizes[slicer].cols[0],0);
+       DataTree->setColumnHidden(sizes[slicer].cols[1],0);
+       DataTree->setColumnHidden(sizes[slicer].cols[2],0);
+     }
    }
    UpdateRenderWindows();
    /*
    ** the associated Slicer to redraw crosses.
    */
    for (unsigned int i = 0; i < mSlicerManagers.size(); i++) {
-     if (DataTree->topLevelItem(i)->data(COLUMN_UL_VIEW,Qt::CheckStateRole).toInt() > 1)
//     if (DataTree->topLevelItem(i)->data(COLUMN_UL_VIEW,Qt::CheckStateRole).toInt() > 1)
        mSlicerManagers[i]->GetSlicer(0)->Render();
-     if (DataTree->topLevelItem(i)->data(COLUMN_DL_VIEW,Qt::CheckStateRole).toInt() > 1)
+       mSlicerManagers[i]->GetSlicer(1)->Render();
+ //     if (DataTree->topLevelItem(i)->data(COLUMN_DL_VIEW,Qt::CheckStateRole).toInt() > 1)
        mSlicerManagers[i]->GetSlicer(2)->Render();
+       mSlicerManagers[i]->GetSlicer(3)->Render();
    }
  }
  //------------------------------------------------------------------------------
@@@ -1494,33 -1548,28 +1548,28 @@@ void vvMainWindow::InitDisplay(
  //------------------------------------------------------------------------------
  void vvMainWindow::DisplaySliders(int slicer, int window)
  {
+   if(!mSlicerManagers[slicer]->GetSlicer(window)->GetRenderer()->GetDraw())
+     return;
    int range[2];
    mSlicerManagers[slicer]->GetSlicer(window)->GetSliceRange(range);
    int position = mSlicerManagers[slicer]->GetSlicer(window)->GetSlice();
-   int tRange[2];
-   tRange[0] = 0;
-   tRange[1] = mSlicerManagers[slicer]->GetSlicer(window)->GetTMax();
-   int tPosition = mSlicerManagers[slicer]->GetSlicer(window)->GetMaxCurrentTSlice();
-   bool showHorizontal = false;
-   bool showVertical = false;
    if (range[1]>0)
-     showVertical = true;
-   if (tRange[1]>0)
-     showHorizontal = true;
-   if (showVertical)
      verticalSliders[window]->show();
    else
      verticalSliders[window]->hide();
    verticalSliders[window]->setRange(range[0],range[1]);
    verticalSliders[window]->setValue(position);
  
-   if (showHorizontal)
+   int tRange[2];
+   tRange[0] = 0;
+   tRange[1] = mSlicerManagers[slicer]->GetSlicer(window)->GetTMax();
+   if (tRange[1]>0)
      horizontalSliders[window]->show();
    else
      horizontalSliders[window]->hide();
    horizontalSliders[window]->setRange(tRange[0],tRange[1]);
+   int tPosition = mSlicerManagers[slicer]->GetSlicer(window)->GetMaxCurrentTSlice();
    horizontalSliders[window]->setValue(tPosition);
  }
  //------------------------------------------------------------------------------
@@@ -1769,6 -1818,32 +1818,32 @@@ void vvMainWindow::ApplyWindowLevelToAl
  }
  //------------------------------------------------------------------------------
  
+ //------------------------------------------------------------------------------
+ void vvMainWindow::ApplyWindowToSetOfImages(double window, unsigned int indexMin, unsigned int indexMax)
+ {
+   for (unsigned int i = indexMin; i <= indexMax && i < mSlicerManagers.size(); i++) {
+     if (mSlicerManagers[i] == NULL)
+       continue;
+     mSlicerManagers[i]->SetColorWindow(window);
+     mSlicerManagers[i]->SetPreset(6);
+     mSlicerManagers[i]->Render();
+   }
+ }
+ //------------------------------------------------------------------------------
+ //------------------------------------------------------------------------------
+ void vvMainWindow::ApplyLevelToSetOfImages(double level, unsigned int indexMin, unsigned int indexMax)
+ {
+   for (unsigned int i = indexMin; i <= indexMax && i < mSlicerManagers.size(); i++) {
+     if (mSlicerManagers[i] == NULL)
+       continue;
+     mSlicerManagers[i]->SetColorLevel(level);
+     mSlicerManagers[i]->SetPreset(6);
+     mSlicerManagers[i]->Render();
+   }
+ }
+ //------------------------------------------------------------------------------
  //------------------------------------------------------------------------------
  void vvMainWindow::UpdateLinkManager(std::string id, int slicer, double x, double y, double z, int temps)
  {
@@@ -2413,8 -2488,14 +2488,14 @@@ void vvMainWindow::LinkAllImages(
  }
  
  //------------------------------------------------------------------------------
- void vvMainWindow::AddLink(QString image1,QString image2)
+ void vvMainWindow::AddLink(QString image1,QString image2,bool fromPanel)
  {
+   if (!fromPanel) {
+     // delegate to linkPanel if call came from elsewhere...
+     linkPanel->addLinkFromIds(image1, image2);
+     return;
+   }
+   
    unsigned int sm1 = 0;
    unsigned int sm2 = 0;
  
@@@ -2671,23 -2752,24 +2752,24 @@@ void vvMainWindow::UpdateTSlice(int sli
  //------------------------------------------------------------------------------
  void vvMainWindow::UpdateSliceRange(int slicer, int min, int max, int tmin, int tmax)
  {
-   int position = int((min+max)/2);
+   //int position = int((min+max)/2);
+   int position = mSlicerManagers[mCurrentPickedImageIndex]->GetSlicer(slicer)->GetSlice();
    if (slicer == 0) {
-     NOVerticalSlider->setValue(position);
      NOVerticalSlider->setRange(min,max);
      NOHorizontalSlider->setRange(tmin,tmax);
+     NOVerticalSlider->setValue(position);
    } else if (slicer == 1) {
-     NEVerticalSlider->setValue(position);
      NEVerticalSlider->setRange(min,max);
      NEHorizontalSlider->setRange(tmin,tmax);
+     NEVerticalSlider->setValue(position);
    } else if (slicer == 2) {
-     SOVerticalSlider->setValue(position);
      SOVerticalSlider->setRange(min,max);
      SOHorizontalSlider->setRange(tmin,tmax);
+     SOVerticalSlider->setValue(position);
    } else if (slicer == 3) {
-     SEVerticalSlider->setValue(position);
      SEVerticalSlider->setRange(min,max);
      SEHorizontalSlider->setRange(tmin,tmax);
+     SEVerticalSlider->setValue(position);
    }
  }
  //------------------------------------------------------------------------------
@@@ -3074,7 -3156,7 +3156,7 @@@ vvSlicerManager* vvMainWindow::AddImage
    DataTree->setItemWidget(item, COLUMN_RELOAD_IMAGE, rButton);
  
    //set the id of the image
-   QString id = slicer_manager->GetFileName().c_str() + QString::number(mSlicerManagers.size()-1);
+   QString id = QDir::current().absoluteFilePath(slicer_manager->GetFileName().c_str()) + QString::number(mSlicerManagers.size()-1);
    item->setData(COLUMN_IMAGE_NAME,Qt::UserRole,id.toStdString().c_str());
    mSlicerManagers.back()->SetId(id.toStdString());
  
diff --combined vv/vvSlicer.cxx
index 548d0f366d5fbb5ffb1e6ef4546b6888b98a44f8,92463226aa392cb2bbd719dea9558e00eac8bc73..924eb1d8161d096452e7849df145da07c17fa1d9
@@@ -41,7 -41,6 +41,7 @@@
  #include <vtkDataArray.h>
  #include <vtkFloatArray.h>
  #include <vtkClipPolyData.h>
 +#include <vtkActor2DCollection.h>
  #include <vtkGlyph3D.h>
  #include <vtkMath.h>
  #include <vtkCursor3D.h>
@@@ -91,10 -90,10 +91,10 @@@ vvSlicer::vvSlicer(
    mCurrent[1] = -VTK_DOUBLE_MAX;
    mCurrent[2] = -VTK_DOUBLE_MAX;
  
-   mCursor[0] = -VTK_DOUBLE_MAX;
-   mCursor[1] = -VTK_DOUBLE_MAX;
-   mCursor[2] = -VTK_DOUBLE_MAX;
-   mCursor[3] = -VTK_DOUBLE_MAX;
+   mCursor[0] = 0;//-VTK_DOUBLE_MAX;
+   mCursor[1] = 0;//-VTK_DOUBLE_MAX;
+   mCursor[2] = 0;//-VTK_DOUBLE_MAX;
+   mCursor[3] = 0;//-VTK_DOUBLE_MAX;
  
    mSubSampling = 5;
    mScale = 1;
@@@ -581,40 -580,36 +581,40 @@@ void vvSlicer::SetLandmarks(vvLandmarks
  
      if (!mCross)
        mCross = vtkSmartPointer<vtkCursor3D>::New();
 +      if (!mClipBox)
 +      mClipBox = vtkSmartPointer<vtkBox>::New();
 +    if (!mLandClipper)
 +      mLandClipper = vtkSmartPointer<vvClipPolyData>::New();
 +    if (!mLandGlyph)
 +      mLandGlyph = vtkSmartPointer<vtkGlyph3D>::New();
 +    if (!mLandMapper)
 +      mLandMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
 +    if (!mLandActor)
 +      mLandActor = vtkSmartPointer<vtkActor>::New();
 +
      mCross->SetFocalPoint(0.0,0.0,0.0);
      mCross->SetModelBounds(-10,10,-10,10,-10,10);
      mCross->AllOff();
      mCross->AxesOn();
  
 -    if (!mLandGlyph)
 -      mLandGlyph = vtkSmartPointer<vtkGlyph3D>::New();
 +    mLandClipper->SetClipFunction(mClipBox);
 +    mLandClipper->InsideOutOn();
 +    mLandClipper->SetInput(mLandmarks->GetOutput());
 +
      mLandGlyph->SetSource(mCross->GetOutput());
 -    mLandGlyph->SetInput(landmarks->GetOutput());
 +    mLandGlyph->SetInput(mLandClipper->GetOutput());
      //mLandGlyph->SetIndexModeToScalar();
 -    mLandGlyph->SetRange(0,1);
 -    mLandGlyph->ScalingOff();
 -
 -    mLandGlyph->SetColorModeToColorByScalar();
 +    //mLandGlyph->SetRange(0,1);
 +    //mLandGlyph->ScalingOff();
  
 -    if (!mClipBox)
 -      mClipBox = vtkSmartPointer<vtkBox>::New();
 -    if (!mLandClipper)
 -      mLandClipper = vtkSmartPointer<vtkClipPolyData>::New();
 -    mLandClipper->InsideOutOn();
 -    mLandClipper->SetInput(mLandGlyph->GetOutput());
 -    mLandClipper->SetClipFunction(mClipBox);
 +    //mLandGlyph->SetColorModeToColorByScalar();
 +    
 +    mLandGlyph->SetScaleModeToDataScalingOff();
 +    mLandGlyph->SetIndexModeToOff();
  
 -    if (!mLandMapper)
 -      mLandMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
 -    mLandMapper->SetInputConnection(mLandClipper->GetOutputPort());
 +    mLandMapper->SetInputConnection(mLandGlyph->GetOutputPort());
      //mLandMapper->ScalarVisibilityOff();
  
 -    if (!mLandActor)
 -      mLandActor = vtkSmartPointer<vtkActor>::New();
      mLandActor->SetMapper(mLandMapper);
      mLandActor->GetProperty()->SetColor(255,10,212);
      mLandActor->SetPickable(0);
@@@ -818,15 -813,22 +818,22 @@@ void vvSlicer::SetSliceOrientation(int 
      AdjustResliceToSliceOrientation(mOverlayReslice);
  
    // Update the viewer
-   int *range = this->GetSliceRange();
-   if (range)
-     this->Slice = static_cast<int>((range[0] + range[1]) * 0.5);
+   
    // Go to current cursor position
    // double* cursorPos = GetCursorPosition();
    // DDV(cursorPos, 3);
    // SetCurrentPosition(cursorPos[0],cursorPos[1],cursorPos[2],cursorPos[3]);
  
+   if (this->Renderer && this->GetInput()) {
+     double s = mCursor[orientation];
+     double sCursor = (s - this->GetInput()->GetOrigin()[orientation])/this->GetInput()->GetSpacing()[orientation];
+     this->Slice = static_cast<int>(sCursor);
+   }
+   
+ //   int *range = this->GetSliceRange();
+ //   if (range)
+ //     this->Slice = static_cast<int>((range[0] + range[1]) * 0.5);
    this->UpdateOrientation();
    this->UpdateDisplayExtent();
  
@@@ -1446,38 -1448,13 +1453,38 @@@ void vvSlicer::UpdateLandmarks(
  {
    vtkPolyData *pd = static_cast<vtkPolyData*>(mLandClipper->GetInput());
    if (pd->GetPoints()) {
 -    mLandGlyph->SetRange(0,1);
 -    mLandGlyph->Modified();
 -    mLandGlyph->Update();
 +    //mLandGlyph->SetRange(0,1);
 +    //mLandGlyph->Modified();
 +    //mLandGlyph->Update();
  
      mClipBox->Modified();
      mLandClipper->Update();
      mLandMapper->Update();
 +    //Let's add the captions
 +    //First remove all captions:
 +    for(unsigned int i=0;i<mLandLabelActors.size();i++) {
 +      this->Renderer->RemoveActor2D(mLandLabelActors[i]);
 +      //allActors2D->Remove (mLandLabelActors[i]);
 +    }
 +    mLandLabelActors.clear();
 +    //Next add the captions to the displayed points
 +    for (vtkIdType id=0; id<mLandClipper->GetOutput()->GetNumberOfPoints(); id++) {
 +        double *position = mLandClipper->GetOutput()->GetPoint(id);
 +      vtkStdString label = static_cast<vtkStringArray*>(mLandClipper->GetOutput()->GetPointData()->GetAbstractArray("labels"))->GetValue(id);
 +      vtkSmartPointer<vtkCaptionActor2D> label_actor = vtkSmartPointer<vtkCaptionActor2D>::New();
 +      label_actor->SetCaption(label);
 +      label_actor->SetAttachmentPoint(position);
 +      label_actor->GetCaptionTextProperty()->SetColor(1,0,0);
 +      label_actor->GetCaptionTextProperty()->SetOrientation(33.333333);
 +      label_actor->GetCaptionTextProperty()->SetFontFamilyToTimes();
 +      label_actor->GetCaptionTextProperty()->SetBold(0);
 +      label_actor->GetCaptionTextProperty()->SetFontSize(6);
 +      label_actor->BorderOff();
 +      label_actor->LeaderOff();
 +      label_actor->ThreeDimensionalLeaderOff();
 +      mLandLabelActors.push_back(label_actor);
 +      this->Renderer->AddActor2D(mLandLabelActors[id]);
 +     }
    }
  
  }