Mercurial > hg > orthanc-stone
annotate Framework/Layers/OrthancFrameLayerSource.cpp @ 89:f244018a4e4b wasm
BUGGY- trying to remove IVolumeSlicesObserver
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 26 May 2017 18:27:59 +0200 |
parents | 02c3a7a4938f |
children | 64e60018943f |
rev | line source |
---|---|
65
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1 /** |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
2 * Stone of Orthanc |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
4 * Department, University Hospital of Liege, Belgium |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
5 * Copyright (C) 2017 Osimis, Belgium |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
6 * |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
7 * This program is free software: you can redistribute it and/or |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
8 * modify it under the terms of the GNU Affero General Public License |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
9 * as published by the Free Software Foundation, either version 3 of |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
10 * the License, or (at your option) any later version. |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
11 * |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
12 * This program is distributed in the hope that it will be useful, but |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
13 * WITHOUT ANY WARRANTY; without even the implied warranty of |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
15 * Affero General Public License for more details. |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
16 * |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
17 * You should have received a copy of the GNU Affero General Public License |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
19 **/ |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
20 |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
21 |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
22 #include "OrthancFrameLayerSource.h" |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
23 |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
24 #include "FrameRenderer.h" |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
25 #include "../../Resources/Orthanc/Core/Images/PngReader.h" |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
26 #include "../../Resources/Orthanc/Core/Logging.h" |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
27 #include "../../Resources/Orthanc/Core/OrthancException.h" |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
28 #include "../Toolbox/DicomFrameConverter.h" |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
29 |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
30 #include <boost/lexical_cast.hpp> |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
31 |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
32 |
89
f244018a4e4b
BUGGY- trying to remove IVolumeSlicesObserver
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
33 // TODO REMOVE THIS |
f244018a4e4b
BUGGY- trying to remove IVolumeSlicesObserver
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
34 #include "../Widgets/LayerWidget.h" |
f244018a4e4b
BUGGY- trying to remove IVolumeSlicesObserver
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
35 |
65
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
36 namespace OrthancStone |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
37 { |
77 | 38 void OrthancFrameLayerSource::NotifyGeometryReady(const OrthancSlicesLoader& loader) |
65
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
39 { |
89
f244018a4e4b
BUGGY- trying to remove IVolumeSlicesObserver
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
40 #if 0 |
77 | 41 if (loader.GetSliceCount() > 0) |
65
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
42 { |
77 | 43 // Make sure all the slices are parallel. TODO Alleviate this constraint |
44 for (size_t i = 1; i < loader.GetSliceCount(); i++) | |
45 { | |
46 if (!GeometryToolbox::IsParallel(loader.GetSlice(i).GetGeometry().GetNormal(), | |
47 loader.GetSlice(0).GetGeometry().GetNormal())) | |
48 { | |
49 LayerSourceBase::NotifyGeometryError(); | |
50 return; | |
51 } | |
52 } | |
65
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
53 } |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
54 |
85 | 55 LayerSourceBase::NotifyGeometryReady(); |
89
f244018a4e4b
BUGGY- trying to remove IVolumeSlicesObserver
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
56 #endif |
77 | 57 |
89
f244018a4e4b
BUGGY- trying to remove IVolumeSlicesObserver
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
58 // TODO REMOVE THIS |
f244018a4e4b
BUGGY- trying to remove IVolumeSlicesObserver
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
59 /*if (GetObserver() != NULL) |
f244018a4e4b
BUGGY- trying to remove IVolumeSlicesObserver
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
60 { |
f244018a4e4b
BUGGY- trying to remove IVolumeSlicesObserver
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
61 dynamic_cast<LayerWidget*>(GetObserver())->SetSlice(loader.GetSlice(0).GetGeometry()); |
f244018a4e4b
BUGGY- trying to remove IVolumeSlicesObserver
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
62 }*/ |
77 | 63 } |
65
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
64 |
77 | 65 void OrthancFrameLayerSource::NotifyGeometryError(const OrthancSlicesLoader& loader) |
66 { | |
89
f244018a4e4b
BUGGY- trying to remove IVolumeSlicesObserver
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
67 #if 0 |
77 | 68 LayerSourceBase::NotifyGeometryError(); |
89
f244018a4e4b
BUGGY- trying to remove IVolumeSlicesObserver
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
69 #endif |
77 | 70 } |
71 | |
72 void OrthancFrameLayerSource::NotifySliceImageReady(const OrthancSlicesLoader& loader, | |
73 unsigned int sliceIndex, | |
74 const Slice& slice, | |
75 Orthanc::ImageAccessor* image) | |
76 { | |
77 LayerSourceBase::NotifyLayerReady(FrameRenderer::CreateRenderer(image, slice, true), slice); | |
78 } | |
79 | |
80 void OrthancFrameLayerSource::NotifySliceImageError(const OrthancSlicesLoader& loader, | |
81 unsigned int sliceIndex, | |
82 const Slice& slice) | |
83 { | |
84 LayerSourceBase::NotifyLayerError(slice.GetGeometry()); | |
85 } | |
65
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
86 |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
87 OrthancFrameLayerSource::OrthancFrameLayerSource(IWebService& orthanc, |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
88 const std::string& instanceId, |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
89 unsigned int frame) : |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
90 instanceId_(instanceId), |
66 | 91 frame_(frame), |
89
f244018a4e4b
BUGGY- trying to remove IVolumeSlicesObserver
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
86
diff
changeset
|
92 loader_(*this, orthanc) |
66 | 93 { |
86
02c3a7a4938f
removing of the Start() mechanism
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
94 loader_.ScheduleLoadInstance(instanceId_, frame_); |
66 | 95 } |
96 | |
97 | |
65
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
98 bool OrthancFrameLayerSource::GetExtent(double& x1, |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
99 double& y1, |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
100 double& x2, |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
101 double& y2, |
85 | 102 const SliceGeometry& viewportSlice) |
65
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
103 { |
77 | 104 bool ok = false; |
105 | |
85 | 106 if (loader_.IsGeometryReady()) |
65
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
107 { |
77 | 108 double tx1, ty1, tx2, ty2; |
109 | |
110 for (size_t i = 0; i < loader_.GetSliceCount(); i++) | |
111 { | |
112 if (FrameRenderer::ComputeFrameExtent(tx1, ty1, tx2, ty2, viewportSlice, loader_.GetSlice(i))) | |
113 { | |
114 if (ok) | |
115 { | |
116 x1 = std::min(x1, tx1); | |
117 y1 = std::min(y1, ty1); | |
118 x2 = std::min(x2, tx2); | |
119 y2 = std::min(y2, ty2); | |
120 } | |
121 else | |
122 { | |
123 // This is the first slice parallel to the viewport | |
124 x1 = tx1; | |
125 y1 = ty1; | |
126 x2 = tx2; | |
127 y2 = ty2; | |
128 ok = true; | |
129 } | |
130 } | |
131 } | |
65
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
132 } |
77 | 133 |
134 return ok; | |
65
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
135 } |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
136 |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
137 |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
138 void OrthancFrameLayerSource::ScheduleLayerCreation(const SliceGeometry& viewportSlice) |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
139 { |
77 | 140 size_t index; |
141 | |
86
02c3a7a4938f
removing of the Start() mechanism
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
142 if (loader_.IsGeometryReady()) |
65
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
143 { |
86
02c3a7a4938f
removing of the Start() mechanism
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
144 if (loader_.LookupSlice(index, viewportSlice)) |
02c3a7a4938f
removing of the Start() mechanism
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
145 { |
02c3a7a4938f
removing of the Start() mechanism
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
146 loader_.ScheduleLoadSliceImage(index); |
02c3a7a4938f
removing of the Start() mechanism
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
147 } |
02c3a7a4938f
removing of the Start() mechanism
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
148 else |
02c3a7a4938f
removing of the Start() mechanism
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
149 { |
02c3a7a4938f
removing of the Start() mechanism
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
150 LayerSourceBase::NotifyLayerError(viewportSlice); |
02c3a7a4938f
removing of the Start() mechanism
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
151 } |
65
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
152 } |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
153 } |
885932a893de
OrthancFrameLayerSource
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
154 } |