Mercurial > hg > orthanc-stone
comparison OrthancStone/Sources/Toolbox/DicomStructureSet.cpp @ 1834:126522623e20
replaced OrthancStone::DicomPath by new class Orthanc::DicomPath from orthanc framework
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 10 Jun 2021 12:07:04 +0200 |
parents | 34ab7f643327 |
children | 80e029f8ec91 |
comparison
equal
deleted
inserted
replaced
1833:3c0996f028a1 | 1834:126522623e20 |
---|---|
168 } | 168 } |
169 } | 169 } |
170 | 170 |
171 | 171 |
172 static bool FastParseVector(Vector& target, | 172 static bool FastParseVector(Vector& target, |
173 const IDicomDataset& dataset, | 173 const IDicomDataset& dataset, |
174 const DicomPath& tag) | 174 const Orthanc::DicomPath& tag) |
175 { | 175 { |
176 std::string value; | 176 std::string value; |
177 return (dataset.GetStringValue(value, tag) && | 177 return (dataset.GetStringValue(value, tag) && |
178 GenericToolbox::FastParseVector(target, value)); | 178 GenericToolbox::FastParseVector(target, value)); |
179 } | 179 } |
479 #endif | 479 #endif |
480 | 480 |
481 DicomDatasetReader reader(tags); | 481 DicomDatasetReader reader(tags); |
482 | 482 |
483 size_t count, tmp; | 483 size_t count, tmp; |
484 if (!tags.GetSequenceSize(count, DicomPath(DICOM_TAG_RT_ROI_OBSERVATIONS_SEQUENCE)) || | 484 if (!tags.GetSequenceSize(count, Orthanc::DicomPath(DICOM_TAG_RT_ROI_OBSERVATIONS_SEQUENCE)) || |
485 !tags.GetSequenceSize(tmp, DicomPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE)) || | 485 !tags.GetSequenceSize(tmp, Orthanc::DicomPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE)) || |
486 tmp != count || | 486 tmp != count || |
487 !tags.GetSequenceSize(tmp, DicomPath(DICOM_TAG_STRUCTURE_SET_ROI_SEQUENCE)) || | 487 !tags.GetSequenceSize(tmp, Orthanc::DicomPath(DICOM_TAG_STRUCTURE_SET_ROI_SEQUENCE)) || |
488 tmp != count) | 488 tmp != count) |
489 { | 489 { |
490 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); | 490 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); |
491 } | 491 } |
492 | 492 |
493 structures_.resize(count); | 493 structures_.resize(count); |
494 for (size_t i = 0; i < count; i++) | 494 for (size_t i = 0; i < count; i++) |
495 { | 495 { |
496 structures_[i].interpretation_ = reader.GetStringValue | 496 structures_[i].interpretation_ = reader.GetStringValue |
497 (DicomPath(DICOM_TAG_RT_ROI_OBSERVATIONS_SEQUENCE, i, | 497 (Orthanc::DicomPath(DICOM_TAG_RT_ROI_OBSERVATIONS_SEQUENCE, i, |
498 DICOM_TAG_RT_ROI_INTERPRETED_TYPE), | 498 DICOM_TAG_RT_ROI_INTERPRETED_TYPE), |
499 "No interpretation"); | 499 "No interpretation"); |
500 | 500 |
501 structures_[i].name_ = reader.GetStringValue | 501 structures_[i].name_ = reader.GetStringValue |
502 (DicomPath(DICOM_TAG_STRUCTURE_SET_ROI_SEQUENCE, i, | 502 (Orthanc::DicomPath(DICOM_TAG_STRUCTURE_SET_ROI_SEQUENCE, i, |
503 DICOM_TAG_ROI_NAME), | 503 DICOM_TAG_ROI_NAME), |
504 "No name"); | 504 "No name"); |
505 | 505 |
506 Vector color; | 506 Vector color; |
507 if (FastParseVector(color, tags, DicomPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, | 507 if (FastParseVector(color, tags, Orthanc::DicomPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, |
508 DICOM_TAG_ROI_DISPLAY_COLOR)) && | 508 DICOM_TAG_ROI_DISPLAY_COLOR)) && |
509 color.size() == 3) | 509 color.size() == 3) |
510 { | 510 { |
511 structures_[i].red_ = ConvertColor(color[0]); | 511 structures_[i].red_ = ConvertColor(color[0]); |
512 structures_[i].green_ = ConvertColor(color[1]); | 512 structures_[i].green_ = ConvertColor(color[1]); |
513 structures_[i].blue_ = ConvertColor(color[2]); | 513 structures_[i].blue_ = ConvertColor(color[2]); |
518 structures_[i].green_ = 0; | 518 structures_[i].green_ = 0; |
519 structures_[i].blue_ = 0; | 519 structures_[i].blue_ = 0; |
520 } | 520 } |
521 | 521 |
522 size_t countSlices; | 522 size_t countSlices; |
523 if (!tags.GetSequenceSize(countSlices, DicomPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, | 523 if (!tags.GetSequenceSize(countSlices, Orthanc::DicomPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, |
524 DICOM_TAG_CONTOUR_SEQUENCE))) | 524 DICOM_TAG_CONTOUR_SEQUENCE))) |
525 { | 525 { |
526 countSlices = 0; | 526 countSlices = 0; |
527 } | 527 } |
528 | 528 |
529 LOG(INFO) << "New RT structure: \"" << structures_[i].name_ | 529 LOG(INFO) << "New RT structure: \"" << structures_[i].name_ |
531 << "\" containing " << countSlices << " slices (color: " | 531 << "\" containing " << countSlices << " slices (color: " |
532 << static_cast<int>(structures_[i].red_) << "," | 532 << static_cast<int>(structures_[i].red_) << "," |
533 << static_cast<int>(structures_[i].green_) << "," | 533 << static_cast<int>(structures_[i].green_) << "," |
534 << static_cast<int>(structures_[i].blue_) << ")"; | 534 << static_cast<int>(structures_[i].blue_) << ")"; |
535 | 535 |
536 // These temporary variables avoid allocating many vectors in the loop below | 536 /** |
537 DicomPath countPointsPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, | 537 * These temporary variables avoid allocating many vectors in |
538 DICOM_TAG_CONTOUR_SEQUENCE, 0, | 538 * the loop below (indeed, "Orthanc::DicomPath" handles a |
539 DICOM_TAG_NUMBER_OF_CONTOUR_POINTS); | 539 * "std::vector<PrefixItem>") |
540 | 540 **/ |
541 DicomPath geometricTypePath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, | 541 Orthanc::DicomPath countPointsPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, |
542 DICOM_TAG_CONTOUR_SEQUENCE, 0, | 542 DICOM_TAG_CONTOUR_SEQUENCE, 0, |
543 DICOM_TAG_CONTOUR_GEOMETRIC_TYPE); | 543 DICOM_TAG_NUMBER_OF_CONTOUR_POINTS); |
544 | |
545 Orthanc::DicomPath geometricTypePath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, | |
546 DICOM_TAG_CONTOUR_SEQUENCE, 0, | |
547 DICOM_TAG_CONTOUR_GEOMETRIC_TYPE); | |
544 | 548 |
545 DicomPath imageSequencePath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, | 549 Orthanc::DicomPath imageSequencePath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, |
546 DICOM_TAG_CONTOUR_SEQUENCE, 0, | 550 DICOM_TAG_CONTOUR_SEQUENCE, 0, |
547 DICOM_TAG_CONTOUR_IMAGE_SEQUENCE); | 551 DICOM_TAG_CONTOUR_IMAGE_SEQUENCE); |
548 | 552 |
549 // (3006,0039)[i] / (0x3006, 0x0040)[0] / (0x3006, 0x0016)[0] / (0x0008, 0x1155) | 553 // (3006,0039)[i] / (0x3006, 0x0040)[0] / (0x3006, 0x0016)[0] / (0x0008, 0x1155) |
550 DicomPath referencedInstancePath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, | 554 Orthanc::DicomPath referencedInstancePath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, |
551 DICOM_TAG_CONTOUR_SEQUENCE, 0, | 555 DICOM_TAG_CONTOUR_SEQUENCE, 0, |
552 DICOM_TAG_CONTOUR_IMAGE_SEQUENCE, 0, | 556 DICOM_TAG_CONTOUR_IMAGE_SEQUENCE, 0, |
553 DICOM_TAG_REFERENCED_SOP_INSTANCE_UID); | 557 DICOM_TAG_REFERENCED_SOP_INSTANCE_UID); |
554 | 558 |
555 DicomPath contourDataPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, | 559 Orthanc::DicomPath contourDataPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, |
556 DICOM_TAG_CONTOUR_SEQUENCE, 0, | 560 DICOM_TAG_CONTOUR_SEQUENCE, 0, |
557 DICOM_TAG_CONTOUR_DATA); | 561 DICOM_TAG_CONTOUR_DATA); |
558 | 562 |
559 for (size_t j = 0; j < countSlices; j++) | 563 for (size_t j = 0; j < countSlices; j++) |
560 { | 564 { |
561 unsigned int countPoints; | 565 unsigned int countPoints; |
562 | 566 |