Mercurial > hg > orthanc-stone
diff 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 |
line wrap: on
line diff
--- a/Framework/Layers/SingleFrameRendererFactory.cpp Fri Dec 16 15:41:20 2016 +0100 +++ b/Framework/Layers/SingleFrameRendererFactory.cpp Mon Dec 19 11:00:23 2016 +0100 @@ -35,6 +35,8 @@ #include "FrameRenderer.h" #include "../Messaging/MessagingToolbox.h" #include "../../Resources/Orthanc/Core/OrthancException.h" +#include "../../Resources/Orthanc/Plugins/Samples/Common/FullOrthancDataset.h" +#include "../../Resources/Orthanc/Plugins/Samples/Common/DicomDatasetReader.h" #include "../Toolbox/DicomFrameConverter.h" namespace OrthancStone @@ -43,27 +45,14 @@ const std::string& instanceId, unsigned int frame) : orthanc_(orthanc), - dicom_(orthanc, instanceId), instance_(instanceId), frame_(frame) { - DicomFrameConverter converter; - converter.ReadParameters(dicom_); - format_ = converter.GetExpectedPixelFormat(); - } - + dicom_.reset(new OrthancPlugins::FullOrthancDataset(orthanc, "/instances/" + instanceId + "/tags")); - SliceGeometry SingleFrameRendererFactory::GetSliceGeometry() - { - if (dicom_.HasTag(DICOM_TAG_IMAGE_POSITION_PATIENT) && - dicom_.HasTag(DICOM_TAG_IMAGE_ORIENTATION_PATIENT)) - { - return SliceGeometry(dicom_); - } - else - { - return SliceGeometry(); - } + DicomFrameConverter converter; + converter.ReadParameters(*dicom_); + format_ = converter.GetExpectedPixelFormat(); } @@ -75,8 +64,15 @@ { // Assume that PixelSpacingX == PixelSpacingY == 1 - unsigned int width = dicom_.GetUnsignedIntegerValue(DICOM_TAG_COLUMNS); - unsigned int height = dicom_.GetUnsignedIntegerValue(DICOM_TAG_ROWS); + OrthancPlugins::DicomDatasetReader reader(*dicom_); + + unsigned int width, height; + + if (!reader.GetUnsignedIntegerValue(width, OrthancPlugins::DICOM_TAG_COLUMNS) || + !reader.GetUnsignedIntegerValue(height, OrthancPlugins::DICOM_TAG_ROWS)) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); + } x1 = 0; y1 = 0; @@ -89,9 +85,9 @@ ILayerRenderer* SingleFrameRendererFactory::CreateLayerRenderer(const SliceGeometry& viewportSlice) { - SliceGeometry frameSlice(dicom_); + SliceGeometry frameSlice(*dicom_); return FrameRenderer::CreateRenderer(MessagingToolbox::DecodeFrame(orthanc_, instance_, frame_, format_), - viewportSlice, frameSlice, dicom_, 1, 1, true); + viewportSlice, frameSlice, *dicom_, 1, 1, true); }