關鍵函數:DcmObject *DcmItem::nextInContainer(const DcmObject *obj),它是DcmObject 中的虛函數,被DcmItem類實現,由於DcmDataSet類繼承於DcmItem,所以DcmDataSet對象使用此方法就能能夠遍曆0008 - 7FE0之間的TAG。
這個函數的原代碼為
DcmObject *DcmItem::nextInContainer(const DcmObject *obj){ if (!obj) return elementList->get(ELP_first); //elementList 為DcmList*,DcmItem中的 else { if (elementList->get() != obj) { for(DcmObject * search_obj = elementList->seek(ELP_first); search_obj && search_obj != obj; search_obj = elementList->seek(ELP_next) ) { /* do nothing, just keep iterating */ } } return elementList->seek(ELP_next); }}
分析代碼可知:
(1)當用nextInContainer(NULL)時,返回一個DcmObject 指標,使用這個指標的getTag()方法就能得到一個Tag1,這個Tag1是映像中組號為0008的第一個Tag。(此處定義一個nextInContainer(NULL)的返回對象:DcmObject * pObject_tg)
(2)當用nextInContainer(pObject_tg)時,也返回一個DcmObject 指標,同樣使用這個指標的getTag()方法就能得到一個Tag2,這個Tag2是映像中組號為0008的第二個Tag。也就是跟在Tag1後面的Tag.
這樣再設計一個很簡單的迴圈就能遍曆0008 - 7FE0之間的所有TAG了。