[vtkusers] image reader problems - enforcing persistance of data after delete

dean.inglis at camris.ca dean.inglis at camris.ca
Mon Dec 10 17:08:23 EST 2007


In my app, I read in 3D image data from either
vtkGdcmReader, vtkXMLImageDataReader, vtkStructuredPointsReader or
vtkMetaImageReader.

This is done in a two stage process:

stage 1:
  determine the file type based on extension read from a file open dialogue
  set the reader's ReleaseDataFlag to On
  add a progress observer 
  allocate the appropriate reader, set a generic reference pointer to it as a vtkAlgorithm*  
  delete the reader

stage 2:
  downcast the correct type of reader from the vtkAlgorithm and get the output
      vtkImageData* input = reader->GetOutput();
      input->UpdateInformation();
      input->Update(); 
 the application "this" maintains a pointer to the output by reference counting
      if (this->ImageData)
        {
         this->ImageData->UnRegister(this);  // release hold on any previous data
         }
      this->ImageData  = input; 
      this->ImageData->UnRegister(this);  // hold onto the new data  
 display the data    


This all works fine for vtkGdcmReader and for vtkMetaImageReader but not vtkXMLImageDataReader or vtkStructuredPointsReader.  With these
readers, scrolling through the image slices causes the data to be re-read
from disk, as evidenced by reappearance of a progress meter.  Are there
known issues with these classes?  Why would their output behave differently than
that obtained with the other two readers? Is there a way to force the reader
to destroy but leave its output intact without copying the output to a new
vtkImageData?

Dean
 



More information about the vtkusers mailing list