comparison OrthancStone/Sources/Toolbox/DicomStructuredReport.h @ 2098:4288d635d77e dicom-sr

first rendering of dicom-sr
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 08 Nov 2023 17:23:31 +0100
parents a9e23ef9ee09
children 129cb165ea8d
comparison
equal deleted inserted replaced
2097:a9e23ef9ee09 2098:4288d635d77e
29 29
30 #if ORTHANC_ENABLE_DCMTK != 1 30 #if ORTHANC_ENABLE_DCMTK != 1
31 # error Support for DCMTK must be enabled 31 # error Support for DCMTK must be enabled
32 #endif 32 #endif
33 33
34 #include "../Scene2D/ScenePoint2D.h"
35
34 #include <DicomParsing/ParsedDicomFile.h> 36 #include <DicomParsing/ParsedDicomFile.h>
35 37
36 #include <dcmtk/dcmdata/dcitem.h> 38 #include <dcmtk/dcmdata/dcitem.h>
39 #include <deque>
37 #include <list> 40 #include <list>
38 #include <set> 41 #include <set>
39 42
40 namespace OrthancStone 43 namespace OrthancStone
41 { 44 {
42 class DicomStructuredReport : public boost::noncopyable 45 class DicomStructuredReport : public boost::noncopyable
43 { 46 {
47 public:
48 enum StructureType
49 {
50 StructureType_Point,
51 StructureType_Polyline
52 };
53
54 class Structure : public boost::noncopyable
55 {
56 private:
57 std::string sopInstanceUid_;
58 bool hasFrameNumber_;
59 unsigned int frameNumber_;
60 bool hasProbabilityOfCancer_;
61 float probabilityOfCancer_;
62
63 protected:
64 void Copy(const Structure& other);
65
66 public:
67 Structure(const std::string& sopInstanceUid);
68
69 virtual ~Structure()
70 {
71 }
72
73 virtual Structure* Clone() const = 0;
74
75 virtual StructureType GetType() const = 0;
76
77 const std::string& GetSopInstanceUid() const
78 {
79 return sopInstanceUid_;
80 }
81
82 void SetFrameNumber(unsigned int frame);
83
84 void SetProbabilityOfCancer(float probability);
85
86 bool HasFrameNumber() const
87 {
88 return hasFrameNumber_;
89 }
90
91 bool HasProbabilityOfCancer() const
92 {
93 return hasProbabilityOfCancer_;
94 }
95
96 unsigned int GetFrameNumber() const;
97
98 float GetProbabilityOfCancer() const;
99 };
100
101
102 class Point : public Structure
103 {
104 private:
105 ScenePoint2D point_;
106
107 public:
108 Point(const std::string& sopInstanceUid,
109 double x,
110 double y);
111
112 virtual Structure* Clone() const ORTHANC_OVERRIDE;
113
114 virtual StructureType GetType() const ORTHANC_OVERRIDE
115 {
116 return StructureType_Point;
117 }
118
119 const ScenePoint2D& GetPoint() const
120 {
121 return point_;
122 }
123 };
124
125
126 class Polyline : public Structure
127 {
128 private:
129 std::vector<ScenePoint2D> points_;
130
131 public:
132 Polyline(const std::string& sopInstanceUid,
133 const float* points,
134 unsigned long pointsCount);
135
136 Polyline(const std::string& sopInstanceUid,
137 const std::vector<ScenePoint2D>& points);
138
139 virtual Structure* Clone() const ORTHANC_OVERRIDE;
140
141 virtual StructureType GetType() const ORTHANC_OVERRIDE
142 {
143 return StructureType_Polyline;
144 }
145
146 size_t GetSize() const
147 {
148 return points_.size();
149 }
150
151 const ScenePoint2D& GetPoint(size_t i) const;
152 };
153
154
44 private: 155 private:
45 class Structure;
46 class Point;
47 class Polyline;
48
49 class ReferencedInstance 156 class ReferencedInstance
50 { 157 {
51 private: 158 private:
52 std::string studyInstanceUid_; 159 std::string studyInstanceUid_;
53 std::string seriesInstanceUid_; 160 std::string seriesInstanceUid_;
77 const std::string& GetSopClassUid() const 184 const std::string& GetSopClassUid() const
78 { 185 {
79 return sopClassUid_; 186 return sopClassUid_;
80 } 187 }
81 188
82 void AddFrame(unsigned int frame); 189 void AddFrame(unsigned int frame)
190 {
191 frames_.insert(frame);
192 }
83 193
84 const std::set<unsigned int>& GetFrames() const 194 const std::set<unsigned int>& GetFrames() const
85 { 195 {
86 return frames_; 196 return frames_;
87 } 197 }
98 std::string studyInstanceUid_; 208 std::string studyInstanceUid_;
99 std::string seriesInstanceUid_; 209 std::string seriesInstanceUid_;
100 std::string sopInstanceUid_; 210 std::string sopInstanceUid_;
101 std::map<std::string, ReferencedInstance*> instancesInformation_; 211 std::map<std::string, ReferencedInstance*> instancesInformation_;
102 std::vector<std::string> orderedInstances_; 212 std::vector<std::string> orderedInstances_;
103 std::list<Structure*> structures_; 213 std::deque<Structure*> structures_;
104 214
105 public: 215 public:
106 class ReferencedFrame 216 class ReferencedFrame
107 { 217 {
108 private: 218 private:
183 std::string& sopInstanceUid, 293 std::string& sopInstanceUid,
184 std::string& sopClassUid, 294 std::string& sopClassUid,
185 size_t i) const; 295 size_t i) const;
186 296
187 void ExportReferencedFrames(std::list<ReferencedFrame>& frames) const; 297 void ExportReferencedFrames(std::list<ReferencedFrame>& frames) const;
298
299 size_t GetStructuresCount() const
300 {
301 return structures_.size();
302 }
303
304 const Structure& GetStructure(size_t index) const;
188 }; 305 };
189 } 306 }