Mercurial > hg > orthanc-stone
comparison OrthancStone/UnitTestsSources/DicomTests.cpp @ 2076:990f396484b1
fix rendering of RT-DOSE with negative GridFrameOffsetVector
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 11 Jul 2023 15:58:16 +0200 |
parents | a2955abe4c2e |
children | 07964689cb0b |
comparison
equal
deleted
inserted
replaced
2075:d84bdcbd8bf1 | 2076:990f396484b1 |
---|---|
52 ASSERT_EQ("my_sop", p->GetSopInstanceUid()); | 52 ASSERT_EQ("my_sop", p->GetSopInstanceUid()); |
53 ASSERT_EQ(OrthancStone::SopClassUid_Other, p->GetSopClassUid()); | 53 ASSERT_EQ(OrthancStone::SopClassUid_Other, p->GetSopClassUid()); |
54 ASSERT_EQ(1u, p->GetNumberOfFrames()); | 54 ASSERT_EQ(1u, p->GetNumberOfFrames()); |
55 ASSERT_EQ(0u, p->GetWidth()); | 55 ASSERT_EQ(0u, p->GetWidth()); |
56 ASSERT_EQ(0u, p->GetHeight()); | 56 ASSERT_EQ(0u, p->GetHeight()); |
57 ASSERT_TRUE(OrthancStone::LinearAlgebra::IsCloseToZero(p->GetSliceThickness())); | 57 ASSERT_FALSE(p->HasSliceThickness()); |
58 ASSERT_THROW(p->GetSliceThickness(), Orthanc::OrthancException); | |
58 ASSERT_FLOAT_EQ(1, p->GetPixelSpacingX()); | 59 ASSERT_FLOAT_EQ(1, p->GetPixelSpacingX()); |
59 ASSERT_FLOAT_EQ(1, p->GetPixelSpacingY()); | 60 ASSERT_FLOAT_EQ(1, p->GetPixelSpacingY()); |
60 ASSERT_FALSE(p->GetGeometry().IsValid()); | 61 ASSERT_FALSE(p->GetGeometry().IsValid()); |
61 ASSERT_THROW(p->GetImageInformation(), Orthanc::OrthancException); | 62 ASSERT_THROW(p->GetImageInformation(), Orthanc::OrthancException); |
62 ASSERT_FALSE(p->GetFrameGeometry(0).IsValid()); | 63 ASSERT_FALSE(p->GetFrameGeometry(0).IsValid()); |
79 ASSERT_TRUE(p->GetDoseUnits().empty()); | 80 ASSERT_TRUE(p->GetDoseUnits().empty()); |
80 ASSERT_DOUBLE_EQ(1.0, p->GetDoseGridScaling()); | 81 ASSERT_DOUBLE_EQ(1.0, p->GetDoseGridScaling()); |
81 ASSERT_DOUBLE_EQ(1.0, p->ApplyRescale(1.0)); | 82 ASSERT_DOUBLE_EQ(1.0, p->ApplyRescale(1.0)); |
82 | 83 |
83 double s; | 84 double s; |
84 ASSERT_FALSE(p->ComputeRegularSpacing(s)); | 85 ASSERT_FALSE(p->ComputeFrameOffsetsSpacing(s)); |
85 ASSERT_TRUE(p->GetFrameOfReferenceUid().empty()); | 86 ASSERT_TRUE(p->GetFrameOfReferenceUid().empty()); |
86 } | 87 } |
87 | 88 |
88 | 89 |
89 TEST(DicomInstanceParameters, Windowing) | 90 TEST(DicomInstanceParameters, Windowing) |
221 s2.SetDicomWebThroughOrthancSource("server2"); | 222 s2.SetDicomWebThroughOrthancSource("server2"); |
222 ASSERT_FALSE(s1.IsSameSource(s2)); | 223 ASSERT_FALSE(s1.IsSameSource(s2)); |
223 } | 224 } |
224 } | 225 } |
225 } | 226 } |
227 | |
228 | |
229 TEST(DicomInstanceParameters, ReverseFrameOffsetsGrid) | |
230 { | |
231 Orthanc::DicomMap m; | |
232 SetupUids(m); | |
233 | |
234 m.SetValue(Orthanc::DICOM_TAG_IMAGE_POSITION_PATIENT, "-276.611\\-274.463\\100", false); | |
235 m.SetValue(Orthanc::DICOM_TAG_IMAGE_ORIENTATION_PATIENT, "1\\0\\0\\0\\1\\0", false); | |
236 m.SetValue(Orthanc::DICOM_TAG_NUMBER_OF_FRAMES, "126", false); | |
237 m.SetValue(Orthanc::DICOM_TAG_GRID_FRAME_OFFSET_VECTOR, "0\\-2\\-4\\-6\\-8\\-10\\-12\\-14\\-16\\-18\\-20\\-22\\-24\\-26\\-28\\-30\\-32\\-34\\-36\\-38\\-40\\-42\\-44\\-46\\-48\\-50\\-52\\-54\\-56\\-58\\-60\\-62\\-64\\-66\\-68\\-70\\-72\\-74\\-76\\-78\\-80\\-82\\-84\\-86\\-88\\-90\\-92\\-94\\-96\\-98\\-100\\-102\\-104\\-106\\-108\\-110\\-112\\-114\\-116\\-118\\-120\\-122\\-124\\-126\\-128\\-130\\-132\\-134\\-136\\-138\\-140\\-142\\-144\\-146\\-148\\-150\\-152\\-154\\-156\\-158\\-160\\-162\\-164\\-166\\-168\\-170\\-172\\-174\\-176\\-178\\-180\\-182\\-184\\-186\\-188\\-190\\-192\\-194\\-196\\-198\\-200\\-202\\-204\\-206\\-208\\-210\\-212\\-214\\-216\\-218\\-220\\-222\\-224\\-226\\-228\\-230\\-232\\-234\\-236\\-238\\-240\\-242\\-244\\-246\\-248\\-250", false); | |
238 | |
239 std::unique_ptr<OrthancStone::DicomInstanceParameters> p; | |
240 p.reset(OrthancStone::DicomInstanceParameters(m).Clone()); | |
241 | |
242 ASSERT_FALSE(p->HasSliceThickness()); | |
243 ASSERT_THROW(p->GetSliceThickness(), Orthanc::OrthancException); | |
244 | |
245 double s; | |
246 ASSERT_TRUE(p->ComputeFrameOffsetsSpacing(s)); | |
247 ASSERT_DOUBLE_EQ(s, 2.0); | |
248 ASSERT_TRUE(p->IsReversedFrameOffsets()); | |
249 | |
250 ASSERT_DOUBLE_EQ(1, p->GetMultiFrameGeometry().GetAxisX() [0]); | |
251 ASSERT_DOUBLE_EQ(0, p->GetMultiFrameGeometry().GetAxisX() [1]); | |
252 ASSERT_DOUBLE_EQ(0, p->GetMultiFrameGeometry().GetAxisX() [2]); | |
253 | |
254 ASSERT_DOUBLE_EQ(0, p->GetMultiFrameGeometry().GetAxisY() [0]); | |
255 ASSERT_DOUBLE_EQ(1, p->GetMultiFrameGeometry().GetAxisY() [1]); | |
256 ASSERT_DOUBLE_EQ(0, p->GetMultiFrameGeometry().GetAxisY() [2]); | |
257 | |
258 ASSERT_DOUBLE_EQ(0, p->GetMultiFrameGeometry().GetNormal() [0]); | |
259 ASSERT_DOUBLE_EQ(0, p->GetMultiFrameGeometry().GetNormal() [1]); | |
260 ASSERT_DOUBLE_EQ(1, p->GetMultiFrameGeometry().GetNormal() [2]); | |
261 | |
262 ASSERT_DOUBLE_EQ(-276.611, p->GetMultiFrameGeometry().GetOrigin() [0]); | |
263 ASSERT_DOUBLE_EQ(-274.463, p->GetMultiFrameGeometry().GetOrigin() [1]); | |
264 ASSERT_DOUBLE_EQ(100.0 - 250.0, p->GetMultiFrameGeometry().GetOrigin() [2]); | |
265 } | |
266 | |
267 | |
268 TEST(DicomInstanceParameters, StandardFrameOffsetsGrid) | |
269 { | |
270 Orthanc::DicomMap m; | |
271 SetupUids(m); | |
272 | |
273 m.SetValue(Orthanc::DICOM_TAG_SLICE_THICKNESS, "2", false); | |
274 m.SetValue(Orthanc::DICOM_TAG_IMAGE_POSITION_PATIENT, "-205.2157\\-388.4679\\-120", false); | |
275 m.SetValue(Orthanc::DICOM_TAG_IMAGE_ORIENTATION_PATIENT, "1\\0\\0\\0\\1\\0", false); | |
276 m.SetValue(Orthanc::DICOM_TAG_NUMBER_OF_FRAMES, "155", false); | |
277 m.SetValue(Orthanc::DICOM_TAG_GRID_FRAME_OFFSET_VECTOR, "0\\2\\4\\6\\8\\10\\12\\14\\16\\18\\20\\22\\24\\26\\28\\30\\32\\34\\36\\38\\40\\42\\44\\46\\48\\50\\52\\54\\56\\58\\60\\62\\64\\66\\68\\70\\72\\74\\76\\78\\80\\82\\84\\86\\88\\90\\92\\94\\96\\98\\100\\102\\104\\106\\108\\110\\112\\114\\116\\118\\120\\122\\124\\126\\128\\130\\132\\134\\136\\138\\140\\142\\144\\146\\148\\150\\152\\154\\156\\158\\160\\162\\164\\166\\168\\170\\172\\174\\176\\178\\180\\182\\184\\186\\188\\190\\192\\194\\196\\198\\200\\202\\204\\206\\208\\210\\212\\214\\216\\218\\220\\222\\224\\226\\228\\230\\232\\234\\236\\238\\240\\242\\244\\246\\248\\250\\252\\254\\256\\258\\260\\262\\264\\266\\268\\270\\272\\274\\276\\278\\280\\282\\284\\286\\288\\290\\292\\294\\296\\298\\300\\302\\304\\306\\308", false); | |
278 | |
279 std::unique_ptr<OrthancStone::DicomInstanceParameters> p; | |
280 p.reset(OrthancStone::DicomInstanceParameters(m).Clone()); | |
281 | |
282 ASSERT_TRUE(p->HasSliceThickness()); | |
283 ASSERT_DOUBLE_EQ(2.0, p->GetSliceThickness()); | |
284 | |
285 double s; | |
286 ASSERT_TRUE(p->ComputeFrameOffsetsSpacing(s)); | |
287 ASSERT_DOUBLE_EQ(s, 2.0); | |
288 ASSERT_FALSE(p->IsReversedFrameOffsets()); | |
289 | |
290 ASSERT_DOUBLE_EQ(1, p->GetMultiFrameGeometry().GetAxisX() [0]); | |
291 ASSERT_DOUBLE_EQ(0, p->GetMultiFrameGeometry().GetAxisX() [1]); | |
292 ASSERT_DOUBLE_EQ(0, p->GetMultiFrameGeometry().GetAxisX() [2]); | |
293 | |
294 ASSERT_DOUBLE_EQ(0, p->GetMultiFrameGeometry().GetAxisY() [0]); | |
295 ASSERT_DOUBLE_EQ(1, p->GetMultiFrameGeometry().GetAxisY() [1]); | |
296 ASSERT_DOUBLE_EQ(0, p->GetMultiFrameGeometry().GetAxisY() [2]); | |
297 | |
298 ASSERT_DOUBLE_EQ(0, p->GetMultiFrameGeometry().GetNormal() [0]); | |
299 ASSERT_DOUBLE_EQ(0, p->GetMultiFrameGeometry().GetNormal() [1]); | |
300 ASSERT_DOUBLE_EQ(1, p->GetMultiFrameGeometry().GetNormal() [2]); | |
301 | |
302 ASSERT_DOUBLE_EQ(-205.2157, p->GetMultiFrameGeometry().GetOrigin() [0]); | |
303 ASSERT_DOUBLE_EQ(-388.4679, p->GetMultiFrameGeometry().GetOrigin() [1]); | |
304 ASSERT_DOUBLE_EQ(-120.0, p->GetMultiFrameGeometry().GetOrigin() [2]); | |
305 } |