X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=bbtk_creaVtk_PKG%2Fsrc%2FbbcreaVtkReadMHDPlane.cxx;h=3581966d4a7db99c5ac697035c1289a3e408dd59;hb=8eabea73801eaefdfd58f678bc22c64b385a42f5;hp=800b0be4e3a34b77e9f7ba6056a3d7bcb9a4b263;hpb=f5e3c1a0829440b3ab3f47d870ff770f3e108158;p=creaVtk.git diff --git a/bbtk_creaVtk_PKG/src/bbcreaVtkReadMHDPlane.cxx b/bbtk_creaVtk_PKG/src/bbcreaVtkReadMHDPlane.cxx index 800b0be..3581966 100644 --- a/bbtk_creaVtk_PKG/src/bbcreaVtkReadMHDPlane.cxx +++ b/bbtk_creaVtk_PKG/src/bbcreaVtkReadMHDPlane.cxx @@ -13,8 +13,9 @@ #include #if defined(_WIN32) + #include #else -#include + #include #endif // defined(_WIN32) #include @@ -35,140 +36,169 @@ BBTK_BLACK_BOX_IMPLEMENTATION(ReadMHDPlane,bbtk::AtomicBlackBox); vtkImageData* ReadMHDPlane::CreateDefaultImage() { + vtkImageData *newImage = NULL; +/* + newImage = vtkImageData::New(); int i; int sizeX, sizeY, sizeZ; - sizeX = 200; + sizeX = 1; sizeY = sizeX; sizeZ = 1; vtkImageData *newImage = vtkImageData::New(); newImage->Initialize(); - newImage->SetScalarTypeToUnsignedChar(); newImage->SetSpacing( 1,1,1 ); newImage->SetDimensions( sizeX,sizeY,sizeZ ); + newImage->SetExtent(0, sizeX-1,0,sizeY-1,0,sizeZ-1 ); +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 newImage->SetWholeExtent(0, sizeX-1,0,sizeY-1,0,sizeZ-1 ); - newImage->SetExtent(0, sizeX-1,0,sizeY-1,0,sizeZ-1 ); + newImage->SetScalarTypeToUnsignedChar(); newImage->SetNumberOfScalarComponents(1); newImage->AllocateScalars(); newImage->Update(); - memset ( (void*)newImage->GetScalarPointer(), 0, sizeX*sizeY*1 ); - for (i=0; iSetScalarComponentFromDouble(i,i,0, 0, 255 ); - newImage->SetScalarComponentFromDouble(i,sizeY-1-i,0, 0, 255 ); - } // for i +#else +// newImage->AllocateScalars(VTK_UNSIGNED_CHAR,1); + newImage->AllocateScalars(VTK_SHORT,1); +#endif +// memset ( (void*)newImage->GetScalarPointer(), 0, sizeX*sizeY*sizeZ*sizeof(unsigned char) ); + memset ( (void*)newImage->GetScalarPointer(), 0, sizeX*sizeY*sizeof(short) ); +// for (i=0; iSetScalarComponentFromDouble(i,i ,0, 0, 255 ); +// newImage->SetScalarComponentFromDouble(i,sizeY-1-i ,0, 0, 255 ); +// } // for i + newImage->Modified(); +*/ return newImage; } vtkImageData* ReadMHDPlane::ChangeOrientation(vtkImageData* imgOrg) { - int width = bbGetInputWidth(); - int ext[6]; - int sizeXOrg, sizeYOrg,sizeZOrg; - int sizeXDst, sizeYDst,sizeZDst; - imgOrg->GetWholeExtent(ext); - int sizeLine; - - sizeXOrg = ext[1]-ext[0]+1; - sizeYOrg = ext[3]-ext[2]+1; - sizeZOrg = ext[5]-ext[4]+1; - - if (bbGetInputDirectionPlane()=="XY") - { - sizeXDst = ext[1]-ext[0]+1; - sizeYDst = ext[3]-ext[2]+1; - sizeZDst = width; - } // XY - if (bbGetInputDirectionPlane()=="YZ") - { - sizeXDst = width; - sizeYDst = ext[1]-ext[0]+1; - sizeZDst = ext[3]-ext[2]+1; - sizeLine = sizeYDst; - } // YZ - if (bbGetInputDirectionPlane()=="ZX") - { - sizeXDst = ext[1]-ext[0]+1; - sizeYDst = width; - sizeZDst = ext[3]-ext[2]+1; - sizeLine = sizeXDst; - } // ZX - vtkImageData *imgDst = vtkImageData::New(); - imgDst->Initialize(); - imgDst->SetScalarType( imgOrg->GetScalarType() ); - imgDst->SetSpacing( imgOrg->GetSpacing() ); - imgDst->SetDimensions( sizeXDst,sizeYDst,sizeZDst ); - imgDst->SetWholeExtent(0,sizeXDst-1,0,sizeYDst-1,0,sizeZDst-1 ); - imgDst->SetExtent(0,sizeXDst-1,0,sizeYDst-1,0,sizeZDst-1 ); - imgDst->SetNumberOfScalarComponents(1); - imgDst->AllocateScalars(); - imgDst->Update(); - - char *ptrDst,*ptrOrg; - int sizeBytes = imgOrg->GetScalarSize(); - int sizeLineBytes = sizeLine*imgOrg->GetScalarSize(); - int xx,yy,zz; - - long int sizeXDstBytes = sizeXDst*sizeBytes; - long int sizeXYDstBytes = sizeXDst*sizeYDst*sizeBytes; - long int sizeXYDstBytes2 = sizeXDst*sizeYDst*sizeBytes*2; - long int sizeXYZDstBytes = sizeXDst*sizeYDst*sizeZDst*sizeBytes; - long int sizeXYZDstBytes1 = sizeXDst*sizeYDst*(sizeZDst-1)*sizeBytes; - - ptrOrg = (char*)( imgOrg->GetScalarPointer() ); - - if (bbGetInputDirectionPlane()=="XY") - { - memcpy ( imgDst->GetScalarPointer(), ptrOrg , sizeXDst*sizeYDst*sizeZDst*(imgOrg->GetScalarSize()) ); - } // if XY + vtkImageData *imgDst = NULL; - if (bbGetInputDirectionPlane()=="ZX") + if (imgOrg!=NULL) { - ptrDst = (char*)( imgDst->GetScalarPointer(0,0,sizeYOrg-00-1) ); - for( zz=0 ; zzGetWholeExtent(ext); + #else + imgOrg->GetExtent(ext); + #endif + int sizeLine; + + sizeXOrg = ext[1]-ext[0]+1; + sizeYOrg = ext[3]-ext[2]+1; + sizeZOrg = ext[5]-ext[4]+1; + width=sizeZOrg; + + if (bbGetInputDirectionPlane()=="XY") + { + sizeXDst = ext[1]-ext[0]+1; + sizeYDst = ext[3]-ext[2]+1; + sizeZDst = width; + } // XY + if (bbGetInputDirectionPlane()=="YZ") { -// ptrDst=(char*)( imgDst->GetScalarPointer(0,zz,sizeYOrg-00-1) ); - for( yy=0 ; yyInitialize(); + imgDst->SetSpacing( imgOrg->GetSpacing() ); + imgDst->SetDimensions( sizeXDst,sizeYDst,sizeZDst ); + imgDst->SetExtent(0,sizeXDst-1,0,sizeYDst-1,0,sizeZDst-1 ); + + //EED 2017-01-01 Migration VTK7 + #if VTK_MAJOR_VERSION <= 5 + imgDst->SetWholeExtent(0,sizeXDst-1,0,sizeYDst-1,0,sizeZDst-1 ); + imgDst->SetScalarType( imgOrg->GetScalarType() ); + imgDst->SetNumberOfScalarComponents(1); + imgDst->AllocateScalars(); + imgDst->Update(); + #else + imgDst->AllocateScalars(imgOrg->GetScalarType(),1); + #endif + + char *ptrDst,*ptrOrg; + int sizeBytes = imgOrg->GetScalarSize(); + int sizeLineBytes = sizeLine*imgOrg->GetScalarSize(); + int xx,yy,zz; + + long int sizeXDstBytes = sizeXDst*sizeBytes; + long int sizeXYDstBytes = sizeXDst*sizeYDst*sizeBytes; + long int sizeXYDstBytes2 = sizeXDst*sizeYDst*sizeBytes*2; + long int sizeXYZDstBytes = sizeXDst*sizeYDst*sizeZDst*sizeBytes; + long int sizeXYZDstBytes1 = sizeXDst*sizeYDst*(sizeZDst-1)*sizeBytes; + + ptrOrg = (char*)( imgOrg->GetScalarPointer() ); + + if (bbGetInputDirectionPlane()=="XY") + { + memcpy ( imgDst->GetScalarPointer(), ptrOrg , sizeXDst*sizeYDst*sizeZDst*(imgOrg->GetScalarSize()) ); + } // if XY + + if (bbGetInputDirectionPlane()=="ZX") + { + ptrDst = (char*)( imgDst->GetScalarPointer(0,0,sizeYOrg-00-1) ); + for( zz=0 ; zzGetScalarPointer(0,yy,zz) ); -// ptrDst=(char*)( imgDst->GetScalarPointer(0,zz,sizeYOrg-yy-1) ); - memcpy ( ptrDst, ptrOrg , sizeLineBytes ); - ptrOrg = ptrOrg + sizeLineBytes; - ptrDst = ptrDst - sizeXYDstBytes; - } // for yy - ptrDst = ptrDst + sizeXDstBytes; - ptrDst = ptrDst + sizeXYZDstBytes; - } // for zz - } // ZX - - if (bbGetInputDirectionPlane()=="YZ") - { - ptrDst = (char*)( imgDst->GetScalarPointer(0,0,sizeYOrg-0-1) ); - for( zz=0 ; zzGetScalarPointer(0,zz,sizeYOrg-00-1) ); + for( yy=0 ; yyGetScalarPointer(0,yy,zz) ); + // ptrDst=(char*)( imgDst->GetScalarPointer(0,zz,sizeYOrg-yy-1) ); + memcpy ( ptrDst, ptrOrg , sizeLineBytes ); + ptrOrg = ptrOrg + sizeLineBytes; + ptrDst = ptrDst - sizeXYDstBytes; + } // for yy + ptrDst = ptrDst + sizeXDstBytes; + ptrDst = ptrDst + sizeXYZDstBytes; + } // for zz + } // ZX + + if (bbGetInputDirectionPlane()=="YZ") { - ptrDst=(char*)( imgDst->GetScalarPointer(zz,0,sizeYOrg-0-1) ); - for( yy=0 ; yyGetScalarPointer(0,0,sizeYOrg-0-1) ); + for( zz=0 ; zzGetScalarPointer(zz,0,sizeYOrg-yy-1) ); - for( xx=0 ; xxGetScalarPointer(zz,0,sizeYOrg-0-1) ); + for( yy=0 ; yyGetScalarPointer(xx,yy,zz) ); -// ptrDst=(char*)( imgDst->GetScalarPointer(zz,xx,sizeYOrg-yy-1) ); - memcpy ( ptrDst, ptrOrg , sizeBytes ); - ptrOrg+= sizeBytes; - ptrDst+= sizeXDstBytes; - } /// for xx - ptrDst = ptrDst - sizeXYDstBytes2; - } // for yy - ptrDst = ptrDst + sizeXYZDstBytes; -// ptrDst++; - } // for zz - } // ZX - + // ptrDst=(char*)( imgDst->GetScalarPointer(zz,0,sizeYOrg-yy-1) ); + for( xx=0 ; xxGetScalarPointer(xx,yy,zz) ); + // ptrDst=(char*)( imgDst->GetScalarPointer(zz,xx,sizeYOrg-yy-1) ); + memcpy ( ptrDst, ptrOrg , sizeBytes ); + ptrOrg+= sizeBytes; + ptrDst+= sizeXDstBytes; + } /// for xx + ptrDst = ptrDst - sizeXYDstBytes2; + } // for yy + ptrDst = ptrDst + sizeXYZDstBytes; + // ptrDst++; + } // for zz + } // ZX + } // if imgOrg return imgDst; } void ReadMHDPlane::Read64lseek(std::string fileNameIn, std::string plane) { + int imageType; int slice; int width; width = bbGetInputWidth(); @@ -195,32 +225,32 @@ void ReadMHDPlane::Read64lseek(std::string fileNameIn, std::string plane) { strcpy(mystring,"\n"); fgets(mystring,250,ffIn); - if (strncmp("NDims",mystring,5)==0) { sscanf(mystring,"%s %s %d" ,strTmp, strTmp, &dim); } - if (strncmp("DimSize",mystring,6)==0) { sscanf(mystring,"%s %s %d %d %d" ,strTmp, strTmp, &dimX, &dimY,&dimZ); } - if (strncmp("ElementType",mystring,11)==0) { sscanf(mystring,"%s %s %s" ,strTmp, strTmp, strTmp2); formattype=strTmp2; } - if (strncmp("ElementSpacing",mystring,14)==0) { sscanf(mystring,"%s %s %f %f %f" ,strTmp, strTmp, &spcX,&spcY,&spcZ); } - if (strncmp("ElementSize",mystring,11)==0) { sscanf(mystring,"%s %s %f %f %f" ,strTmp, strTmp, &spcX,&spcY,&spcZ); } - if (strncmp("Offset",mystring,6)==0) { sscanf(mystring,"%s %s %f %f %f" ,strTmp, strTmp, &ox, &oy, &oz); } - if (strncmp("HeaderSize",mystring,10)==0) { sscanf(mystring,"%s %s %ld" ,strTmp, strTmp, &headersize); } - if (strncmp("ElementDataFile",mystring,15)==0) { sscanf(mystring,"%s %s %s" ,strTmp, strTmp, strTmp2); elementdatafile=strTmp2; } - if (strncmp("ElementType = MET_CHAR",mystring,22)==0) { newImage->SetScalarTypeToChar(); dataSize=sizeof(char); } - if (strncmp("ElementType = VTK_CHAR",mystring,22)==0) { newImage->SetScalarTypeToChar(); dataSize=sizeof(char); } - if (strncmp("ElementType = MET_UCHAR",mystring,23)==0) { newImage->SetScalarTypeToUnsignedChar(); dataSize=sizeof(unsigned char); } - if (strncmp("ElementType = VTK_UNSIGNED_CHAR",mystring,31)==0) { newImage->SetScalarTypeToUnsignedChar(); dataSize=sizeof(unsigned char); } - if (strncmp("ElementType = MET_USHORT",mystring,24)==0) { newImage->SetScalarTypeToUnsignedShort(); dataSize=sizeof(unsigned short);} - if (strncmp("ElementType = VTK_UNSIGNED_SHORT",mystring,32)==0) { newImage->SetScalarTypeToUnsignedShort(); dataSize=sizeof(unsigned short);} - if (strncmp("ElementType = MET_SHORT",mystring,23)==0) { newImage->SetScalarTypeToShort(); dataSize=sizeof(short); } - if (strncmp("ElementType = VTK_SHORT",mystring,23)==0) { newImage->SetScalarTypeToShort(); dataSize=sizeof(short); } - if (strncmp("ElementType = MET_UINT",mystring,22)==0) { newImage->SetScalarTypeToUnsignedInt(); dataSize=sizeof(unsigned int); } - if (strncmp("ElementType = VTK_UNSIGNED_INT",mystring,30)==0) { newImage->SetScalarTypeToUnsignedInt(); dataSize=sizeof(unsigned int); } - if (strncmp("ElementType = MET_INT",mystring,21)==0) { newImage->SetScalarTypeToInt(); dataSize=sizeof(int); } - if (strncmp("ElementType = VTK_INT",mystring,21)==0) { newImage->SetScalarTypeToInt(); dataSize=sizeof(int); } - if (strncmp("ElementType = MET_FLOAT",mystring,23)==0) { newImage->SetScalarTypeToFloat(); dataSize=sizeof(float); } - if (strncmp("ElementType = VTK_FLOAT",mystring,23)==0) { newImage->SetScalarTypeToFloat(); dataSize=sizeof(float); } - if (strncmp("ElementType = MET_LONG",mystring,22)==0) { newImage->SetScalarTypeToLong(); dataSize=sizeof(long); } - if (strncmp("ElementType = VTK_LONG",mystring,22)==0) { newImage->SetScalarTypeToLong(); dataSize=sizeof(long); } - if (strncmp("ElementType = MET_DOUBLE",mystring,24)==0) { newImage->SetScalarTypeToDouble(); dataSize=sizeof(double); } - if (strncmp("ElementType = VTK_DOUBLE",mystring,24)==0) { newImage->SetScalarTypeToDouble(); dataSize=sizeof(double); } + if (strncmp("NDims",mystring,5)==0) { sscanf(mystring,"%s %s %d" ,strTmp, strTmp, &dim); } + if (strncmp("DimSize",mystring,6)==0) { sscanf(mystring,"%s %s %d %d %d" ,strTmp, strTmp, &dimX, &dimY,&dimZ); } + if (strncmp("ElementType",mystring,11)==0) { sscanf(mystring,"%s %s %s" ,strTmp, strTmp, strTmp2); formattype=strTmp2; } + if (strncmp("ElementSpacing",mystring,14)==0) { sscanf(mystring,"%s %s %f %f %f" ,strTmp, strTmp, &spcX,&spcY,&spcZ); } + if (strncmp("ElementSize",mystring,11)==0) { sscanf(mystring,"%s %s %f %f %f" ,strTmp, strTmp, &spcX,&spcY,&spcZ); } + if (strncmp("Offset",mystring,6)==0) { sscanf(mystring,"%s %s %f %f %f" ,strTmp, strTmp, &ox, &oy, &oz); } + if (strncmp("HeaderSize",mystring,10)==0) { sscanf(mystring,"%s %s %ld" ,strTmp, strTmp, &headersize); } + if (strncmp("ElementDataFile",mystring,15)==0) { sscanf(mystring,"%s %s %s" ,strTmp, strTmp, strTmp2); elementdatafile=strTmp2; } + if (strncmp("ElementType = MET_CHAR",mystring,22)==0) { imageType=VTK_CHAR; dataSize=sizeof(char); } + if (strncmp("ElementType = VTK_CHAR",mystring,22)==0) { imageType=VTK_CHAR; dataSize=sizeof(char); } + if (strncmp("ElementType = MET_UCHAR",mystring,23)==0) { imageType=VTK_UNSIGNED_CHAR; dataSize=sizeof(unsigned char); } + if (strncmp("ElementType = VTK_UNSIGNED_CHAR",mystring,31)==0) { imageType=VTK_UNSIGNED_CHAR; dataSize=sizeof(unsigned char); } + if (strncmp("ElementType = MET_USHORT",mystring,24)==0) { imageType=VTK_UNSIGNED_SHORT; dataSize=sizeof(unsigned short);} + if (strncmp("ElementType = VTK_UNSIGNED_SHORT",mystring,32)==0) { imageType=VTK_UNSIGNED_SHORT; dataSize=sizeof(unsigned short);} + if (strncmp("ElementType = MET_SHORT",mystring,23)==0) { imageType=VTK_SHORT; dataSize=sizeof(short); } + if (strncmp("ElementType = VTK_SHORT",mystring,23)==0) { imageType=VTK_SHORT; dataSize=sizeof(short); } + if (strncmp("ElementType = MET_UINT",mystring,22)==0) { imageType=VTK_UNSIGNED_INT; dataSize=sizeof(unsigned int); } + if (strncmp("ElementType = VTK_UNSIGNED_INT",mystring,30)==0) { imageType=VTK_UNSIGNED_INT; dataSize=sizeof(unsigned int); } + if (strncmp("ElementType = MET_INT",mystring,21)==0) { imageType=VTK_INT; dataSize=sizeof(int); } + if (strncmp("ElementType = VTK_INT",mystring,21)==0) { imageType=VTK_INT; dataSize=sizeof(int); } + if (strncmp("ElementType = MET_FLOAT",mystring,23)==0) { imageType=VTK_FLOAT; dataSize=sizeof(float); } + if (strncmp("ElementType = VTK_FLOAT",mystring,23)==0) { imageType=VTK_FLOAT; dataSize=sizeof(float); } + if (strncmp("ElementType = MET_LONG",mystring,22)==0) { imageType=VTK_LONG; dataSize=sizeof(long); } + if (strncmp("ElementType = VTK_LONG",mystring,22)==0) { imageType=VTK_LONG; dataSize=sizeof(long); } + if (strncmp("ElementType = MET_DOUBLE",mystring,24)==0) { imageType=VTK_DOUBLE; dataSize=sizeof(double); } + if (strncmp("ElementType = VTK_DOUBLE",mystring,24)==0) { imageType=VTK_DOUBLE; dataSize=sizeof(double); } } // while fclose(ffIn); newImage->Initialize(); @@ -248,11 +278,21 @@ void ReadMHDPlane::Read64lseek(std::string fileNameIn, std::string plane) { newImage->SetSpacing( spcX,spcY,spcZ ); newImage->SetDimensions( dimX,dimY,width ); - newImage->SetWholeExtent(0, dimX-1,0,dimY-1,0,width-1 ); newImage->SetExtent(0, dimX-1,0,dimY-1,0,width-1 ); + + + +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 + newImage->SetScalarType( imageType ); + newImage->SetWholeExtent(0, dimX-1,0,dimY-1,0,width-1 ); newImage->SetNumberOfScalarComponents(1); newImage->AllocateScalars(); newImage->Update(); +#else + newImage->AllocateScalars(imageType,1); +#endif + pos = dimX*dimY*(long long)slice*dataSize; #if defined(_WIN32) if (_lseeki64( fd, pos, SEEK_SET ) < 0) @@ -274,11 +314,20 @@ void ReadMHDPlane::Read64lseek(std::string fileNameIn, std::string plane) { newImage->SetSpacing( spcX,spcZ,spcY ); newImage->SetDimensions( dimX,dimZ,width ); - newImage->SetWholeExtent(0, dimX-1,0,dimZ-1,0,width-1 ); newImage->SetExtent(0, dimX-1,0,dimZ-1,0,width-1 ); + + +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 + newImage->SetScalarType( imageType ); + newImage->SetWholeExtent(0, dimX-1,0,dimZ-1,0,width-1 ); newImage->SetNumberOfScalarComponents(1); newImage->AllocateScalars(); newImage->Update(); +#else + newImage->AllocateScalars(imageType,1); +#endif + int iWidth; for (iWidth=0;iWidthSetSpacing( spcY,spcZ,spcX ); newImage->SetDimensions( dimY,dimZ,width ); - newImage->SetWholeExtent(0, dimY-1,0,dimZ-1,0,width-1 ); newImage->SetExtent(0, dimY-1,0,dimZ-1,0,width-1 ); + +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 + newImage->SetScalarType( imageType ); + newImage->SetWholeExtent(0, dimY-1,0,dimZ-1,0,width-1 ); newImage->SetNumberOfScalarComponents(1); newImage->AllocateScalars(); newImage->Update(); +#else + newImage->AllocateScalars(imageType,1); +#endif + int iWidth; for (iWidth=0;iWidth