annotate Framework/Deprecated/SmartLoader.cpp @ 1455:30deba7bc8e2

simplifying include_directories
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 11 Jun 2020 20:54:01 +0200
parents 257f2c9a02ac
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
260
am@osimis.io
parents:
diff changeset
1 /**
am@osimis.io
parents:
diff changeset
2 * Stone of Orthanc
am@osimis.io
parents:
diff changeset
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
am@osimis.io
parents:
diff changeset
4 * Department, University Hospital of Liege, Belgium
1270
2d8ab34c8c91 upgrade to year 2020
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 739
diff changeset
5 * Copyright (C) 2017-2020 Osimis S.A., Belgium
260
am@osimis.io
parents:
diff changeset
6 *
am@osimis.io
parents:
diff changeset
7 * This program is free software: you can redistribute it and/or
am@osimis.io
parents:
diff changeset
8 * modify it under the terms of the GNU Affero General Public License
am@osimis.io
parents:
diff changeset
9 * as published by the Free Software Foundation, either version 3 of
am@osimis.io
parents:
diff changeset
10 * the License, or (at your option) any later version.
am@osimis.io
parents:
diff changeset
11 *
am@osimis.io
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful, but
am@osimis.io
parents:
diff changeset
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
am@osimis.io
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
am@osimis.io
parents:
diff changeset
15 * Affero General Public License for more details.
am@osimis.io
parents:
diff changeset
16 *
am@osimis.io
parents:
diff changeset
17 * You should have received a copy of the GNU Affero General Public License
am@osimis.io
parents:
diff changeset
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
am@osimis.io
parents:
diff changeset
19 **/
am@osimis.io
parents:
diff changeset
20
am@osimis.io
parents:
diff changeset
21
am@osimis.io
parents:
diff changeset
22 #include "SmartLoader.h"
732
c35e98d22764 move Deprecated classes to a separate folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 726
diff changeset
23
c35e98d22764 move Deprecated classes to a separate folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 726
diff changeset
24 #include "../StoneException.h"
c35e98d22764 move Deprecated classes to a separate folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 726
diff changeset
25 #include "Layers/DicomSeriesVolumeSlicer.h"
c35e98d22764 move Deprecated classes to a separate folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 726
diff changeset
26 #include "Layers/FrameRenderer.h"
c35e98d22764 move Deprecated classes to a separate folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 726
diff changeset
27 #include "Widgets/SliceViewerWidget.h"
260
am@osimis.io
parents:
diff changeset
28
1455
30deba7bc8e2 simplifying include_directories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1300
diff changeset
29 #include <Images/Image.h>
30deba7bc8e2 simplifying include_directories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1300
diff changeset
30 #include <Logging.h>
30deba7bc8e2 simplifying include_directories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1300
diff changeset
31
726
4f2416d519b4 moving layers, widgets and loaders to Deprecated namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 714
diff changeset
32 namespace Deprecated
260
am@osimis.io
parents:
diff changeset
33 {
334
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
34 enum CachedSliceStatus
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
35 {
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
36 CachedSliceStatus_ScheduledToLoad,
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
37 CachedSliceStatus_GeometryLoaded,
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
38 CachedSliceStatus_ImageLoaded
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
39 };
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
40
401
f1c769b3a5c2 start getting rid of VolumeSlicerBase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 396
diff changeset
41 class SmartLoader::CachedSlice : public IVolumeSlicer
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
42 {
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
43 public:
381
19bd222283ae uncoupling LayerReadyMessage from the creation of the renderer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
44 class RendererFactory : public LayerReadyMessage::IRendererFactory
19bd222283ae uncoupling LayerReadyMessage from the creation of the renderer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
45 {
19bd222283ae uncoupling LayerReadyMessage from the creation of the renderer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
46 private:
19bd222283ae uncoupling LayerReadyMessage from the creation of the renderer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
47 const CachedSlice& that_;
19bd222283ae uncoupling LayerReadyMessage from the creation of the renderer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
48
19bd222283ae uncoupling LayerReadyMessage from the creation of the renderer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
49 public:
19bd222283ae uncoupling LayerReadyMessage from the creation of the renderer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
50 RendererFactory(const CachedSlice& that) :
19bd222283ae uncoupling LayerReadyMessage from the creation of the renderer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
51 that_(that)
19bd222283ae uncoupling LayerReadyMessage from the creation of the renderer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
52 {
19bd222283ae uncoupling LayerReadyMessage from the creation of the renderer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
53 }
19bd222283ae uncoupling LayerReadyMessage from the creation of the renderer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
54
19bd222283ae uncoupling LayerReadyMessage from the creation of the renderer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
55 virtual ILayerRenderer* CreateRenderer() const
19bd222283ae uncoupling LayerReadyMessage from the creation of the renderer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
56 {
739
be9c1530d40a deprecating enum SliceImageQuality
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 732
diff changeset
57 bool isFull = (that_.effectiveQuality_ == SliceImageQuality_FullPng ||
be9c1530d40a deprecating enum SliceImageQuality
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 732
diff changeset
58 that_.effectiveQuality_ == SliceImageQuality_FullPam);
381
19bd222283ae uncoupling LayerReadyMessage from the creation of the renderer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
59
19bd222283ae uncoupling LayerReadyMessage from the creation of the renderer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
60 return FrameRenderer::CreateRenderer(*that_.image_, *that_.slice_, isFull);
19bd222283ae uncoupling LayerReadyMessage from the creation of the renderer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
61 }
19bd222283ae uncoupling LayerReadyMessage from the creation of the renderer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
62 };
19bd222283ae uncoupling LayerReadyMessage from the creation of the renderer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
63
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
64 unsigned int sliceIndex_;
1298
8a0a62189f46 replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1270
diff changeset
65 std::unique_ptr<Slice> slice_;
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
66 boost::shared_ptr<Orthanc::ImageAccessor> image_;
739
be9c1530d40a deprecating enum SliceImageQuality
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 732
diff changeset
67 SliceImageQuality effectiveQuality_;
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
68 CachedSliceStatus status_;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
69
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
70 public:
334
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
71 virtual ~CachedSlice()
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
72 {
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
73 }
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
74
726
4f2416d519b4 moving layers, widgets and loaders to Deprecated namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 714
diff changeset
75 virtual bool GetExtent(std::vector<OrthancStone::Vector>& points,
4f2416d519b4 moving layers, widgets and loaders to Deprecated namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 714
diff changeset
76 const OrthancStone::CoordinateSystem3D& viewportSlice)
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
77 {
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
78 // TODO: viewportSlice is not used !!!!
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
79 slice_->GetExtent(points);
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
80 return true;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
81 }
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
82
726
4f2416d519b4 moving layers, widgets and loaders to Deprecated namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 714
diff changeset
83 virtual void ScheduleLayerCreation(const OrthancStone::CoordinateSystem3D& viewportSlice)
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
84 {
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
85 // TODO: viewportSlice is not used !!!!
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
86
330
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
87 // it has already been loaded -> trigger the "layer ready" message immediately otherwise, do nothing now. The LayerReady will be triggered
396
ed7146fa2c98 rename ILayerSource as IVolumeSlicer, and OrthancFrameLayerSource as as DicomSeriesVolumeSlicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 395
diff changeset
88 // once the VolumeSlicer is ready
330
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
89 if (status_ == CachedSliceStatus_ImageLoaded)
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
90 {
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
91 LOG(WARNING) << "ScheduleLayerCreation for CachedSlice (image is loaded): " << slice_->GetOrthancInstanceId();
381
19bd222283ae uncoupling LayerReadyMessage from the creation of the renderer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 380
diff changeset
92
401
f1c769b3a5c2 start getting rid of VolumeSlicerBase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 396
diff changeset
93 RendererFactory factory(*this);
623
42dadae61fa9 renamed IObservable::EmitMessage() as BroadcastMessage()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 439
diff changeset
94 BroadcastMessage(IVolumeSlicer::LayerReadyMessage(*this, factory, slice_->GetGeometry()));
330
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
95 }
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
96 else
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
97 {
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
98 LOG(WARNING) << "ScheduleLayerCreation for CachedSlice (image is not loaded yet): " << slice_->GetOrthancInstanceId();
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
99 }
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
100 }
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
101
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
102 CachedSlice* Clone() const
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
103 {
1066
b537002f83a9 removing broker from deprecated classes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1059
diff changeset
104 CachedSlice* output = new CachedSlice;
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
105 output->sliceIndex_ = sliceIndex_;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
106 output->slice_.reset(slice_->Clone());
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
107 output->image_ = image_;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
108 output->effectiveQuality_ = effectiveQuality_;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
109 output->status_ = status_;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
110
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
111 return output;
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
112 }
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
113
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
114 };
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
115
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
116
1068
04a95ee91327 recovery of OrthancStoneSingleFrame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1066
diff changeset
117 SmartLoader::SmartLoader(boost::shared_ptr<OrthancApiClient> orthancApiClient) :
739
be9c1530d40a deprecating enum SliceImageQuality
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 732
diff changeset
118 imageQuality_(SliceImageQuality_FullPam),
317
b66d13708f40 cleanup
am@osimis.io
parents: 300
diff changeset
119 orthancApiClient_(orthancApiClient)
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
120 {
260
am@osimis.io
parents:
diff changeset
121 }
am@osimis.io
parents:
diff changeset
122
388
20f149669c1f renamed LayerWidget as SliceViewerWidget
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 381
diff changeset
123 void SmartLoader::SetFrameInWidget(SliceViewerWidget& sliceViewer,
334
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
124 size_t layerIndex,
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
125 const std::string& instanceId,
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
126 unsigned int frame)
260
am@osimis.io
parents:
diff changeset
127 {
262
77fdab5b5d6e cleanup + todos
am@osimis.io
parents: 260
diff changeset
128 // TODO: check if this frame has already been loaded or is already being loaded.
77fdab5b5d6e cleanup + todos
am@osimis.io
parents: 260
diff changeset
129 // - if already loaded: create a "clone" that will emit the GeometryReady/ImageReady messages "immediately"
77fdab5b5d6e cleanup + todos
am@osimis.io
parents: 260
diff changeset
130 // (it can not be immediate because Observers needs to register first and this is done after this method returns)
396
ed7146fa2c98 rename ILayerSource as IVolumeSlicer, and OrthancFrameLayerSource as as DicomSeriesVolumeSlicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 395
diff changeset
131 // - if currently loading, we need to return an object that will observe the existing VolumeSlicer and forward
262
77fdab5b5d6e cleanup + todos
am@osimis.io
parents: 260
diff changeset
132 // the messages to its observables
77fdab5b5d6e cleanup + todos
am@osimis.io
parents: 260
diff changeset
133 // in both cases, we must be carefull about objects lifecycle !!!
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
134
1068
04a95ee91327 recovery of OrthancStoneSingleFrame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1066
diff changeset
135 boost::shared_ptr<IVolumeSlicer> layerSource;
334
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
136 std::string sliceKeyId = instanceId + ":" + boost::lexical_cast<std::string>(frame);
330
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
137 SmartLoader::CachedSlice* cachedSlice = NULL;
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
138
322
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
139 if (cachedSlices_.find(sliceKeyId) != cachedSlices_.end()) // && cachedSlices_[sliceKeyId]->status_ == CachedSliceStatus_Loaded)
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
140 {
322
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
141 layerSource.reset(cachedSlices_[sliceKeyId]->Clone());
330
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
142 cachedSlice = dynamic_cast<SmartLoader::CachedSlice*>(layerSource.get());
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
143 }
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
144 else
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
145 {
1068
04a95ee91327 recovery of OrthancStoneSingleFrame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1066
diff changeset
146 layerSource.reset(new DicomSeriesVolumeSlicer);
04a95ee91327 recovery of OrthancStoneSingleFrame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1066
diff changeset
147 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->Connect(orthancApiClient_);
396
ed7146fa2c98 rename ILayerSource as IVolumeSlicer, and OrthancFrameLayerSource as as DicomSeriesVolumeSlicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 395
diff changeset
148 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->SetImageQuality(imageQuality_);
1066
b537002f83a9 removing broker from deprecated classes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1059
diff changeset
149 Register<IVolumeSlicer::GeometryReadyMessage>(*layerSource, &SmartLoader::OnLayerGeometryReady);
b537002f83a9 removing broker from deprecated classes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1059
diff changeset
150 Register<DicomSeriesVolumeSlicer::FrameReadyMessage>(*layerSource, &SmartLoader::OnFrameReady);
b537002f83a9 removing broker from deprecated classes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1059
diff changeset
151 Register<IVolumeSlicer::LayerReadyMessage>(*layerSource, &SmartLoader::OnLayerReady);
396
ed7146fa2c98 rename ILayerSource as IVolumeSlicer, and OrthancFrameLayerSource as as DicomSeriesVolumeSlicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 395
diff changeset
152 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->LoadFrame(instanceId, frame);
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
153 }
260
am@osimis.io
parents:
diff changeset
154
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
155 // make sure that the widget registers the events before we trigger them
388
20f149669c1f renamed LayerWidget as SliceViewerWidget
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 381
diff changeset
156 if (sliceViewer.GetLayerCount() == layerIndex)
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
157 {
1068
04a95ee91327 recovery of OrthancStoneSingleFrame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1066
diff changeset
158 sliceViewer.AddLayer(layerSource);
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
159 }
388
20f149669c1f renamed LayerWidget as SliceViewerWidget
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 381
diff changeset
160 else if (sliceViewer.GetLayerCount() > layerIndex)
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
161 {
1068
04a95ee91327 recovery of OrthancStoneSingleFrame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1066
diff changeset
162 sliceViewer.ReplaceLayer(layerIndex, layerSource);
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
163 }
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
164 else
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
165 {
726
4f2416d519b4 moving layers, widgets and loaders to Deprecated namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 714
diff changeset
166 throw OrthancStone::StoneException(OrthancStone::ErrorCode_CanOnlyAddOneLayerAtATime);
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
167 }
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
168
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
169 if (cachedSlice != NULL)
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
170 {
623
42dadae61fa9 renamed IObservable::EmitMessage() as BroadcastMessage()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 439
diff changeset
171 BroadcastMessage(IVolumeSlicer::GeometryReadyMessage(*cachedSlice));
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
172 }
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
173
260
am@osimis.io
parents:
diff changeset
174 }
am@osimis.io
parents:
diff changeset
175
334
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
176 void SmartLoader::PreloadSlice(const std::string instanceId,
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
177 unsigned int frame)
322
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
178 {
396
ed7146fa2c98 rename ILayerSource as IVolumeSlicer, and OrthancFrameLayerSource as as DicomSeriesVolumeSlicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 395
diff changeset
179 // TODO: reactivate -> need to be able to ScheduleLayerLoading in IVolumeSlicer without calling ScheduleLayerCreation
330
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
180 return;
322
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
181 // TODO: check if it is already in the cache
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
182
330
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
183
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
184
322
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
185 // create the slice in the cache with "empty" data
1066
b537002f83a9 removing broker from deprecated classes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1059
diff changeset
186 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice);
726
4f2416d519b4 moving layers, widgets and loaders to Deprecated namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 714
diff changeset
187 cachedSlice->slice_.reset(new Slice(instanceId, frame));
322
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
188 cachedSlice->status_ = CachedSliceStatus_ScheduledToLoad;
334
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
189 std::string sliceKeyId = instanceId + ":" + boost::lexical_cast<std::string>(frame);
322
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
190
330
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
191 LOG(WARNING) << "Will preload: " << sliceKeyId;
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
192
322
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
193 cachedSlices_[sliceKeyId] = boost::shared_ptr<CachedSlice>(cachedSlice);
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
194
1299
c38c89684d83 replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1279
diff changeset
195 std::unique_ptr<IVolumeSlicer> layerSource(new DicomSeriesVolumeSlicer);
1068
04a95ee91327 recovery of OrthancStoneSingleFrame
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1066
diff changeset
196 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->Connect(orthancApiClient_);
396
ed7146fa2c98 rename ILayerSource as IVolumeSlicer, and OrthancFrameLayerSource as as DicomSeriesVolumeSlicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 395
diff changeset
197 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->SetImageQuality(imageQuality_);
1066
b537002f83a9 removing broker from deprecated classes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1059
diff changeset
198 Register<IVolumeSlicer::GeometryReadyMessage>(*layerSource, &SmartLoader::OnLayerGeometryReady);
b537002f83a9 removing broker from deprecated classes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1059
diff changeset
199 Register<DicomSeriesVolumeSlicer::FrameReadyMessage>(*layerSource, &SmartLoader::OnFrameReady);
b537002f83a9 removing broker from deprecated classes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1059
diff changeset
200 Register<IVolumeSlicer::LayerReadyMessage>(*layerSource, &SmartLoader::OnLayerReady);
396
ed7146fa2c98 rename ILayerSource as IVolumeSlicer, and OrthancFrameLayerSource as as DicomSeriesVolumeSlicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 395
diff changeset
201 dynamic_cast<DicomSeriesVolumeSlicer*>(layerSource.get())->LoadFrame(instanceId, frame);
322
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
202
396
ed7146fa2c98 rename ILayerSource as IVolumeSlicer, and OrthancFrameLayerSource as as DicomSeriesVolumeSlicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 395
diff changeset
203 // keep a ref to the VolumeSlicer until the slice is fully loaded and saved to cache
ed7146fa2c98 rename ILayerSource as IVolumeSlicer, and OrthancFrameLayerSource as as DicomSeriesVolumeSlicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 395
diff changeset
204 preloadingInstances_[sliceKeyId] = boost::shared_ptr<IVolumeSlicer>(layerSource.release());
270
2d64f4d39610 backup (work in progress)
am@osimis.io
parents: 268
diff changeset
205 }
260
am@osimis.io
parents:
diff changeset
206
266
c9cf95b49a86 removed OrthancSlicesLoader::ISliceLoaderObserver; now using standard messages instead
am@osimis.io
parents: 262
diff changeset
207
322
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
208 // void PreloadStudy(const std::string studyId)
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
209 // {
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
210 // /* TODO */
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
211 // }
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
212
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
213 // void PreloadSeries(const std::string seriesId)
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
214 // {
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
215 // /* TODO */
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
216 // }
266
c9cf95b49a86 removed OrthancSlicesLoader::ISliceLoaderObserver; now using standard messages instead
am@osimis.io
parents: 262
diff changeset
217
c9cf95b49a86 removed OrthancSlicesLoader::ISliceLoaderObserver; now using standard messages instead
am@osimis.io
parents: 262
diff changeset
218
396
ed7146fa2c98 rename ILayerSource as IVolumeSlicer, and OrthancFrameLayerSource as as DicomSeriesVolumeSlicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 395
diff changeset
219 void SmartLoader::OnLayerGeometryReady(const IVolumeSlicer::GeometryReadyMessage& message)
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
220 {
406
5d359b115b29 use of callables in OrthancVolumeImage
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 401
diff changeset
221 const DicomSeriesVolumeSlicer& source =
5d359b115b29 use of callables in OrthancVolumeImage
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 401
diff changeset
222 dynamic_cast<const DicomSeriesVolumeSlicer&>(message.GetOrigin());
322
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
223
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
224 // save/replace the slice in cache
726
4f2416d519b4 moving layers, widgets and loaders to Deprecated namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 714
diff changeset
225 const Slice& slice = source.GetSlice(0); // TODO handle GetSliceCount()
334
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
226 std::string sliceKeyId = (slice.GetOrthancInstanceId() + ":" +
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
227 boost::lexical_cast<std::string>(slice.GetFrame()));
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
228
330
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
229 LOG(WARNING) << "Geometry ready: " << sliceKeyId;
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
230
1066
b537002f83a9 removing broker from deprecated classes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1059
diff changeset
231 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice);
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
232 cachedSlice->slice_.reset(slice.Clone());
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
233 cachedSlice->effectiveQuality_ = source.GetImageQuality();
322
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
234 cachedSlice->status_ = CachedSliceStatus_GeometryLoaded;
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
235
322
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
236 cachedSlices_[sliceKeyId] = boost::shared_ptr<CachedSlice>(cachedSlice);
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
237
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
238 // re-emit original Layer message to observers
623
42dadae61fa9 renamed IObservable::EmitMessage() as BroadcastMessage()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 439
diff changeset
239 BroadcastMessage(message);
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
240 }
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
241
334
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
242
396
ed7146fa2c98 rename ILayerSource as IVolumeSlicer, and OrthancFrameLayerSource as as DicomSeriesVolumeSlicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 395
diff changeset
243 void SmartLoader::OnFrameReady(const DicomSeriesVolumeSlicer::FrameReadyMessage& message)
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
244 {
322
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
245 // save/replace the slice in cache
726
4f2416d519b4 moving layers, widgets and loaders to Deprecated namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 714
diff changeset
246 const Slice& slice = message.GetSlice();
334
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
247 std::string sliceKeyId = (slice.GetOrthancInstanceId() + ":" +
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
248 boost::lexical_cast<std::string>(slice.GetFrame()));
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
249
330
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
250 LOG(WARNING) << "Image ready: " << sliceKeyId;
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
251
1066
b537002f83a9 removing broker from deprecated classes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1059
diff changeset
252 boost::shared_ptr<CachedSlice> cachedSlice(new CachedSlice);
395
5f13809f3f76 rename ILayerSource::ImageReadyMessage to OrthancFrameLayerSource::FrameReadyMessage
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 393
diff changeset
253 cachedSlice->image_.reset(Orthanc::Image::Clone(message.GetFrame()));
378
814fa32e2fcc refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
254 cachedSlice->effectiveQuality_ = message.GetImageQuality();
814fa32e2fcc refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 377
diff changeset
255 cachedSlice->slice_.reset(message.GetSlice().Clone());
322
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
256 cachedSlice->status_ = CachedSliceStatus_ImageLoaded;
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
257
322
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
258 cachedSlices_[sliceKeyId] = cachedSlice;
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
259
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
260 // re-emit original Layer message to observers
623
42dadae61fa9 renamed IObservable::EmitMessage() as BroadcastMessage()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 439
diff changeset
261 BroadcastMessage(message);
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
262 }
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
263
334
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
264
396
ed7146fa2c98 rename ILayerSource as IVolumeSlicer, and OrthancFrameLayerSource as as DicomSeriesVolumeSlicer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 395
diff changeset
265 void SmartLoader::OnLayerReady(const IVolumeSlicer::LayerReadyMessage& message)
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
266 {
406
5d359b115b29 use of callables in OrthancVolumeImage
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 401
diff changeset
267 const DicomSeriesVolumeSlicer& source =
5d359b115b29 use of callables in OrthancVolumeImage
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 401
diff changeset
268 dynamic_cast<const DicomSeriesVolumeSlicer&>(message.GetOrigin());
5d359b115b29 use of callables in OrthancVolumeImage
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 401
diff changeset
269
726
4f2416d519b4 moving layers, widgets and loaders to Deprecated namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 714
diff changeset
270 const Slice& slice = source.GetSlice(0); // TODO handle GetSliceCount() ?
334
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
271 std::string sliceKeyId = (slice.GetOrthancInstanceId() + ":" +
c34784e5f299 compatibility fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 330
diff changeset
272 boost::lexical_cast<std::string>(slice.GetFrame()));
322
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
273
330
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
274 LOG(WARNING) << "Layer ready: " << sliceKeyId;
7a364e44fbb4 renamed SetDefaultView in FitContent
am@osimis.io
parents: 322
diff changeset
275
322
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
276 // remove the slice from the preloading slices now that it has been fully loaded and it is referenced in the cache
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
277 if (preloadingInstances_.find(sliceKeyId) != preloadingInstances_.end())
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
278 {
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
279 preloadingInstances_.erase(sliceKeyId);
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
280 }
a902a07769d4 wip: preload slice
am@osimis.io
parents: 318
diff changeset
281
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
282 // re-emit original Layer message to observers
623
42dadae61fa9 renamed IObservable::EmitMessage() as BroadcastMessage()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 439
diff changeset
283 BroadcastMessage(message);
318
3a4ca166fafa ImageAccessor refactoring + implemented Image Cache in SmartLoader
am@osimis.io
parents: 317
diff changeset
284 }
260
am@osimis.io
parents:
diff changeset
285 }