Mercurial > hg > orthanc-stone
annotate Framework/Radiography/RadiographyScene.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 | aee3d7941c9b |
children |
rev | line source |
---|---|
408 | 1 /** |
2 * Stone of Orthanc | |
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics | |
4 * Department, University Hospital of Liege, Belgium | |
5 * Copyright (C) 2017-2018 Osimis S.A., Belgium | |
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. | |
16 * | |
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 | |
410
6decc0ba9da5
rename RadiographyScene::Layer as RadiographyLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
409
diff
changeset
|
24 #include "RadiographyLayer.h" |
421
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
417
diff
changeset
|
25 #include <Framework/Layers/IVolumeSlicer.h> |
408 | 26 #include "../Toolbox/OrthancApiClient.h" |
27 | |
28 | |
29 namespace OrthancStone | |
30 { | |
421
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
417
diff
changeset
|
31 class IVolumeSlicer; |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
417
diff
changeset
|
32 |
408 | 33 class RadiographyScene : |
34 public IObserver, | |
35 public IObservable | |
36 { | |
37 public: | |
38 typedef OriginMessage<MessageType_Widget_GeometryChanged, RadiographyScene> GeometryChangedMessage; | |
39 typedef OriginMessage<MessageType_Widget_ContentChanged, RadiographyScene> ContentChangedMessage; | |
40 | |
41 class LayerAccessor : public boost::noncopyable | |
42 { | |
43 private: | |
44 RadiographyScene& scene_; | |
45 size_t index_; | |
410
6decc0ba9da5
rename RadiographyScene::Layer as RadiographyLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
409
diff
changeset
|
46 RadiographyLayer* layer_; |
408 | 47 |
48 public: | |
49 LayerAccessor(RadiographyScene& scene, | |
50 size_t index); | |
51 | |
52 LayerAccessor(RadiographyScene& scene, | |
53 double x, | |
54 double y); | |
55 | |
56 void Invalidate() | |
57 { | |
58 layer_ = NULL; | |
59 } | |
60 | |
61 bool IsValid() const | |
62 { | |
63 return layer_ != NULL; | |
64 } | |
65 | |
66 RadiographyScene& GetScene() const; | |
67 | |
68 size_t GetIndex() const; | |
69 | |
410
6decc0ba9da5
rename RadiographyScene::Layer as RadiographyLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
409
diff
changeset
|
70 RadiographyLayer& GetLayer() const; |
408 | 71 }; |
72 | |
73 | |
74 private: | |
75 class AlphaLayer; | |
76 class DicomLayer; | |
77 | |
410
6decc0ba9da5
rename RadiographyScene::Layer as RadiographyLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
409
diff
changeset
|
78 typedef std::map<size_t, RadiographyLayer*> Layers; |
408 | 79 |
417
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
80 size_t countLayers_; |
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
81 bool hasWindowing_; |
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
82 float windowingCenter_; |
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
83 float windowingWidth_; |
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
84 Layers layers_; |
408 | 85 |
421
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
417
diff
changeset
|
86 std::map<const IVolumeSlicer*, size_t> layersIndexBySlice_; |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
417
diff
changeset
|
87 |
410
6decc0ba9da5
rename RadiographyScene::Layer as RadiographyLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
409
diff
changeset
|
88 RadiographyLayer& RegisterLayer(RadiographyLayer* layer); |
408 | 89 |
90 void OnTagsReceived(const OrthancApiClient::BinaryResponseReadyMessage& message); | |
91 | |
92 void OnFrameReceived(const OrthancApiClient::BinaryResponseReadyMessage& message); | |
93 | |
94 void OnDicomExported(const OrthancApiClient::JsonResponseReadyMessage& message); | |
95 | |
417
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
96 void OnDicomWebReceived(const IWebService::HttpRequestSuccessMessage& message); |
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
97 |
421
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
417
diff
changeset
|
98 void OnTagsReady(const IVolumeSlicer::TagsReadyMessage& message); |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
417
diff
changeset
|
99 |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
417
diff
changeset
|
100 void OnImageReady(const IVolumeSlicer::FrameReadyMessage& message); |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
417
diff
changeset
|
101 |
408 | 102 public: |
417
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
103 RadiographyScene(MessageBroker& broker); |
408 | 104 |
105 virtual ~RadiographyScene(); | |
106 | |
107 bool GetWindowing(float& center, | |
108 float& width) const; | |
109 | |
110 void GetWindowingWithDefault(float& center, | |
111 float& width) const; | |
112 | |
113 void SetWindowing(float center, | |
114 float width); | |
115 | |
410
6decc0ba9da5
rename RadiographyScene::Layer as RadiographyLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
409
diff
changeset
|
116 RadiographyLayer& LoadText(const Orthanc::Font& font, |
6decc0ba9da5
rename RadiographyScene::Layer as RadiographyLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
409
diff
changeset
|
117 const std::string& utf8); |
408 | 118 |
410
6decc0ba9da5
rename RadiographyScene::Layer as RadiographyLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
409
diff
changeset
|
119 RadiographyLayer& LoadTestBlock(unsigned int width, |
6decc0ba9da5
rename RadiographyScene::Layer as RadiographyLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
409
diff
changeset
|
120 unsigned int height); |
408 | 121 |
417
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
122 RadiographyLayer& LoadDicomFrame(OrthancApiClient& orthanc, |
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
123 const std::string& instance, |
410
6decc0ba9da5
rename RadiographyScene::Layer as RadiographyLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
409
diff
changeset
|
124 unsigned int frame, |
6decc0ba9da5
rename RadiographyScene::Layer as RadiographyLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
409
diff
changeset
|
125 bool httpCompression); |
408 | 126 |
417
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
127 RadiographyLayer& LoadDicomWebFrame(IWebService& web); |
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
128 |
421
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
417
diff
changeset
|
129 RadiographyLayer& SetFrame(IVolumeSlicer* slice); |
f87f28624b96
tentative to make SmartLoader and RadiographyScene work together (not really working)
am@osimis.io
parents:
417
diff
changeset
|
130 |
408 | 131 Extent2D GetSceneExtent() const; |
132 | |
133 void Render(Orthanc::ImageAccessor& buffer, | |
409 | 134 const AffineTransform2D& viewTransform, |
408 | 135 ImageInterpolation interpolation) const; |
136 | |
137 bool LookupLayer(size_t& index /* out */, | |
138 double x, | |
139 double y) const; | |
140 | |
141 void DrawBorder(CairoContext& context, | |
142 unsigned int layer, | |
143 double zoom); | |
144 | |
145 void GetRange(float& minValue, | |
146 float& maxValue) const; | |
147 | |
148 // Export using PAM is faster than using PNG, but requires Orthanc | |
149 // core >= 1.4.3 | |
417
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
150 void ExportDicom(OrthancApiClient& orthanc, |
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
151 const Orthanc::DicomMap& dicom, |
408 | 152 double pixelSpacingX, |
153 double pixelSpacingY, | |
154 bool invert, | |
155 ImageInterpolation interpolation, | |
156 bool usePam); | |
157 }; | |
158 } |