Mercurial > hg > orthanc-stone
comparison Framework/Layers/SingleFrameRendererFactory.cpp @ 32:517c46f527cd
sync
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 19 Dec 2016 11:00:23 +0100 |
parents | 9aace933cb64 |
children | 6465fbd23bce |
comparison
equal
deleted
inserted
replaced
31:9aace933cb64 | 32:517c46f527cd |
---|---|
33 #include "SingleFrameRendererFactory.h" | 33 #include "SingleFrameRendererFactory.h" |
34 | 34 |
35 #include "FrameRenderer.h" | 35 #include "FrameRenderer.h" |
36 #include "../Messaging/MessagingToolbox.h" | 36 #include "../Messaging/MessagingToolbox.h" |
37 #include "../../Resources/Orthanc/Core/OrthancException.h" | 37 #include "../../Resources/Orthanc/Core/OrthancException.h" |
38 #include "../../Resources/Orthanc/Plugins/Samples/Common/FullOrthancDataset.h" | |
39 #include "../../Resources/Orthanc/Plugins/Samples/Common/DicomDatasetReader.h" | |
38 #include "../Toolbox/DicomFrameConverter.h" | 40 #include "../Toolbox/DicomFrameConverter.h" |
39 | 41 |
40 namespace OrthancStone | 42 namespace OrthancStone |
41 { | 43 { |
42 SingleFrameRendererFactory::SingleFrameRendererFactory(OrthancPlugins::IOrthancConnection& orthanc, | 44 SingleFrameRendererFactory::SingleFrameRendererFactory(OrthancPlugins::IOrthancConnection& orthanc, |
43 const std::string& instanceId, | 45 const std::string& instanceId, |
44 unsigned int frame) : | 46 unsigned int frame) : |
45 orthanc_(orthanc), | 47 orthanc_(orthanc), |
46 dicom_(orthanc, instanceId), | |
47 instance_(instanceId), | 48 instance_(instanceId), |
48 frame_(frame) | 49 frame_(frame) |
49 { | 50 { |
51 dicom_.reset(new OrthancPlugins::FullOrthancDataset(orthanc, "/instances/" + instanceId + "/tags")); | |
52 | |
50 DicomFrameConverter converter; | 53 DicomFrameConverter converter; |
51 converter.ReadParameters(dicom_); | 54 converter.ReadParameters(*dicom_); |
52 format_ = converter.GetExpectedPixelFormat(); | 55 format_ = converter.GetExpectedPixelFormat(); |
53 } | |
54 | |
55 | |
56 SliceGeometry SingleFrameRendererFactory::GetSliceGeometry() | |
57 { | |
58 if (dicom_.HasTag(DICOM_TAG_IMAGE_POSITION_PATIENT) && | |
59 dicom_.HasTag(DICOM_TAG_IMAGE_ORIENTATION_PATIENT)) | |
60 { | |
61 return SliceGeometry(dicom_); | |
62 } | |
63 else | |
64 { | |
65 return SliceGeometry(); | |
66 } | |
67 } | 56 } |
68 | 57 |
69 | 58 |
70 bool SingleFrameRendererFactory::GetExtent(double& x1, | 59 bool SingleFrameRendererFactory::GetExtent(double& x1, |
71 double& y1, | 60 double& y1, |
73 double& y2, | 62 double& y2, |
74 const SliceGeometry& viewportSlice) | 63 const SliceGeometry& viewportSlice) |
75 { | 64 { |
76 // Assume that PixelSpacingX == PixelSpacingY == 1 | 65 // Assume that PixelSpacingX == PixelSpacingY == 1 |
77 | 66 |
78 unsigned int width = dicom_.GetUnsignedIntegerValue(DICOM_TAG_COLUMNS); | 67 OrthancPlugins::DicomDatasetReader reader(*dicom_); |
79 unsigned int height = dicom_.GetUnsignedIntegerValue(DICOM_TAG_ROWS); | 68 |
69 unsigned int width, height; | |
70 | |
71 if (!reader.GetUnsignedIntegerValue(width, OrthancPlugins::DICOM_TAG_COLUMNS) || | |
72 !reader.GetUnsignedIntegerValue(height, OrthancPlugins::DICOM_TAG_ROWS)) | |
73 { | |
74 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); | |
75 } | |
80 | 76 |
81 x1 = 0; | 77 x1 = 0; |
82 y1 = 0; | 78 y1 = 0; |
83 x2 = static_cast<double>(width); | 79 x2 = static_cast<double>(width); |
84 y2 = static_cast<double>(height); | 80 y2 = static_cast<double>(height); |
87 } | 83 } |
88 | 84 |
89 | 85 |
90 ILayerRenderer* SingleFrameRendererFactory::CreateLayerRenderer(const SliceGeometry& viewportSlice) | 86 ILayerRenderer* SingleFrameRendererFactory::CreateLayerRenderer(const SliceGeometry& viewportSlice) |
91 { | 87 { |
92 SliceGeometry frameSlice(dicom_); | 88 SliceGeometry frameSlice(*dicom_); |
93 return FrameRenderer::CreateRenderer(MessagingToolbox::DecodeFrame(orthanc_, instance_, frame_, format_), | 89 return FrameRenderer::CreateRenderer(MessagingToolbox::DecodeFrame(orthanc_, instance_, frame_, format_), |
94 viewportSlice, frameSlice, dicom_, 1, 1, true); | 90 viewportSlice, frameSlice, *dicom_, 1, 1, true); |
95 } | 91 } |
96 | 92 |
97 | 93 |
98 ISliceableVolume& SingleFrameRendererFactory::GetSourceVolume() const | 94 ISliceableVolume& SingleFrameRendererFactory::GetSourceVolume() const |
99 { | 95 { |