X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tools%2FclitkImage2DicomDoseGenericFilter.txx;h=df105fadfd1a75e1838d057dbd39ee6b9fdb0edb;hb=378ee630dce37a3e15baf3a8027542c2f8cf43de;hp=c8ee9184ed81a3a54d2a6cdcb70d95e5ece6d786;hpb=7233f68be9b2be57540b948b99885bc46c224c51;p=clitk.git diff --git a/tools/clitkImage2DicomDoseGenericFilter.txx b/tools/clitkImage2DicomDoseGenericFilter.txx index c8ee918..df105fa 100644 --- a/tools/clitkImage2DicomDoseGenericFilter.txx +++ b/tools/clitkImage2DicomDoseGenericFilter.txx @@ -138,7 +138,7 @@ void Image2DicomDoseGenericFilter::UpdateWithDimAndPixelType() { -#if GDCM_MAJOR_VERSION == 2 +#if GDCM_MAJOR_VERSION >= 2 // ImageTypes typedef itk::Image InputImageType; typedef unsigned short int OutputPixelType; @@ -189,6 +189,13 @@ Image2DicomDoseGenericFilter::UpdateWithDimAndPixelType() itk::EncapsulateMetaData(*outputDict, "0020|0032", value.str()); DD(origin); + // orientation + typename InputImageType::DirectionType direction = image->GetDirection(); + value.str(""); + value<(*outputDict, "0020|0037", value.str()); + DD(direction); + // size typename InputImageType::SizeType imageSize = image->GetLargestPossibleRegion().GetSize(); //DD(imageSize); @@ -273,6 +280,36 @@ Image2DicomDoseGenericFilter::UpdateWithDimAndPixelType() std::cerr << excp << std::endl; } + //Read sequence dicom tag with gdcm + gdcm::Reader readerTemplateGDCM; + readerTemplateGDCM.SetFileName( fileNames[0].c_str() ); + readerTemplateGDCM.Read(); + gdcm::File &fileTemplate = readerTemplateGDCM.GetFile(); + gdcm::DataSet &dsTemplate = fileTemplate.GetDataSet(); + const unsigned int ptr_len = 42; + char *ptrTemplate = new char[ptr_len]; + memset(ptrTemplate,0,ptr_len); + + const gdcm::DataElement &referenceRTPlanSq = dsTemplate.GetDataElement(gdcm::Tag(0x300c, 0x02)); + + //Create the Dose Grid Scaling data element (ITK 4.13 do not take into account - it works well with ITK 4.5.1) + gdcm::DataElement deDoseGridScaling( gdcm::Tag(0x3004,0x0e) ); + deDoseGridScaling.SetVR( gdcm::VR::DS ); + deDoseGridScaling.SetByteValue(NumberToString(doseScaling).c_str(), (uint32_t)strlen(NumberToString(doseScaling).c_str())); + + //Copy/Write sequence dicom tag with gdcm + gdcm::Reader readerOutputGDCM; + readerOutputGDCM.SetFileName( fileNamesOutput[0].c_str() ); + readerOutputGDCM.Read(); + gdcm::File &file = readerOutputGDCM.GetFile(); + gdcm::DataSet &dsOutput = file.GetDataSet(); + + dsOutput.Insert(referenceRTPlanSq); + dsOutput.Replace(deDoseGridScaling); + gdcm::Writer w; + w.SetFile( file ); + w.SetFileName( fileNamesOutput[0].c_str() ); + w.Write(); //--------------------------------------------------------------------------------------- //WRITE DICOM BIS