comparison OrthancServer/FromDcmtkBridge.cpp @ 532:b22312081388 dicom-rt

extract roi geometry
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 30 Aug 2013 16:09:19 +0200
parents 7a966b440f19
children da8e064d0d49
comparison
equal deleted inserted replaced
529:bd2087bb6450 532:b22312081388
704 } 704 }
705 } 705 }
706 706
707 707
708 708
709 static bool GetTagValueInternal(std::string& value,
710 DcmItem& item,
711 const DicomTag& tag)
712 {
713 DcmTagKey k(tag.GetGroup(), tag.GetElement());
714 DcmElement* element = NULL;
715 if (!item.findAndGetElement(k, element).good() ||
716 element == NULL)
717 {
718 return false;
719 }
720
721 std::auto_ptr<DicomValue> v(FromDcmtkBridge::ConvertLeafElement(*element));
722
723 if (v.get() == NULL)
724 {
725 value = "";
726 }
727 else
728 {
729 value = v->AsString();
730 }
731
732 return true;
733 }
734
735
709 bool ParsedDicomFile::GetTagValue(std::string& value, 736 bool ParsedDicomFile::GetTagValue(std::string& value,
710 const DicomTag& tag) 737 const DicomTag& tag)
711 { 738 {
712 DcmTagKey k(tag.GetGroup(), tag.GetElement());
713 DcmDataset& dataset = *file_->getDataset(); 739 DcmDataset& dataset = *file_->getDataset();
714 DcmElement* element = NULL; 740 return GetTagValueInternal(value, dataset, tag);
715 if (!dataset.findAndGetElement(k, element).good() || 741 }
716 element == NULL) 742
717 { 743
718 return false; 744
719 } 745 bool ParsedDicomFile::GetTagValue(std::string& value,
720 746 const SequencePath& path,
721 std::auto_ptr<DicomValue> v(FromDcmtkBridge::ConvertLeafElement(*element)); 747 const DicomTag& tag)
722 748 {
723 if (v.get() == NULL) 749 if (path.size() == 0)
724 { 750 {
725 value = ""; 751 return GetTagValue(value, tag);
726 } 752 }
727 else 753
728 { 754 DcmItem* current = file_->getDataset();
729 value = v->AsString(); 755 assert(current != NULL);
730 } 756
731 757 for (SequencePath::const_iterator it = path.begin(); it != path.end(); it++)
732 return true; 758 {
759 DcmTagKey k(it->first.GetGroup(), it->first.GetElement());
760
761 DcmSequenceOfItems* sequence = NULL;
762 if (!current->findAndGetSequence(k, sequence).good() ||
763 sequence == NULL ||
764 sequence->getVR() != EVR_SQ)
765 {
766 return false;
767 }
768
769 if (it->second > sequence->card())
770 {
771 return false;
772 }
773
774 current = sequence->getItem(it->second);
775 assert(current != NULL);
776 }
777
778 return GetTagValueInternal(value, *current, tag);
733 } 779 }
734 780
735 781
736 782
737 DicomInstanceHasher ParsedDicomFile::GetHasher() 783 DicomInstanceHasher ParsedDicomFile::GetHasher()