comparison OrthancStone/Sources/Toolbox/SortedFrames.h @ 1643:882e2253a90e

replacing SortedFrames::Instance by DicomInstanceParameters
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 10 Nov 2020 17:35:32 +0100
parents 960bb5fcc440
children 4796fb60999e
comparison
equal deleted inserted replaced
1642:5cc589bfb385 1643:882e2253a90e
21 21
22 22
23 #pragma once 23 #pragma once
24 24
25 #include "CoordinateSystem3D.h" 25 #include "CoordinateSystem3D.h"
26 #include "DicomInstanceParameters.h"
26 #include "LinearAlgebra.h" 27 #include "LinearAlgebra.h"
27 28
28 namespace OrthancStone 29 namespace OrthancStone
29 { 30 {
30 class SortedFrames : public boost::noncopyable 31 class SortedFrames : public boost::noncopyable
31 { 32 {
32 private: 33 private:
33 class Instance : public boost::noncopyable
34 {
35 private:
36 Orthanc::DicomMap tags_;
37 std::string sopInstanceUid_;
38 unsigned int numberOfFrames_;
39 CoordinateSystem3D geometry_;
40 bool monochrome1_;
41 Vector frameOffsets_;
42
43 public:
44 explicit Instance(const Orthanc::DicomMap& tags);
45
46 const Orthanc::DicomMap& GetTags() const
47 {
48 return tags_;
49 }
50
51 const std::string& GetSopInstanceUid() const
52 {
53 return sopInstanceUid_;
54 }
55
56 unsigned int GetNumberOfFrames() const
57 {
58 return numberOfFrames_;
59 }
60
61 const CoordinateSystem3D& GetGeometry() const
62 {
63 return geometry_;
64 }
65
66 bool IsMonochrome1() const
67 {
68 return monochrome1_;
69 }
70
71 double GetFrameOffset(unsigned int frame) const;
72 };
73
74 struct Frame 34 struct Frame
75 { 35 {
76 private: 36 private:
77 const Instance* instance_; 37 const DicomInstanceParameters* instance_;
78 unsigned int frameNumber_; 38 unsigned int frameNumber_;
79 39
80 public: 40 public:
81 Frame(const Instance& instance, 41 Frame(const DicomInstanceParameters& instance,
82 unsigned int frameNumber); 42 unsigned int frameNumber);
83 43
84 const Instance& GetInstance() const 44 const DicomInstanceParameters& GetInstance() const
85 { 45 {
86 return *instance_; 46 return *instance_;
87 } 47 }
88 48
89 unsigned int GetFrameNumberInInstance() const 49 unsigned int GetFrameNumberInInstance() const
98 58
99 // Maps pair "(SOPInstanceUID, FrameNumber)" to an index in 59 // Maps pair "(SOPInstanceUID, FrameNumber)" to an index in
100 // "frames_" (only once "Sort()" is called) 60 // "frames_" (only once "Sort()" is called)
101 typedef std::map<std::pair<std::string, unsigned int>, size_t> FramesIndex; 61 typedef std::map<std::pair<std::string, unsigned int>, size_t> FramesIndex;
102 62
103 std::string studyInstanceUid_; 63 std::string studyInstanceUid_;
104 std::string seriesInstanceUid_; 64 std::string seriesInstanceUid_;
105 std::vector<Instance*> instances_; 65 std::vector<DicomInstanceParameters*> instances_;
106 std::vector<Frame> frames_; 66 std::vector<Frame> frames_;
107 bool sorted_; 67 bool sorted_;
108 InstancesIndex instancesIndex_; 68 InstancesIndex instancesIndex_;
109 FramesIndex framesIndex_; 69 FramesIndex framesIndex_;
110 70
111 const Instance& GetInstance(size_t instanceIndex) const; 71 const DicomInstanceParameters& GetInstance(size_t instanceIndex) const;
112 72
113 const Frame& GetFrame(size_t frameIndex) const; 73 const Frame& GetFrame(size_t frameIndex) const;
114 74
115 void AddFramesOfInstance(std::set<size_t>& remainingInstances, 75 void AddFramesOfInstance(std::set<size_t>& remainingInstances,
116 size_t instanceIndex); 76 size_t instanceIndex);
195 unsigned int GetFrameNumberInInstance(size_t frameIndex) const 155 unsigned int GetFrameNumberInInstance(size_t frameIndex) const
196 { 156 {
197 return GetFrame(frameIndex).GetFrameNumberInInstance(); 157 return GetFrame(frameIndex).GetFrameNumberInInstance();
198 } 158 }
199 159
200 bool IsFrameMonochrome1(size_t frameIndex) const 160 bool IsFrameMonochrome1(size_t frameIndex) const // TODO - REMOVE
201 { 161 {
202 return GetFrame(frameIndex).GetInstance().IsMonochrome1(); 162 return GetFrame(frameIndex).GetInstance().GetImageInformation().GetPhotometricInterpretation() ==
163 Orthanc::PhotometricInterpretation_Monochrome1;
203 } 164 }
204 165
205 CoordinateSystem3D GetFrameGeometry(size_t frameIndex) const; 166 CoordinateSystem3D GetFrameGeometry(size_t frameIndex) const;
206 167
207 bool LookupFrame(size_t& frameIndex, 168 bool LookupFrame(size_t& frameIndex,