Beispiel #1
0
static int recurseDataSet ( gdcm::DataSet &ds, gdcm::File &F ) {
    if ( ds.IsEmpty() ) {return 0;}

    static const gdcm::Tag *start = BasicApplicationLevelConfidentialityProfileAttributes;
    static const gdcm::Tag *ptr,*end = start + nIDs;
    const gdcm::IOD& iod = defs.GetIODFromFile( F );

    for(ptr = start; ptr != end; ++ptr) {
	const gdcm::Tag &tag = *ptr;
	if ( ds.FindDataElement( tag ) ) {
	    basicProtection( tag, iod.GetTypeFromTag(defs, tag), ds );
	}
    }

    gdcm::DataSet::ConstIterator it = ds.Begin();
    for (; it != ds.End() ;) {
	gdcm::DataElement de = *it++;
	gdcm::VR vr = gdcm::DataSetHelper::ComputeVR( F, ds, de.GetTag() );
	gdcm::SmartPointer<gdcm::SequenceOfItems> sqi = 0;

	if ( vr == gdcm::VR::SQ && (sqi = de.GetValueAsSQ()) ) {
	    de.SetValue( *sqi );
	    de.SetVLToUndefined();
	    gdcm::SequenceOfItems::SizeType i;
	    for (i = 1; i <= sqi->GetNumberOfItems(); i++ ) {
		gdcm::Item &item = sqi->GetItem( i );
		gdcm::DataSet &nested = item.GetNestedDataSet();
		recurseDataSet( nested, F );
	    }
	}

	ds.Replace( de ); // REPLACE
    }
    return 1;
}