Mercurial > hg > orthanc-stone
annotate Framework/Radiography/RadiographyScene.h @ 426:660fe6f6bf4a am-vsol-upgrade
split Export in 2
author | am@osimis.io |
---|---|
date | Thu, 22 Nov 2018 23:15:24 +0100 |
parents | 087237703d63 |
children | 3f9017db1738 |
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" |
408 | 25 #include "../Toolbox/OrthancApiClient.h" |
26 | |
27 | |
28 namespace OrthancStone | |
29 { | |
30 class RadiographyScene : | |
426 | 31 public IObserver, |
32 public IObservable | |
408 | 33 { |
34 public: | |
35 typedef OriginMessage<MessageType_Widget_GeometryChanged, RadiographyScene> GeometryChangedMessage; | |
36 typedef OriginMessage<MessageType_Widget_ContentChanged, RadiographyScene> ContentChangedMessage; | |
37 | |
38 class LayerAccessor : public boost::noncopyable | |
39 { | |
40 private: | |
41 RadiographyScene& scene_; | |
42 size_t index_; | |
410
6decc0ba9da5
rename RadiographyScene::Layer as RadiographyLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
409
diff
changeset
|
43 RadiographyLayer* layer_; |
408 | 44 |
45 public: | |
46 LayerAccessor(RadiographyScene& scene, | |
47 size_t index); | |
48 | |
49 LayerAccessor(RadiographyScene& scene, | |
50 double x, | |
51 double y); | |
52 | |
53 void Invalidate() | |
54 { | |
55 layer_ = NULL; | |
56 } | |
57 | |
58 bool IsValid() const | |
59 { | |
60 return layer_ != NULL; | |
61 } | |
62 | |
63 RadiographyScene& GetScene() const; | |
64 | |
65 size_t GetIndex() const; | |
66 | |
410
6decc0ba9da5
rename RadiographyScene::Layer as RadiographyLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
409
diff
changeset
|
67 RadiographyLayer& GetLayer() const; |
408 | 68 }; |
69 | |
70 | |
71 private: | |
426 | 72 class AlphaLayer; |
408 | 73 class DicomLayer; |
74 | |
410
6decc0ba9da5
rename RadiographyScene::Layer as RadiographyLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
409
diff
changeset
|
75 typedef std::map<size_t, RadiographyLayer*> Layers; |
426 | 76 |
417
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
77 size_t countLayers_; |
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
78 bool hasWindowing_; |
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
79 float windowingCenter_; |
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
80 float windowingWidth_; |
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
81 Layers layers_; |
408 | 82 |
410
6decc0ba9da5
rename RadiographyScene::Layer as RadiographyLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
409
diff
changeset
|
83 RadiographyLayer& RegisterLayer(RadiographyLayer* layer); |
408 | 84 |
85 void OnTagsReceived(const OrthancApiClient::BinaryResponseReadyMessage& message); | |
86 | |
87 void OnFrameReceived(const OrthancApiClient::BinaryResponseReadyMessage& message); | |
88 | |
89 void OnDicomExported(const OrthancApiClient::JsonResponseReadyMessage& message); | |
90 | |
417
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
91 void OnDicomWebReceived(const IWebService::HttpRequestSuccessMessage& message); |
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
92 |
408 | 93 public: |
417
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
94 RadiographyScene(MessageBroker& broker); |
408 | 95 |
96 virtual ~RadiographyScene(); | |
97 | |
98 bool GetWindowing(float& center, | |
99 float& width) const; | |
100 | |
101 void GetWindowingWithDefault(float& center, | |
102 float& width) const; | |
103 | |
104 void SetWindowing(float center, | |
105 float width); | |
106 | |
410
6decc0ba9da5
rename RadiographyScene::Layer as RadiographyLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
409
diff
changeset
|
107 RadiographyLayer& LoadText(const Orthanc::Font& font, |
6decc0ba9da5
rename RadiographyScene::Layer as RadiographyLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
409
diff
changeset
|
108 const std::string& utf8); |
408 | 109 |
410
6decc0ba9da5
rename RadiographyScene::Layer as RadiographyLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
409
diff
changeset
|
110 RadiographyLayer& LoadTestBlock(unsigned int width, |
6decc0ba9da5
rename RadiographyScene::Layer as RadiographyLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
409
diff
changeset
|
111 unsigned int height); |
408 | 112 |
417
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
113 RadiographyLayer& LoadDicomFrame(OrthancApiClient& orthanc, |
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
114 const std::string& instance, |
410
6decc0ba9da5
rename RadiographyScene::Layer as RadiographyLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
409
diff
changeset
|
115 unsigned int frame, |
6decc0ba9da5
rename RadiographyScene::Layer as RadiographyLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
409
diff
changeset
|
116 bool httpCompression); |
408 | 117 |
417
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
118 RadiographyLayer& LoadDicomWebFrame(IWebService& web); |
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
119 |
425 | 120 void RemoveLayer(size_t layerIndex); |
121 | |
122 size_t GetLayerCount() | |
123 { | |
124 return countLayers_; | |
125 } | |
126 | |
127 RadiographyLayer& GetLayer(size_t layerIndex); | |
128 | |
408 | 129 Extent2D GetSceneExtent() const; |
130 | |
131 void Render(Orthanc::ImageAccessor& buffer, | |
409 | 132 const AffineTransform2D& viewTransform, |
408 | 133 ImageInterpolation interpolation) const; |
134 | |
135 bool LookupLayer(size_t& index /* out */, | |
136 double x, | |
137 double y) const; | |
138 | |
139 void DrawBorder(CairoContext& context, | |
140 unsigned int layer, | |
141 double zoom); | |
142 | |
143 void GetRange(float& minValue, | |
144 float& maxValue) const; | |
145 | |
146 // Export using PAM is faster than using PNG, but requires Orthanc | |
147 // core >= 1.4.3 | |
417
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
148 void ExportDicom(OrthancApiClient& orthanc, |
aee3d7941c9b
preparing to load images using DICOMweb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
410
diff
changeset
|
149 const Orthanc::DicomMap& dicom, |
426 | 150 const std::string& parentOrthancId, |
408 | 151 double pixelSpacingX, |
152 double pixelSpacingY, | |
153 bool invert, | |
154 ImageInterpolation interpolation, | |
155 bool usePam); | |
426 | 156 |
157 // temporary version used by VSOL because we need to send the same request at another url | |
158 void Export(Json::Value& createDicomRequestContent, | |
159 const Orthanc::DicomMap& dicom, | |
160 double pixelSpacingX, | |
161 double pixelSpacingY, | |
162 bool invert, | |
163 ImageInterpolation interpolation, | |
164 bool usePam); | |
408 | 165 }; |
166 } |