Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

vtkGdcmReader Class Reference

#include <vtkGdcmReader.h>

List of all members.

Public Member Functions

 vtkTypeRevisionMacro (vtkGdcmReader, vtkImageReader)
void PrintSelf (ostream &os, vtkIndent indent)
virtual void RemoveAllFileName (void)
virtual void AddFileName (const char *name)
virtual void SetFileName (const char *name)
 vtkSetMacro (AllowLookupTable, int)
 vtkGetMacro (AllowLookupTable, int)
 vtkBooleanMacro (AllowLookupTable, int)
 vtkGetObjectMacro (LookupTable, vtkLookupTable)

Static Public Member Functions

vtkGdcmReaderNew ()

Protected Member Functions

 vtkGdcmReader ()
 ~vtkGdcmReader ()
virtual void ExecuteInformation ()
virtual void ExecuteData (vtkDataObject *output)
virtual void BuildFileListFromPattern ()
virtual int CheckFileCoherence ()

Private Member Functions

void RemoveAllInternalFileName (void)
void AddInternalFileName (const char *name)
size_t LoadImageInMemory (std::string FileName, unsigned char *Dest, const unsigned long UpdateProgressTarget, unsigned long &UpdateProgressCount)

Private Attributes

vtkLookupTable * LookupTable
vtkTimeStamp fileTime
int AllowLookupTable
int NumColumns
int NumLines
int TotalNumberOfPlanes
int NumComponents
std::string ImageType
size_t PixelSize
std::list< std::string > FileNameList
std::list< std::string > InternalFileNameList


Constructor & Destructor Documentation

vtkGdcmReader::vtkGdcmReader  )  [protected]
 

Definition at line 83 of file vtkGdcmReader.cxx.

References AllowLookupTable, and LookupTable.

00084 {
00085    this->LookupTable = NULL;
00086    this->AllowLookupTable = 0;
00087 }

vtkGdcmReader::~vtkGdcmReader  )  [protected]
 

Definition at line 89 of file vtkGdcmReader.cxx.

References InternalFileNameList, LookupTable, and RemoveAllFileName().

00090 {
00091    this->RemoveAllFileName();
00092    this->InternalFileNameList.clear();
00093    if(this->LookupTable) 
00094       this->LookupTable->Delete();
00095 }


Member Function Documentation

void vtkGdcmReader::AddFileName const char *  name  )  [virtual]
 

Definition at line 126 of file vtkGdcmReader.cxx.

References FileNameList.

Referenced by main().

00127 {
00128    // We need to bypass the const pointer [since list<>.push_bash() only
00129    // takes a char* (but not a const char*)] by making a local copy:
00130    char * LocalName = new char[strlen(name) + 1];
00131    strcpy(LocalName, name);
00132    this->FileNameList.push_back(LocalName);
00133    delete[] LocalName;
00134    this->Modified();
00135 }

void vtkGdcmReader::AddInternalFileName const char *  name  )  [private]
 

Definition at line 613 of file vtkGdcmReader.cxx.

References InternalFileNameList.

Referenced by BuildFileListFromPattern().

00614 {
00615    char * LocalName = new char[strlen(name) + 1];
00616    strcpy(LocalName, name);
00617    this->InternalFileNameList.push_back(LocalName);
00618    delete[] LocalName;
00619 }

void vtkGdcmReader::BuildFileListFromPattern  )  [protected, virtual]
 

Definition at line 342 of file vtkGdcmReader.cxx.

References AddInternalFileName(), FileNameList, InternalFileNameList, and RemoveAllInternalFileName().

Referenced by CheckFileCoherence().

00343 {
00344    this->RemoveAllInternalFileName();
00345 
00346    if ((! this->FileNameList.empty()) && this->FileName )
00347    {
00348       vtkErrorMacro(<< "Both AddFileName and SetFileName schemes were used");
00349       vtkErrorMacro(<< "No images loaded ! ");
00350       return;
00351    }
00352 
00353    if ((! this->FileNameList.empty()) && this->FilePrefix )
00354    {
00355       vtkErrorMacro(<< "Both AddFileName and SetFilePrefix schemes were used");
00356       vtkErrorMacro(<< "No images loaded ! ");
00357       return;
00358    }
00359 
00360    if (this->FileName && this->FilePrefix)
00361    {
00362       vtkErrorMacro(<< "Both SetFileName and SetFilePrefix schemes were used");
00363       vtkErrorMacro(<< "No images loaded ! ");
00364       return;
00365    }
00366 
00367    if (! this->FileNameList.empty()  )
00368    {
00369       vtkDebugMacro(<< "Using the AddFileName specified files");
00370       this->InternalFileNameList=this->FileNameList;
00371       return;
00372    }
00373 
00374    if (!this->FileName && !this->FilePrefix)
00375    {
00376       vtkErrorMacro(<< "FileNames are not set. Either use AddFileName() or");
00377       vtkErrorMacro(<< "specify a FileName or FilePrefix.");
00378       return;
00379    }
00380 
00381    if( this->FileName )
00382    {
00383       // Single file loading (as given with ::SetFileName()):
00384       // Case of multi-frame file considered here
00385       this->ComputeInternalFileName(this->DataExtent[4]);
00386       vtkDebugMacro(<< "Adding file " << this->InternalFileName);
00387       this->AddInternalFileName(this->InternalFileName);
00388    }
00389    else
00390    {
00391       // Multi file loading (as given with ::SetFilePattern()):
00392       for (int idx = this->DataExtent[4]; idx <= this->DataExtent[5]; ++idx)
00393       {
00394          this->ComputeInternalFileName(idx);
00395          vtkDebugMacro(<< "Adding file " << this->InternalFileName);
00396          this->AddInternalFileName(this->InternalFileName);
00397       }
00398    }
00399 }

int vtkGdcmReader::CheckFileCoherence  )  [protected, virtual]
 

Definition at line 417 of file vtkGdcmReader.cxx.

References AllowLookupTable, BuildFileListFromPattern(), gdcm::File::GetNumberOfScalarComponents(), gdcm::File::GetNumberOfScalarComponentsRaw(), gdcm::File::GetPixelSize(), gdcm::File::GetPixelType(), gdcm::File::GetXSize(), gdcm::File::GetXSpacing(), gdcm::File::GetYSize(), gdcm::File::GetYSpacing(), gdcm::File::GetZSize(), gdcm::File::GetZSpacing(), gdcm::File::HasLUT(), ImageType, InternalFileNameList, gdcm::File::IsReadable(), NumColumns, NumComponents, and NumLines.

Referenced by ExecuteInformation().

00418 {
00419    int ReturnedTotalNumberOfPlanes = 0;   // The returned value.
00420 
00421    this->BuildFileListFromPattern();
00422    if (this->InternalFileNameList.empty())
00423    {
00424       vtkErrorMacro(<< "FileNames are not set.");
00425       return 0;
00426    }
00427 
00428    bool FoundReferenceFile = false;
00429    int  ReferenceNZ = 0;
00430 
00431    // Loop on the filenames:
00432    // - check for their existence and gdcm "parsability"
00433    // - get the coherence check done:
00434    for (std::list<std::string>::iterator filename = InternalFileNameList.begin();
00435         filename != InternalFileNameList.end();
00436         ++filename)
00437    {
00438       // The file is always added in the number of planes
00439       //  - If file doesn't exist, it will be replaced by a black plane in the 
00440       //    ExecuteData method
00441       //  - If file has more than 1 plane, other planes will be added later to
00442       //    to the ReturnedTotalNumberOfPlanes variable counter
00443       ReturnedTotalNumberOfPlanes += 1;
00444 
00446       if(*filename == std::string("GDCM_UNREADABLE"))
00447          continue;
00448 
00450       // Stage 1.1: check for file existence.
00451       FILE *fp;
00452       fp = fopen(filename->c_str(),"rb");
00453       if (!fp)
00454       {
00455          vtkErrorMacro(<< "Unable to open file " << filename->c_str());
00456          vtkErrorMacro(<< "Removing this file from readed files "
00457                      << filename->c_str());
00458          *filename = "GDCM_UNREADABLE";
00459          continue;
00460       }
00461       fclose(fp);
00462 
00463       // Stage 1.2: check for Gdcm parsability
00464       gdcm::File GdcmFile(filename->c_str() );
00465       if (!GdcmFile.IsReadable())
00466       {
00467          vtkErrorMacro(<< "Gdcm cannot parse file " << filename->c_str());
00468          vtkErrorMacro(<< "Removing this file from readed files "
00469                         << filename->c_str());
00470          *filename = "GDCM_UNREADABLE";
00471          continue;
00472       }
00473 
00474       // Stage 1.3: further gdcm compatibility on PixelType
00475       std::string type = GdcmFile.GetPixelType();
00476       if (   (type !=  "8U") && (type !=  "8S")
00477           && (type != "16U") && (type != "16S")
00478           && (type != "32U") && (type != "32S") )
00479       {
00480          vtkErrorMacro(<< "Bad File Type for file " << filename->c_str() << "\n"
00481                        << "   File type found : " << type.c_str() 
00482                        << " (might be 8U, 8S, 16U, 16S, 32U, 32S) \n"
00483                        << "   Removing this file from readed files");
00484          *filename = "GDCM_UNREADABLE";
00485          continue;
00486       }
00487 
00488       // Stage 2: check coherence of the set of files
00489       int NX = GdcmFile.GetXSize();
00490       int NY = GdcmFile.GetYSize();
00491       int NZ = GdcmFile.GetZSize();
00492       if (FoundReferenceFile) 
00493       {
00494          // Stage 2.1: mandatory coherence stage:
00495          if (   ( NX   != this->NumColumns )
00496              || ( NY   != this->NumLines )
00497              || ( type != this->ImageType ) ) 
00498          {
00499             vtkErrorMacro(<< "This file is not coherent with previous ones"
00500                            << filename->c_str());
00501             vtkErrorMacro(<< "Removing this file from readed files "
00502                            << filename->c_str());
00503             *filename = "GDCM_UNREADABLE";
00504             continue;
00505          }
00506 
00507          // Stage 2.2: optional coherence stage
00508          if ( NZ != ReferenceNZ )
00509          {
00510             vtkErrorMacro(<< "File is not coherent in Z with previous ones"
00511                            << filename->c_str());
00512          }
00513          else
00514          {
00515             vtkDebugMacro(<< "File is coherent with previous ones"
00516                            << filename->c_str());
00517          }
00518 
00519          // Stage 2.3: when the file contains a volume (as opposed to an image),
00520          // notify the caller.
00521          if (NZ > 1)
00522          {
00523             vtkErrorMacro(<< "This file contains multiple planes (images)"
00524                            << filename->c_str());
00525          }
00526 
00527          // Eventually, this file can be added on the stack. Update the
00528          // full size of the stack
00529          vtkDebugMacro("Number of planes added to the stack: " << NZ);
00530          ReturnedTotalNumberOfPlanes += NZ - 1; // First plane already added
00531          continue;
00532 
00533       } 
00534       else 
00535       {
00536          // We didn't have a workable reference file yet. Set this one
00537          // as the reference.
00538          FoundReferenceFile = true;
00539          vtkDebugMacro(<< "This file taken as coherence reference:"
00540                         << filename->c_str());
00541          vtkDebugMacro(<< "Image dimension of reference file as read from Gdcm:" 
00542                         << NX << " " << NY << " " << NZ);
00543          vtkDebugMacro(<< "Number of planes added to the stack: " << NZ);
00544          // Set aside the size of the image
00545          this->NumColumns = NX;
00546          this->NumLines   = NY;
00547          ReferenceNZ      = NZ;
00548          ReturnedTotalNumberOfPlanes += NZ - 1; // First plane already added
00549          this->ImageType = type;
00550          this->PixelSize = GdcmFile.GetPixelSize();
00551 
00552          if( GdcmFile.HasLUT() && this->AllowLookupTable )
00553          {
00554             // I could raise an error is AllowLookupTable is on and HasLUT() off
00555             this->NumComponents = GdcmFile.GetNumberOfScalarComponentsRaw();
00556          }
00557          else
00558          {
00559             this->NumComponents = GdcmFile.GetNumberOfScalarComponents(); //rgb or mono
00560          }
00561        
00562          //Set image spacing
00563          this->DataSpacing[0] = GdcmFile.GetXSpacing();
00564          this->DataSpacing[1] = GdcmFile.GetYSpacing();
00565          this->DataSpacing[2] = GdcmFile.GetZSpacing();
00566 
00567          //Set image origin
00568          //this->DataOrigin[0] = GdcmFile.GetXOrigin();
00569          //this->DataOrigin[1] = GdcmFile.GetYOrigin();
00570          //this->DataOrigin[2] = GdcmFile.GetZOrigin();
00571 
00572       }
00573    } // End of loop on filename
00574 
00576    // count the loadable number of files and display their number:
00577    int NumberCoherentFiles = 0;
00578    for (std::list<std::string>::iterator it = InternalFileNameList.begin();
00579         it != InternalFileNameList.end();
00580         ++it)
00581    {
00582       if (*it != "GDCM_UNREADABLE")
00583       {
00584          NumberCoherentFiles++;
00585       }
00586    }
00587    vtkDebugMacro(<< "Number of coherent files: " << NumberCoherentFiles);
00588 
00589    if (ReturnedTotalNumberOfPlanes == 0)
00590    {
00591       vtkErrorMacro(<< "No loadable file.");
00592    }
00593 
00594    vtkDebugMacro(<< "Total number of planes on the stack: "
00595                   << ReturnedTotalNumberOfPlanes);
00596    
00597    return ReturnedTotalNumberOfPlanes;
00598 }

void vtkGdcmReader::ExecuteData vtkDataObject *  output  )  [protected, virtual]
 

Definition at line 263 of file vtkGdcmReader.cxx.

References InternalFileNameList, LoadImageInMemory(), NumColumns, and NumLines.

00264 {
00265    if (this->InternalFileNameList.empty())
00266    {
00267       vtkErrorMacro(<< "A least a valid FileName must be specified.");
00268       return;
00269    }
00270 
00271    // FIXME : extraneous parsing of header is made when allocating OuputData
00272    vtkImageData *data = this->AllocateOutputData(output);
00273    data->SetExtent(this->DataExtent);
00274    data->GetPointData()->GetScalars()->SetName("DicomImage-Volume");
00275 
00276    // Test if output has valid extent
00277    // Prevent memory errors
00278    if((this->DataExtent[1]-this->DataExtent[0]>=0) &&
00279       (this->DataExtent[3]-this->DataExtent[2]>=0) &&
00280       (this->DataExtent[5]-this->DataExtent[4]>=0))
00281    {
00282       // The memory size for a full stack of images of course depends
00283       // on the number of planes and the size of each image:
00284       //size_t StackNumPixels = this->NumColumns * this->NumLines
00285       //                      * this->TotalNumberOfPlanes * this->NumComponents;
00286       //size_t stack_size = StackNumPixels * this->PixelSize; //not used
00287       // Allocate pixel data space itself.
00288 
00289       // Variables for the UpdateProgress. We shall use 50 steps to signify
00290       // the advance of the process:
00291       unsigned long UpdateProgressTarget = (unsigned long) ceil (this->NumLines
00292                                          * this->TotalNumberOfPlanes
00293                                          / 50.0);
00294       // The actual advance measure:
00295       unsigned long UpdateProgressCount = 0;
00296 
00297       // Feeling the allocated memory space with each image/volume:
00298       unsigned char *Dest = (unsigned char *)data->GetScalarPointer();
00299       for (std::list<std::string>::iterator filename  = InternalFileNameList.begin();
00300            filename != InternalFileNameList.end();
00301            ++filename)
00302       { 
00303          // Images that were tagged as unreadable in CheckFileCoherence()
00304          // are substituted with a black image to let the caller visually
00305          // notice something wrong is going on:
00306          if (*filename != "GDCM_UNREADABLE")
00307          {
00308             // Update progress related for good files is made in LoadImageInMemory
00309             Dest += this->LoadImageInMemory(*filename, Dest,
00310                                             UpdateProgressTarget,
00311                                             UpdateProgressCount);
00312          } 
00313          else 
00314          {
00315             // We insert a black image in the stack for the user to be aware that
00316             // this image/volume couldn't be loaded. We simply skip one image
00317             // size:
00318             Dest += this->NumColumns * this->NumLines * this->PixelSize;
00319 
00320             // Update progress related for bad files:
00321             UpdateProgressCount += this->NumLines;
00322             if (UpdateProgressTarget > 0)
00323             {
00324                if (!(UpdateProgressCount%UpdateProgressTarget))
00325                {
00326                   this->UpdateProgress(UpdateProgressCount/(50.0*UpdateProgressTarget));
00327                }
00328             }
00329          } // Else, file not loadable
00330       } // Loop on files
00331    }
00332 }

void vtkGdcmReader::ExecuteInformation  )  [protected, virtual]
 

Definition at line 156 of file vtkGdcmReader.cxx.

References CheckFileCoherence(), fileTime, ImageType, NumColumns, NumLines, and TotalNumberOfPlanes.

00157 {
00158    if(this->MTime>this->fileTime)
00159    {
00160       this->TotalNumberOfPlanes = this->CheckFileCoherence();
00161       if ( this->TotalNumberOfPlanes == 0)
00162       {
00163          vtkErrorMacro(<< "File set is not coherent. Exiting...");
00164          return;
00165       }
00166       
00167       // if the user has not set the extent, but has set the VOI
00168       // set the z axis extent to the VOI z axis
00169       if (this->DataExtent[4]==0 && this->DataExtent[5] == 0 &&
00170       (this->DataVOI[4] || this->DataVOI[5]))
00171       {
00172          this->DataExtent[4] = this->DataVOI[4];
00173          this->DataExtent[5] = this->DataVOI[5];
00174       }
00175 
00176       // When the user has set the VOI, check it's coherence with the file content.
00177       if (this->DataVOI[0] || this->DataVOI[1] || 
00178       this->DataVOI[2] || this->DataVOI[3] ||
00179       this->DataVOI[4] || this->DataVOI[5])
00180       { 
00181          if ((this->DataVOI[0] < 0) ||
00182              (this->DataVOI[1] >= this->NumColumns) ||
00183              (this->DataVOI[2] < 0) ||
00184              (this->DataVOI[3] >= this->NumLines) ||
00185              (this->DataVOI[4] < 0) ||
00186              (this->DataVOI[5] >= this->TotalNumberOfPlanes ))
00187          {
00188             vtkWarningMacro(<< "The requested VOI is larger than expected extent.");
00189             this->DataVOI[0] = 0;
00190             this->DataVOI[1] = this->NumColumns - 1;
00191             this->DataVOI[2] = 0;
00192             this->DataVOI[3] = this->NumLines - 1;
00193             this->DataVOI[4] = 0;
00194             this->DataVOI[5] = this->TotalNumberOfPlanes - 1;
00195          }
00196       }
00197 
00198       // Positionate the Extent.
00199       this->DataExtent[0] = 0;
00200       this->DataExtent[1] = this->NumColumns - 1;
00201       this->DataExtent[2] = 0;
00202       this->DataExtent[3] = this->NumLines - 1;
00203       this->DataExtent[4] = 0;
00204       this->DataExtent[5] = this->TotalNumberOfPlanes - 1;
00205   
00206       // We don't need to positionate the Endian related stuff (by using
00207       // this->SetDataByteOrderToBigEndian() or SetDataByteOrderToLittleEndian()
00208       // since the reading of the file is done by gdcm.
00209       // But we do need to set up the data type for downstream filters:
00210       if      ( ImageType == "8U" )
00211       {
00212          vtkDebugMacro(<< "8 bits unsigned image");
00213          this->SetDataScalarTypeToUnsignedChar(); 
00214       }
00215       else if ( ImageType == "8S" )
00216       {
00217          vtkErrorMacro(<< "Cannot handle 8 bit signed files");
00218          return;
00219       }
00220       else if ( ImageType == "16U" )
00221       {
00222          vtkDebugMacro(<< "16 bits unsigned image");
00223          this->SetDataScalarTypeToUnsignedShort();
00224       }
00225       else if ( ImageType == "16S" )
00226       {
00227          vtkDebugMacro(<< "16 bits signed image");
00228          this->SetDataScalarTypeToShort();
00229          //vtkErrorMacro(<< "Cannot handle 16 bit signed files");
00230       }
00231       else if ( ImageType == "32U" )
00232       {
00233          vtkDebugMacro(<< "32 bits unsigned image");
00234          vtkDebugMacro(<< "WARNING: forced to signed int !");
00235          this->SetDataScalarTypeToInt();
00236       }
00237       else if ( ImageType == "32S" )
00238       {
00239          vtkDebugMacro(<< "32 bits signed image");
00240          this->SetDataScalarTypeToInt();
00241       }
00242       else if ( ImageType == "FD" )
00243       {
00244          vtkDebugMacro(<< "64 bits Double image");
00245          this->SetDataScalarTypeToDouble();
00246       }
00247       //Set number of scalar components:
00248       this->SetNumberOfScalarComponents(this->NumComponents);
00249 
00250       this->fileTime=this->MTime;
00251    }
00252 
00253    this->Superclass::ExecuteInformation();
00254 }

size_t vtkGdcmReader::LoadImageInMemory std::string  FileName,
unsigned char *  Dest,
const unsigned long  UpdateProgressTarget,
unsigned long &  UpdateProgressCount
[private]
 

Definition at line 625 of file vtkGdcmReader.cxx.

References AllowLookupTable, gdcm::FileHelper::GetFile(), gdcm::FileHelper::GetImageData(), gdcm::FileHelper::GetImageDataRaw(), gdcm::FileHelper::GetImageDataSize(), gdcm::FileHelper::GetLutRGBA(), LookupTable, and NumComponents.

Referenced by ExecuteData().

00630 {
00631    vtkDebugMacro(<< "Copying to memory image [" << fileName.c_str() << "]");
00632    gdcm::FileHelper file( fileName.c_str() );
00633    size_t size;
00634 
00635    // If the data structure of vtk for image/volume representation
00636    // were straigthforwards the following would be enough:
00637    //    GdcmFile.GetImageDataIntoVector((void*)Dest, size);
00638    // But vtk chooses to invert the lines of an image, that is the last
00639    // line comes first (for some axis related reasons?). Hence we need
00640    // to load the image line by line, starting from the end.
00641 
00642    int numColumns = file.GetFile()->GetXSize();
00643    int numLines   = file.GetFile()->GetYSize();
00644    int numPlanes  = file.GetFile()->GetZSize();
00645    int lineSize   = NumComponents * numColumns * file.GetFile()->GetPixelSize();
00646    int planeSize  = lineSize * numLines;
00647 
00648    unsigned char *src;
00649    
00650    if( file.GetFile()->HasLUT() && AllowLookupTable )
00651    {
00652       size               = file.GetImageDataSize();
00653       src                = (unsigned char*) file.GetImageDataRaw();
00654       unsigned char *lut = (unsigned char*) file.GetLutRGBA();
00655 
00656       if(!this->LookupTable)
00657       {
00658          this->LookupTable = vtkLookupTable::New();
00659       }
00660 
00661       this->LookupTable->SetNumberOfTableValues(256);
00662       for (int tmp=0; tmp<256; tmp++)
00663       {
00664          this->LookupTable->SetTableValue(tmp,
00665          (float)lut[4*tmp+0]/255.0,
00666          (float)lut[4*tmp+1]/255.0,
00667          (float)lut[4*tmp+2]/255.0,
00668          1);
00669       }
00670       this->LookupTable->SetRange(0,255);
00671       vtkDataSetAttributes *a = this->GetOutput()->GetPointData();
00672       a->GetScalars()->SetLookupTable(this->LookupTable);
00673       free(lut);
00674    }
00675    else
00676    {
00677       size = file.GetImageDataSize();
00678       src  = (unsigned char*)file.GetImageData();
00679    } 
00680 
00681    unsigned char *dst = dest + planeSize - lineSize;
00682    for (int plane = 0; plane < numPlanes; plane++)
00683    {
00684       for (int line = 0; line < numLines; line++)
00685       {
00686          // Copy one line at proper destination:
00687          memcpy((void*)dst, (void*)src, lineSize);
00688          src += lineSize;
00689          dst -= lineSize;
00690          // Update progress related:
00691          if (!(updateProgressCount%updateProgressTarget))
00692          {
00693             this->UpdateProgress(updateProgressCount/(50.0*updateProgressTarget));
00694          }
00695          updateProgressCount++;
00696       }
00697       dst += 2 * planeSize;
00698    }
00699    
00700    return size;
00701 }

vtkGdcmReader* vtkGdcmReader::New  )  [static]
 

Referenced by main().

void vtkGdcmReader::PrintSelf ostream &  os,
vtkIndent  indent
 

Definition at line 99 of file vtkGdcmReader.cxx.

References FileNameList.

00100 {
00101    this->Superclass::PrintSelf(os,indent);
00102    os << indent << "Filenames  : " << endl;
00103    vtkIndent nextIndent = indent.GetNextIndent();
00104    for (std::list<std::string>::iterator it = FileNameList.begin();
00105         it != FileNameList.end();
00106         ++it)
00107    {
00108       os << nextIndent << it->c_str() << endl ;
00109    }
00110 }

void vtkGdcmReader::RemoveAllFileName void   )  [virtual]
 

Definition at line 117 of file vtkGdcmReader.cxx.

References FileNameList.

Referenced by ~vtkGdcmReader().

00118 {
00119    this->FileNameList.clear();
00120    this->Modified();
00121 }

void vtkGdcmReader::RemoveAllInternalFileName void   )  [private]
 

Definition at line 605 of file vtkGdcmReader.cxx.

References InternalFileNameList.

Referenced by BuildFileListFromPattern().

00606 {
00607    this->InternalFileNameList.clear();
00608 }

void vtkGdcmReader::SetFileName const char *  name  )  [virtual]
 

Definition at line 140 of file vtkGdcmReader.cxx.

References FileNameList.

Referenced by main().

00141 {
00142    vtkImageReader2::SetFileName(name);
00143    // Since we maintain a list of filenames, when building a volume,
00144    // (see vtkGdcmReader::AddFileName), we additionaly need to purge
00145    // this list when we manually positionate the filename.
00146    vtkDebugMacro(<< "Clearing all files given with AddFileName");
00147    this->FileNameList.clear();
00148    this->Modified();
00149 }

vtkGdcmReader::vtkBooleanMacro AllowLookupTable  ,
int 
 

vtkGdcmReader::vtkGetMacro AllowLookupTable  ,
int 
 

vtkGdcmReader::vtkGetObjectMacro LookupTable  ,
vtkLookupTable 
 

vtkGdcmReader::vtkSetMacro AllowLookupTable  ,
int 
 

vtkGdcmReader::vtkTypeRevisionMacro vtkGdcmReader  ,
vtkImageReader 
 


Member Data Documentation

int vtkGdcmReader::AllowLookupTable [private]
 

Definition at line 75 of file vtkGdcmReader.h.

Referenced by CheckFileCoherence(), LoadImageInMemory(), and vtkGdcmReader().

std::list<std::string> vtkGdcmReader::FileNameList [private]
 

Definition at line 92 of file vtkGdcmReader.h.

Referenced by AddFileName(), BuildFileListFromPattern(), PrintSelf(), RemoveAllFileName(), and SetFileName().

vtkTimeStamp vtkGdcmReader::fileTime [private]
 

Definition at line 74 of file vtkGdcmReader.h.

Referenced by ExecuteInformation().

std::string vtkGdcmReader::ImageType [private]
 

Definition at line 87 of file vtkGdcmReader.h.

Referenced by CheckFileCoherence(), and ExecuteInformation().

std::list<std::string> vtkGdcmReader::InternalFileNameList [private]
 

Definition at line 100 of file vtkGdcmReader.h.

Referenced by AddInternalFileName(), BuildFileListFromPattern(), CheckFileCoherence(), ExecuteData(), RemoveAllInternalFileName(), and ~vtkGdcmReader().

vtkLookupTable* vtkGdcmReader::LookupTable [private]
 

Definition at line 73 of file vtkGdcmReader.h.

Referenced by LoadImageInMemory(), vtkGdcmReader(), and ~vtkGdcmReader().

int vtkGdcmReader::NumColumns [private]
 

Definition at line 79 of file vtkGdcmReader.h.

Referenced by CheckFileCoherence(), ExecuteData(), and ExecuteInformation().

int vtkGdcmReader::NumComponents [private]
 

Definition at line 85 of file vtkGdcmReader.h.

Referenced by CheckFileCoherence(), and LoadImageInMemory().

int vtkGdcmReader::NumLines [private]
 

Definition at line 81 of file vtkGdcmReader.h.

Referenced by CheckFileCoherence(), ExecuteData(), and ExecuteInformation().

size_t vtkGdcmReader::PixelSize [private]
 

Definition at line 89 of file vtkGdcmReader.h.

int vtkGdcmReader::TotalNumberOfPlanes [private]
 

Definition at line 83 of file vtkGdcmReader.h.

Referenced by ExecuteInformation().


The documentation for this class was generated from the following files:
Generated on Thu Feb 10 22:18:04 2005 for gdcm by doxygen 1.3.6