Mercurial > hg > orthanc-stone
annotate Framework/Toolbox/OrthancSlicesLoader.h @ 421:f87f28624b96 cache-in-radiography
tentative to make SmartLoader and RadiographyScene work together (not really working)
author | am@osimis.io |
---|---|
date | Tue, 20 Nov 2018 16:35:29 +0100 |
parents | 5d359b115b29 |
children |
rev | line source |
---|---|
73 | 1 /** |
2 * Stone of Orthanc | |
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics | |
4 * Department, University Hospital of Liege, Belgium | |
135
e2fe9352f240
upgrade to year 2018
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
120
diff
changeset
|
5 * Copyright (C) 2017-2018 Osimis S.A., Belgium |
73 | 6 * |
7 * This program is free software: you can redistribute it and/or | |
8 * modify it under the terms of the GNU Affero General Public License | |
9 * as published by the Free Software Foundation, either version 3 of | |
10 * the License, or (at your option) any later version. | |
11 * | |
12 * This program is distributed in the hope that it will be useful, but | |
13 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 * Affero General Public License for more details. | |
318
3a4ca166fafa
ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents:
300
diff
changeset
|
16 * |
73 | 17 * You should have received a copy of the GNU Affero General Public License |
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
19 **/ | |
20 | |
21 | |
22 #pragma once | |
23 | |
378 | 24 #include "../Messages/IObservable.h" |
194
7a031ac16b2d
rename Enumerations.h to StoneEnumerations.h to avoid clashes with Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
135
diff
changeset
|
25 #include "../StoneEnumerations.h" |
378 | 26 #include "IWebService.h" |
300
b4abaeb783b1
messaging refactoring almost complete: works fine in native
am@osimis.io
parents:
299
diff
changeset
|
27 #include "OrthancApiClient.h" |
378 | 28 #include "SlicesSorter.h" |
29 | |
30 #include <Core/Images/Image.h> | |
421
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
31 #include <Plugins/Samples/Common/FullOrthancDataset.h> |
318
3a4ca166fafa
ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents:
300
diff
changeset
|
32 |
73 | 33 |
34 namespace OrthancStone | |
35 { | |
300
b4abaeb783b1
messaging refactoring almost complete: works fine in native
am@osimis.io
parents:
299
diff
changeset
|
36 class OrthancSlicesLoader : public IObservable, public IObserver |
73 | 37 { |
38 public: | |
299
3897f9f28cfa
backup work in progress: updated messaging framework with ICallable
am@osimis.io
parents:
268
diff
changeset
|
39 |
3897f9f28cfa
backup work in progress: updated messaging framework with ICallable
am@osimis.io
parents:
268
diff
changeset
|
40 typedef OriginMessage<MessageType_SliceLoader_GeometryReady, OrthancSlicesLoader> SliceGeometryReadyMessage; |
3897f9f28cfa
backup work in progress: updated messaging framework with ICallable
am@osimis.io
parents:
268
diff
changeset
|
41 typedef OriginMessage<MessageType_SliceLoader_GeometryError, OrthancSlicesLoader> SliceGeometryErrorMessage; |
3897f9f28cfa
backup work in progress: updated messaging framework with ICallable
am@osimis.io
parents:
268
diff
changeset
|
42 |
421
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
43 class SliceTagsReadyMessage : public OriginMessage<MessageType_SliceLoader_TagsReady, OrthancSlicesLoader> |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
44 { |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
45 private: |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
46 const OrthancPlugins::FullOrthancDataset& dicomTags_; |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
47 public: |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
48 SliceTagsReadyMessage(OrthancSlicesLoader& origin, |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
49 const OrthancPlugins::FullOrthancDataset& dicomTags) : |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
50 OriginMessage(origin), |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
51 dicomTags_(dicomTags) |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
52 { |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
53 } |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
54 |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
55 const OrthancPlugins::FullOrthancDataset& GetDicomTags() const |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
56 { |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
57 return dicomTags_; |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
58 } |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
59 }; |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
60 |
406
5d359b115b29
use of callables in OrthancVolumeImage
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
382
diff
changeset
|
61 class SliceImageReadyMessage : |
421
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
62 public OriginMessage<MessageType_SliceLoader_ImageReady, OrthancSlicesLoader> |
252 | 63 { |
378 | 64 private: |
65 unsigned int sliceIndex_; | |
66 const Slice& slice_; | |
67 const Orthanc::ImageAccessor& image_; | |
68 SliceImageQuality effectiveQuality_; | |
252 | 69 |
378 | 70 public: |
406
5d359b115b29
use of callables in OrthancVolumeImage
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
382
diff
changeset
|
71 SliceImageReadyMessage(const OrthancSlicesLoader& origin, |
5d359b115b29
use of callables in OrthancVolumeImage
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
382
diff
changeset
|
72 unsigned int sliceIndex, |
318
3a4ca166fafa
ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents:
300
diff
changeset
|
73 const Slice& slice, |
378 | 74 const Orthanc::ImageAccessor& image, |
75 SliceImageQuality effectiveQuality) : | |
406
5d359b115b29
use of callables in OrthancVolumeImage
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
382
diff
changeset
|
76 OriginMessage(origin), |
378 | 77 sliceIndex_(sliceIndex), |
78 slice_(slice), | |
79 image_(image), | |
80 effectiveQuality_(effectiveQuality) | |
252 | 81 { |
82 } | |
378 | 83 |
84 unsigned int GetSliceIndex() const | |
85 { | |
86 return sliceIndex_; | |
87 } | |
88 | |
89 const Slice& GetSlice() const | |
90 { | |
91 return slice_; | |
92 } | |
252 | 93 |
378 | 94 const Orthanc::ImageAccessor& GetImage() const |
95 { | |
96 return image_; | |
97 } | |
98 | |
99 SliceImageQuality GetEffectiveQuality() const | |
100 { | |
101 return effectiveQuality_; | |
421
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
102 } |
378 | 103 }; |
104 | |
105 | |
421
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
106 class SliceImageErrorMessage : |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
107 public OriginMessage<MessageType_SliceLoader_ImageError, OrthancSlicesLoader> |
252 | 108 { |
378 | 109 private: |
110 const Slice& slice_; | |
111 unsigned int sliceIndex_; | |
112 SliceImageQuality effectiveQuality_; | |
252 | 113 |
378 | 114 public: |
406
5d359b115b29
use of callables in OrthancVolumeImage
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
382
diff
changeset
|
115 SliceImageErrorMessage(const OrthancSlicesLoader& origin, |
5d359b115b29
use of callables in OrthancVolumeImage
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
382
diff
changeset
|
116 unsigned int sliceIndex, |
318
3a4ca166fafa
ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents:
300
diff
changeset
|
117 const Slice& slice, |
378 | 118 SliceImageQuality effectiveQuality) : |
406
5d359b115b29
use of callables in OrthancVolumeImage
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
382
diff
changeset
|
119 OriginMessage(origin), |
378 | 120 slice_(slice), |
121 sliceIndex_(sliceIndex), | |
122 effectiveQuality_(effectiveQuality) | |
252 | 123 { |
124 } | |
378 | 125 unsigned int GetSliceIndex() const |
126 { | |
127 return sliceIndex_; | |
128 } | |
129 | |
130 const Slice& GetSlice() const | |
131 { | |
132 return slice_; | |
133 } | |
134 | |
135 SliceImageQuality GetEffectiveQuality() const | |
136 { | |
137 return effectiveQuality_; | |
421
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
138 } |
252 | 139 }; |
73 | 140 |
141 private: | |
142 enum State | |
143 { | |
144 State_Error, | |
145 State_Initialization, | |
146 State_LoadingGeometry, | |
147 State_GeometryReady | |
148 }; | |
149 | |
150 enum Mode | |
151 { | |
152 Mode_SeriesGeometry, | |
153 Mode_InstanceGeometry, | |
117
42c05a3baee3
loading multi-frame instances as 3D volumes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
110
diff
changeset
|
154 Mode_FrameGeometry, |
42c05a3baee3
loading multi-frame instances as 3D volumes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
110
diff
changeset
|
155 Mode_LoadImage, |
257 | 156 Mode_LoadRawImage, |
157 Mode_LoadDicomFile | |
73 | 158 }; |
159 | |
160 class Operation; | |
161 | |
300
b4abaeb783b1
messaging refactoring almost complete: works fine in native
am@osimis.io
parents:
299
diff
changeset
|
162 OrthancApiClient& orthanc_; |
73 | 163 State state_; |
164 SlicesSorter slices_; | |
165 | |
93
5945e81734a3
decoding of JPEG images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
77
diff
changeset
|
166 void NotifySliceImageSuccess(const Operation& operation, |
378 | 167 const Orthanc::ImageAccessor& image); |
168 | |
268
5bd4161bf11b
removed constness of the observable when emitting a message
am@osimis.io
parents:
267
diff
changeset
|
169 void NotifySliceImageError(const Operation& operation); |
300
b4abaeb783b1
messaging refactoring almost complete: works fine in native
am@osimis.io
parents:
299
diff
changeset
|
170 |
382
dd4c7e82b4be
removed class OrthancApiClient::HttpErrorMessage, redundant with IWebService::HttpRequestErrorMessage
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
171 void OnGeometryError(const IWebService::HttpRequestErrorMessage& message); |
dd4c7e82b4be
removed class OrthancApiClient::HttpErrorMessage, redundant with IWebService::HttpRequestErrorMessage
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
172 |
dd4c7e82b4be
removed class OrthancApiClient::HttpErrorMessage, redundant with IWebService::HttpRequestErrorMessage
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
173 void OnSliceImageError(const IWebService::HttpRequestErrorMessage& message); |
73 | 174 |
300
b4abaeb783b1
messaging refactoring almost complete: works fine in native
am@osimis.io
parents:
299
diff
changeset
|
175 void ParseSeriesGeometry(const OrthancApiClient::JsonResponseReadyMessage& message); |
73 | 176 |
300
b4abaeb783b1
messaging refactoring almost complete: works fine in native
am@osimis.io
parents:
299
diff
changeset
|
177 void ParseInstanceGeometry(const OrthancApiClient::JsonResponseReadyMessage& message); |
117
42c05a3baee3
loading multi-frame instances as 3D volumes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
110
diff
changeset
|
178 |
300
b4abaeb783b1
messaging refactoring almost complete: works fine in native
am@osimis.io
parents:
299
diff
changeset
|
179 void ParseFrameGeometry(const OrthancApiClient::JsonResponseReadyMessage& message); |
93
5945e81734a3
decoding of JPEG images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
77
diff
changeset
|
180 |
300
b4abaeb783b1
messaging refactoring almost complete: works fine in native
am@osimis.io
parents:
299
diff
changeset
|
181 void ParseSliceImagePng(const OrthancApiClient::BinaryResponseReadyMessage& message); |
257 | 182 |
300
b4abaeb783b1
messaging refactoring almost complete: works fine in native
am@osimis.io
parents:
299
diff
changeset
|
183 void ParseSliceImagePam(const OrthancApiClient::BinaryResponseReadyMessage& message); |
93
5945e81734a3
decoding of JPEG images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
77
diff
changeset
|
184 |
300
b4abaeb783b1
messaging refactoring almost complete: works fine in native
am@osimis.io
parents:
299
diff
changeset
|
185 void ParseSliceImageJpeg(const OrthancApiClient::JsonResponseReadyMessage& message); |
b4abaeb783b1
messaging refactoring almost complete: works fine in native
am@osimis.io
parents:
299
diff
changeset
|
186 |
b4abaeb783b1
messaging refactoring almost complete: works fine in native
am@osimis.io
parents:
299
diff
changeset
|
187 void ParseSliceRawImage(const OrthancApiClient::BinaryResponseReadyMessage& message); |
117
42c05a3baee3
loading multi-frame instances as 3D volumes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
110
diff
changeset
|
188 |
42c05a3baee3
loading multi-frame instances as 3D volumes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
110
diff
changeset
|
189 void ScheduleSliceImagePng(const Slice& slice, |
42c05a3baee3
loading multi-frame instances as 3D volumes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
110
diff
changeset
|
190 size_t index); |
257 | 191 |
192 void ScheduleSliceImagePam(const Slice& slice, | |
193 size_t index); | |
194 | |
117
42c05a3baee3
loading multi-frame instances as 3D volumes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
110
diff
changeset
|
195 void ScheduleSliceImageJpeg(const Slice& slice, |
42c05a3baee3
loading multi-frame instances as 3D volumes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
110
diff
changeset
|
196 size_t index, |
93
5945e81734a3
decoding of JPEG images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
77
diff
changeset
|
197 SliceImageQuality quality); |
120
063f7f3d9f14
fix 3d locations of the doses
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
117
diff
changeset
|
198 |
421
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
406
diff
changeset
|
199 void SortAndFinalizeSlices(const OrthancPlugins::FullOrthancDataset& dicomTags); |
73 | 200 |
201 public: | |
251
192e6e349e69
first usage of new message system (in SDL only)
am@osimis.io
parents:
194
diff
changeset
|
202 OrthancSlicesLoader(MessageBroker& broker, |
266
c9cf95b49a86
removed OrthancSlicesLoader::ISliceLoaderObserver; now using standard messages instead
am@osimis.io
parents:
262
diff
changeset
|
203 //ISliceLoaderObserver& callback, |
300
b4abaeb783b1
messaging refactoring almost complete: works fine in native
am@osimis.io
parents:
299
diff
changeset
|
204 OrthancApiClient& orthancApi); |
73 | 205 |
206 void ScheduleLoadSeries(const std::string& seriesId); | |
207 | |
117
42c05a3baee3
loading multi-frame instances as 3D volumes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
110
diff
changeset
|
208 void ScheduleLoadInstance(const std::string& instanceId); |
42c05a3baee3
loading multi-frame instances as 3D volumes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
110
diff
changeset
|
209 |
42c05a3baee3
loading multi-frame instances as 3D volumes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
110
diff
changeset
|
210 void ScheduleLoadFrame(const std::string& instanceId, |
42c05a3baee3
loading multi-frame instances as 3D volumes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
110
diff
changeset
|
211 unsigned int frame); |
73 | 212 |
77 | 213 bool IsGeometryReady() const; |
214 | |
73 | 215 size_t GetSliceCount() const; |
216 | |
217 const Slice& GetSlice(size_t index) const; | |
218 | |
77 | 219 bool LookupSlice(size_t& index, |
110
53025eecbc95
renamed SliceGeometry as CoordinateSystem3D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
99
diff
changeset
|
220 const CoordinateSystem3D& plane) const; |
77 | 221 |
93
5945e81734a3
decoding of JPEG images
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
77
diff
changeset
|
222 void ScheduleLoadSliceImage(size_t index, |
117
42c05a3baee3
loading multi-frame instances as 3D volumes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
110
diff
changeset
|
223 SliceImageQuality requestedQuality); |
73 | 224 }; |
225 } |