comparison Framework/Toolbox/DicomStructureSet.cpp @ 118:a4d0b6c82b29 wasm

using Orthanc::DicomMap instead of OrthancPlugins::DicomDatasetReader
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 02 Oct 2017 14:31:26 +0200
parents 2eca030792aa
children e66b2c757790
comparison
equal deleted inserted replaced
117:42c05a3baee3 118:a4d0b6c82b29
24 #include "../Toolbox/MessagingToolbox.h" 24 #include "../Toolbox/MessagingToolbox.h"
25 25
26 #include <Core/Logging.h> 26 #include <Core/Logging.h>
27 #include <Core/OrthancException.h> 27 #include <Core/OrthancException.h>
28 #include <Plugins/Samples/Common/FullOrthancDataset.h> 28 #include <Plugins/Samples/Common/FullOrthancDataset.h>
29 #include <Plugins/Samples/Common/DicomDatasetReader.h>
29 30
30 #include <stdio.h> 31 #include <stdio.h>
31 #include <boost/lexical_cast.hpp> 32 #include <boost/lexical_cast.hpp>
32 33
33 namespace OrthancStone 34 namespace OrthancStone
60 return static_cast<uint8_t>(v); 61 return static_cast<uint8_t>(v);
61 } 62 }
62 } 63 }
63 64
64 65
65 CoordinateSystem3D DicomStructureSet::ExtractSliceGeometry(double& sliceThickness, 66 static bool ParseVector(Vector& target,
66 OrthancPlugins::IOrthancConnection& orthanc, 67 const OrthancPlugins::IDicomDataset& dataset,
67 const OrthancPlugins::IDicomDataset& tags, 68 const OrthancPlugins::DicomPath& tag)
68 size_t contourIndex, 69 {
69 size_t sliceIndex) 70 std::string value;
71 return (dataset.GetStringValue(value, tag) &&
72 GeometryToolbox::ParseVector(target, value));
73 }
74
75 CoordinateSystem3D DicomStructureSet::
76 ExtractSliceGeometry(double& sliceThickness,
77 OrthancPlugins::IOrthancConnection& orthanc,
78 const OrthancPlugins::IDicomDataset& tags,
79 size_t contourIndex,
80 size_t sliceIndex)
70 { 81 {
71 using namespace OrthancPlugins; 82 using namespace OrthancPlugins;
72 83
73 size_t size; 84 size_t size;
74 if (!tags.GetSequenceSize(size, DicomPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, contourIndex, 85 if (!tags.GetSequenceSize(size, DicomPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, contourIndex,
78 { 89 {
79 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); 90 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented);
80 } 91 }
81 92
82 DicomDatasetReader reader(tags); 93 DicomDatasetReader reader(tags);
83 std::string parentUid = reader.GetMandatoryStringValue(DicomPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, contourIndex, 94 std::string parentUid = reader.GetMandatoryStringValue
84 DICOM_TAG_CONTOUR_SEQUENCE, sliceIndex, 95 (DicomPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, contourIndex,
85 DICOM_TAG_CONTOUR_IMAGE_SEQUENCE, 0, 96 DICOM_TAG_CONTOUR_SEQUENCE, sliceIndex,
86 DICOM_TAG_REFERENCED_SOP_INSTANCE_UID)); 97 DICOM_TAG_CONTOUR_IMAGE_SEQUENCE, 0,
98 DICOM_TAG_REFERENCED_SOP_INSTANCE_UID));
87 99
88 Json::Value parentLookup; 100 Json::Value parentLookup;
89 MessagingToolbox::RestApiPost(parentLookup, orthanc, "/tools/lookup", parentUid); 101 MessagingToolbox::RestApiPost(parentLookup, orthanc, "/tools/lookup", parentUid);
90 102
91 if (parentLookup.type() != Json::arrayValue || 103 if (parentLookup.type() != Json::arrayValue ||
124 136
125 FullOrthancDataset parentTags(orthanc, "/instances/" + parentLookup[0]["ID"].asString() + "/tags"); 137 FullOrthancDataset parentTags(orthanc, "/instances/" + parentLookup[0]["ID"].asString() + "/tags");
126 CoordinateSystem3D slice(parentTags); 138 CoordinateSystem3D slice(parentTags);
127 139
128 Vector v; 140 Vector v;
129 if (GeometryToolbox::ParseVector(v, parentTags, DICOM_TAG_SLICE_THICKNESS) && 141 if (ParseVector(v, parentTags, DICOM_TAG_SLICE_THICKNESS) &&
130 v.size() > 0) 142 v.size() > 0)
131 { 143 {
132 sliceThickness = v[0]; 144 sliceThickness = v[0];
133 } 145 }
134 else 146 else
199 structures_[i].name_ = reader.GetStringValue(DicomPath(DICOM_TAG_STRUCTURE_SET_ROI_SEQUENCE, i, 211 structures_[i].name_ = reader.GetStringValue(DicomPath(DICOM_TAG_STRUCTURE_SET_ROI_SEQUENCE, i,
200 DICOM_TAG_ROI_NAME), 212 DICOM_TAG_ROI_NAME),
201 "No interpretation"); 213 "No interpretation");
202 214
203 Vector color; 215 Vector color;
204 if (GeometryToolbox::ParseVector(color, tags, DicomPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, 216 if (ParseVector(color, tags, DicomPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE, i,
205 DICOM_TAG_ROI_DISPLAY_COLOR)) && 217 DICOM_TAG_ROI_DISPLAY_COLOR)) &&
206 color.size() == 3) 218 color.size() == 3)
207 { 219 {
208 structures_[i].red_ = ConvertColor(color[0]); 220 structures_[i].red_ = ConvertColor(color[0]);
209 structures_[i].green_ = ConvertColor(color[1]); 221 structures_[i].green_ = ConvertColor(color[1]);
210 structures_[i].blue_ = ConvertColor(color[2]); 222 structures_[i].blue_ = ConvertColor(color[2]);