annotate Framework/Radiography/RadiographyWidget.h @ 1279:7ec8fea061b9 broker

integration mainline->broker
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 04 Feb 2020 15:20:08 +0100
parents 0ca50d275b9a 2d8ab34c8c91
children c38c89684d83
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
413
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 /**
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2 * Stone of Orthanc
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
4 * Department, University Hospital of Liege, Belgium
1270
2d8ab34c8c91 upgrade to year 2020
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1237
diff changeset
5 * Copyright (C) 2017-2020 Osimis S.A., Belgium
413
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
6 *
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
7 * This program is free software: you can redistribute it and/or
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8 * modify it under the terms of the GNU Affero General Public License
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 * as published by the Free Software Foundation, either version 3 of
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 * the License, or (at your option) any later version.
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 *
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful, but
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15 * Affero General Public License for more details.
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16 *
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17 * You should have received a copy of the GNU Affero General Public License
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 **/
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
22 #pragma once
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23
732
c35e98d22764 move Deprecated classes to a separate folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 726
diff changeset
24 #include "../Deprecated/Widgets/WorldSceneWidget.h"
1066
b537002f83a9 removing broker from deprecated classes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 732
diff changeset
25 #include "../Messages/ObserverBase.h"
413
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
26 #include "RadiographyScene.h"
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
27
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
28
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
29 namespace OrthancStone
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
30 {
492
64d90190a08c template GetLayer
Alain Mazy <alain@mazy.be>
parents: 440
diff changeset
31 class RadiographyMaskLayer;
64d90190a08c template GetLayer
Alain Mazy <alain@mazy.be>
parents: 440
diff changeset
32
413
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
33 class RadiographyWidget :
726
4f2416d519b4 moving layers, widgets and loaders to Deprecated namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 492
diff changeset
34 public Deprecated::WorldSceneWidget,
1224
37bc7f115f81 integration mainline->broker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1200 1220
diff changeset
35 public ObserverBase<RadiographyWidget>,
1220
9ee6b28f53e8 RadiographyTextLayer: support multiple fonts
Alain Mazy <alain@mazy.be>
parents: 1199
diff changeset
36 public IObservable
413
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
37 {
1220
9ee6b28f53e8 RadiographyTextLayer: support multiple fonts
Alain Mazy <alain@mazy.be>
parents: 1199
diff changeset
38 public:
9ee6b28f53e8 RadiographyTextLayer: support multiple fonts
Alain Mazy <alain@mazy.be>
parents: 1199
diff changeset
39 ORTHANC_STONE_DEFINE_ORIGIN_MESSAGE(__FILE__, __LINE__, SelectionChangedMessage, RadiographyWidget);
9ee6b28f53e8 RadiographyTextLayer: support multiple fonts
Alain Mazy <alain@mazy.be>
parents: 1199
diff changeset
40
413
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
41 private:
428
751fb354149e ability to change the scene of the RadiographyWidget
am@osimis.io
parents: 413
diff changeset
42 boost::shared_ptr<RadiographyScene> scene_;
413
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
43 std::auto_ptr<Orthanc::ImageAccessor> floatBuffer_;
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
44 std::auto_ptr<CairoSurface> cairoBuffer_;
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
45 bool invert_;
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
46 ImageInterpolation interpolation_;
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
47 bool hasSelection_;
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
48 size_t selectedLayer_;
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
49
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
50 bool RenderInternal(unsigned int width,
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
51 unsigned int height,
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
52 ImageInterpolation interpolation);
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
53
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
54 protected:
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
55 virtual Extent2D GetSceneExtent()
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
56 {
428
751fb354149e ability to change the scene of the RadiographyWidget
am@osimis.io
parents: 413
diff changeset
57 return scene_->GetSceneExtent();
413
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
58 }
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
59
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
60 virtual bool RenderScene(CairoContext& context,
726
4f2416d519b4 moving layers, widgets and loaders to Deprecated namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 492
diff changeset
61 const Deprecated::ViewportGeometry& view);
413
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
62
432
4eb96c6b4e96 improved handling of MONOCHROME1, background and invertion
am@osimis.io
parents: 428
diff changeset
63 virtual void RenderBackground(Orthanc::ImageAccessor& image, float minValue, float maxValue);
4eb96c6b4e96 improved handling of MONOCHROME1, background and invertion
am@osimis.io
parents: 428
diff changeset
64
4eb96c6b4e96 improved handling of MONOCHROME1, background and invertion
am@osimis.io
parents: 428
diff changeset
65 bool IsInvertedInternal() const;
4eb96c6b4e96 improved handling of MONOCHROME1, background and invertion
am@osimis.io
parents: 428
diff changeset
66
413
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
67 public:
1066
b537002f83a9 removing broker from deprecated classes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 732
diff changeset
68 RadiographyWidget(boost::shared_ptr<RadiographyScene> scene, // TODO: check how we can avoid boost::shared_ptr here since we don't want them in the public API (app is keeping a boost::shared_ptr to this right now)
413
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
69 const std::string& name);
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
70
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
71 RadiographyScene& GetScene() const
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
72 {
428
751fb354149e ability to change the scene of the RadiographyWidget
am@osimis.io
parents: 413
diff changeset
73 return *scene_;
413
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
74 }
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
75
428
751fb354149e ability to change the scene of the RadiographyWidget
am@osimis.io
parents: 413
diff changeset
76 void SetScene(boost::shared_ptr<RadiographyScene> scene);
751fb354149e ability to change the scene of the RadiographyWidget
am@osimis.io
parents: 413
diff changeset
77
1199
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
78 void Select(size_t layer);
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
79
1220
9ee6b28f53e8 RadiographyTextLayer: support multiple fonts
Alain Mazy <alain@mazy.be>
parents: 1199
diff changeset
80 void Unselect();
413
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
81
1199
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
82 template<typename LayerType> bool SelectLayerByType(size_t index = 0);
492
64d90190a08c template GetLayer
Alain Mazy <alain@mazy.be>
parents: 440
diff changeset
83
1237
c14fde4a595c RadiographyWidget: constness
Alain Mazy <alain@mazy.be>
parents: 1220
diff changeset
84 bool LookupSelectedLayer(size_t& layer) const;
413
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
85
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
86 void OnGeometryChanged(const RadiographyScene::GeometryChangedMessage& message);
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
87
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
88 void OnContentChanged(const RadiographyScene::ContentChangedMessage& message);
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
89
1131
4663f158c748 RadiographyWidget is now notified when a layer is removed from the scene
Alain Mazy <alain@mazy.be>
parents: 732
diff changeset
90 void OnLayerRemoved(const RadiographyScene::LayerRemovedMessage& message);
4663f158c748 RadiographyWidget is now notified when a layer is removed from the scene
Alain Mazy <alain@mazy.be>
parents: 732
diff changeset
91
413
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
92 void SetInvert(bool invert);
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
93
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
94 void SwitchInvert();
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
95
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
96 bool IsInverted() const
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
97 {
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
98 return invert_;
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
99 }
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
100
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
101 void SetInterpolation(ImageInterpolation interpolation);
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
102
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
103 ImageInterpolation GetInterpolation() const
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
104 {
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
105 return interpolation_;
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
106 }
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
107 };
1199
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
108
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
109 template<typename LayerType> bool RadiographyWidget::SelectLayerByType(size_t index)
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
110 {
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
111 std::vector<size_t> layerIndexes;
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
112 size_t count = 0;
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
113 scene_->GetLayersIndexes(layerIndexes);
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
114
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
115 for (size_t i = 0; i < layerIndexes.size(); ++i)
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
116 {
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
117 const LayerType* typedLayer = dynamic_cast<const LayerType*>(&(scene_->GetLayer(layerIndexes[i])));
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
118 if (typedLayer != NULL)
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
119 {
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
120 if (count == index)
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
121 {
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
122 Select(layerIndexes[i]);
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
123 return true;
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
124 }
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
125 count++;
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
126 }
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
127 }
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
128
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
129 return false;
922d2e61aa5d RadiograpyScene: can now remove any layer + new key wrappers for Delete/Backspace
Alain Mazy <alain@mazy.be>
parents: 1131
diff changeset
130 }
413
18b707fb8620 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
131 }