//===== // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) //===== #include "bbvtkMetaImageWriter.h" #include "bbvtkPackage.h" #include #include #include "vtkJSONImageWriter.h" #include "vtkXMLImageDataWriter.h" #include "vtkXMLDataSetWriter.h" #include "vtkDataSetWriter.h" #include "vtkPDataSetWriter.h" #include "vtkXMLWriter.h" namespace bbvtk { BBTK_ADD_BLACK_BOX_TO_PACKAGE(vtk,MetaImageWriter) BBTK_BLACK_BOX_IMPLEMENTATION(MetaImageWriter,bbtk::AtomicBlackBox); void MetaImageWriter::Save_mhdb( std::string filename , vtkImageData* img ,int sizeB) { int i,j,k; int ext[6]; int dim[3]; int elementType=img->GetScalarType(); img->GetExtent(ext); dim[0]=ext[1]-ext[0]+1; dim[1]=ext[3]-ext[2]+1; dim[2]=ext[5]-ext[4]+1; int bsx=ceil((double)dim[0]/(double)sizeB); int bsy=ceil((double)dim[1]/(double)sizeB); int bsz=ceil((double)dim[2]/(double)sizeB); int voi[6]; std::string filenameBlock; std::string filenameBlockVti; if (filename.substr(filename.size()-5) == ".mhdb") { std::string cmd; // cmd="rm -rf "+filename; system( cmd.c_str() ); cmd="mkdir "+filename; system( cmd.c_str() ); } std::string fileinfoname=filename+"/info.dat"; FILE *ff=fopen(fileinfoname.c_str(),"w"); fprintf(ff,"SizeBlock = %d\n",sizeB); fprintf(ff,"DimSize = %d %d %d\n" , dim[0],dim[1],dim[2] ); fprintf(ff,"ElementType = %d\n", elementType ); fclose(ff); for (i=0;i=dim[0]) { voi[1]=dim[0]-1; } if (voi[3]>=dim[1]) { voi[3]=dim[1]-1; } if (voi[5]>=dim[2]) { voi[5]=dim[2]-1; } vtkExtractVOI *extract = vtkExtractVOI::New(); extract->SetInputData( img ); extract->SetVOI(voi); extract->UpdateWholeExtent(); extract->Modified(); extract->Update(); filenameBlock =filename+"/mhdb-"+ std::to_string(i)+"-"+ std::to_string(j)+"-"+ std::to_string(k)+".mha"; vtkMetaImageWriter* w = vtkMetaImageWriter::New(); w->SetInputData( extract->GetOutput() ); w->SetCompression(true); w->SetFileDimensionality(bbGetInputIn()->GetDataDimension()); // NTU w->SetFileName( filenameBlock.c_str() ); w->Write(); w->Delete(); /* Borrame filenameBlockVti=filenameBlock+"-ZLib.vti"; vtkXMLImageDataWriter *writer = vtkXMLImageDataWriter::New(); writer->SetDataModeToBinary(); // writer->SetCompressionLevel(5); writer->SetCompressorTypeToZLib(); writer->SetFileName( filenameBlockVti.c_str() ); writer->SetInputData( bbGetInputIn() ); writer->Write(); */ extract->Delete(); } // for k } // for j } // for i } //===== // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) //===== void MetaImageWriter::Process() { printf("EED vtkMetaImageWriter::Process START\n"); // THE MAIN PROCESSING METHOD BODY // Here we simply set the input 'In' value to the output 'Out' // And print out the output value // INPUT/OUTPUT ACCESSORS ARE OF THE FORM : // void bbSet{Input|Output}NAME(const TYPE&) // const TYPE& bbGet{Input|Output}NAME() const // Where : // * NAME is the name of the input/output // (the one provided in the attribute 'name' of the tag 'input') // * TYPE is the C++ type of the input/output // (the one provided in the attribute 'type' of the tag 'input') //EED 2017-01-01 Migration VTK7 #if VTK_MAJOR_VERSION <= 5 bbGetInputIn()->Update(); #else // ... #endif std::string userGivenName = bbGetInputFilename(); if (bbGetInputIn()!=NULL) { if (userGivenName.substr(userGivenName.size()-5) == ".mhdb") { Save_mhdb( userGivenName , bbGetInputIn() , bbGetInputSizeBlock() ); } else { if (!((userGivenName.substr(userGivenName.size()-4) == ".mhd") || (userGivenName.substr(userGivenName.size()-4) == ".mha"))) //JPR { userGivenName += ".mhd"; } vtkMetaImageWriter* w = vtkMetaImageWriter::New(); //EED 2017-01-01 Migration VTK7 #if VTK_MAJOR_VERSION <= 5 w->SetInput(bbGetInputIn()); #else w->SetInputData(bbGetInputIn()); #endif w->SetCompression(bbGetInputCompression()); w->SetFileDimensionality(bbGetInputIn()->GetDataDimension()); // NTU w->SetFileName(userGivenName.c_str()); //w->SetFileName(bbGetInputFilename().c_str()); // JPR w->Write(); w->Delete(); } // .mhdb } // bbGetInputIn()!=NULL printf("EED vtkMetaImageWriter::Process END\n"); } //===== // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) //===== void MetaImageWriter::bbUserSetDefaultValues() { // SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX // Here we initialize the input 'In' to 0 bbSetInputCompression(false); bbSetInputSizeBlock(20); } //===== // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) //===== void MetaImageWriter::bbUserInitializeProcessing() { // THE INITIALIZATION METHOD BODY : // Here does nothing // but this is where you should allocate the internal/output pointers // if any } //===== // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) //===== void MetaImageWriter::bbUserFinalizeProcessing() { // THE FINALIZATION METHOD BODY : // Here does nothing // but this is where you should desallocate the internal/output pointers // if any } } // EO namespace bbvtk