Mercurial > hg > orthanc
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() |