[vtk-developers] Issue with vtkRenderer::ResetCameraClippingRange()

Mathieu Malaterre mathieu.malaterre at gmail.com
Mon Dec 22 11:37:44 EST 2008


Hello there,

  I have written up a small example to exhibit an issue I am having
with VTK 5.2:

https://gdcm.svn.sourceforge.net/svnroot/gdcm/Sandbox/VTK

  If you start the small app :

 $ ./test /usr/share/VTKData/Data/headsq

The first slice of the headsq is shown (vtkImageViewer2). Now press a
couple of time 'space' and you'll be iterating over each slice. You'll
notice quickly that the ending slice are all black. Now restart the
experience but leave the initial spacing of 1.5 for the Z direction
and you'll see that all slice will be shown.

  Could someone please let me know what I am missing after calling
vtkRenderer::ResetCameraClippingRange() (AFAIK as I know there should
not be anything else required).

Thank you, and happy new year.
-- 
Mathieu

#include "vtkImageViewer2.h"
#include "vtkCommand.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkTestUtilities.h"
#include "vtkImageReader.h"

class vtkGDCMObserver : public vtkCommand
{
public:
  static vtkGDCMObserver *New()
    {
    return new vtkGDCMObserver;
    }
  vtkGDCMObserver()
    {
    ImageViewer = NULL;
    }
  ~vtkGDCMObserver()
    {
    }
  virtual void Execute(vtkObject *caller, unsigned long event, void*
/*calldata*/)
    {
    if ( this->ImageViewer )
      {
      vtkRenderWindowInteractor * rwi =
vtkRenderWindowInteractor::SafeDownCast( caller );
      if ( event == vtkCommand::CharEvent )
        {
        char keycode = 0;
        if( rwi ) keycode = rwi->GetKeyCode();
        int max = ImageViewer->GetSliceMax();
        int slice = (ImageViewer->GetSlice() + 1) % ++max;
        ImageViewer->SetSlice( slice );
        ImageViewer->GetRenderer()->ResetCameraClippingRange();
        ImageViewer->Render();
        }
      }
    }
  vtkImageViewer2 *ImageViewer;
};

int main(int argc, char *argv[])
{
  char* fname =
    vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/headsq/quarter");

  vtkImageReader *reader = vtkImageReader::New();
  reader->SetDataByteOrderToLittleEndian();
  reader->SetDataExtent(0,63,0,63,1,93);
  //reader->SetDataSpacing(3.2, 3.2, 1.5); //ok
  reader->SetDataSpacing(3.2, 3.2, 10.5); // not ok
  reader->SetFilePrefix(fname);
  reader->SetDataMask(0x7fff);

  delete [] fname;

  vtkImageViewer2 *viewer = vtkImageViewer2::New();
  viewer->SetInput(reader->GetOutput());

  //viewer->SetColorLevel (0.5 * (range[1] + range[0]));
  //viewer->SetColorWindow (range[1] - range[0]);

  vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
  viewer->SetupInteractor (iren);
  viewer->Render();

  vtkGDCMObserver *obs = vtkGDCMObserver::New();
  obs->ImageViewer = viewer;
  iren->AddObserver(vtkCommand::CharEvent,obs);
  obs->Delete();

  iren->Initialize();
  iren->Start();

  reader->Delete();
  viewer->Delete();
  iren->Delete();

  return 0;
}



More information about the vtk-developers mailing list