Mercurial > hg > orthanc-stone
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]); |