// Since we maintain a list of filenames, when building a volume,
// (see vtkGdcmReader::AddFileName), we additionaly need to purge
// this list when we manually positionate the filename.
+ vtkDebugMacro("Clearing all files given with AddFileName");
this->FileNameList.clear();
this->Modified();
}
*/
void vtkGdcmReader::BuildFileListFromPattern()
{
+ this->RemoveAllInternalFileName();
+
if ((! this->FileNameList.empty()) && this->FileName )
{
- vtkErrorMacro("Both file patterns and AddFileName schemes were used");
- vtkErrorMacro("Only the files specified with AddFileName shall be used");
+ vtkErrorMacro("Both AddFileName and SetFileName schemes were used");
+ vtkErrorMacro("No images loaded ! ");
+ return;
+ }
+
+ if ((! this->FileNameList.empty()) && this->FilePrefix )
+ {
+ vtkErrorMacro("Both AddFileName and SetFilePrefix schemes were used");
+ vtkErrorMacro("No images loaded ! ");
+ return;
+ }
+
+ if (this->FileName && this->FilePrefix)
+ {
+ vtkErrorMacro("Both SetFileName and SetFilePrefix schemes were used");
+ vtkErrorMacro("No images loaded ! ");
return;
}
return;
}
- if (!this->FileName && !this->FilePattern)
+ if (!this->FileName && !this->FilePrefix)
{
vtkErrorMacro("FileNames are not set. Either use AddFileName() or");
- vtkErrorMacro("specify a FileName or FilePattern.");
+ vtkErrorMacro("specify a FileName or FilePrefix.");
return;
}
- this->RemoveAllInternalFileName();
- if( this->FileNameList.empty() )
+ if( this->FileName )
{
- //Multiframe case:
+ // Single file loading (as given with ::SetFileName()):
+ // Case of multi-frame file considered here
this->ComputeInternalFileName(this->DataExtent[4]);
vtkDebugMacro("Adding file " << this->InternalFileName);
this->AddInternalFileName(this->InternalFileName);
}
else
{
- //stack of 2D dicom case:
+ // Multi file loading (as given with ::SetFilePattern()):
for (int idx = this->DataExtent[4]; idx <= this->DataExtent[5]; ++idx)
{
this->ComputeInternalFileName(idx);
continue;
}
fclose(fp);
-
+
// Stage 1.2: check for Gdcm parsability
- gdcmHeaderHelper GdcmHeader(FileName->c_str());
+ gdcmHeaderHelper GdcmHeader(FileName->c_str(), false, true);
+ // true : for enableSequences
if (!GdcmHeader.IsReadable())
{
vtkErrorMacro("Gdcm cannot parse file " << FileName->c_str());
const unsigned long UpdateProgressTarget,
unsigned long & UpdateProgressCount)
{
- vtkDebugMacro("Copying to memory image" << FileName.c_str());
- gdcmFile GdcmFile(FileName.c_str());
+ vtkDebugMacro("Copying to memory image [" << FileName.c_str() << "]");
+ gdcmFile GdcmFile(FileName.c_str(),false,true);
+ // true : to enable SeQuences
size_t size;
// If the data structure of vtk for image/volume representation
{
size = GdcmFile.GetImageDataSize();
Source = (unsigned char*)GdcmFile.GetImageData();
- }
+ }
+
unsigned char * pSource = Source; //pointer for later deletion
unsigned char * Destination = Dest + size - LineSize;
UpdateProgressCount++;
}
}
+
+// DO NOT remove this commented out code .
+// Nobody knows what's expecting you ...
+// Just to 'see' what was actually read on disk :-(
+
+// FILE * f2;
+// f2 = fopen("SpuriousFile.RAW","wb");
+// fwrite(Dest,size,1,f2);
+// fclose(f2);
+
//GetImageData allocate a (void*)malloc, remove it:
free(pSource);
return size;