comparison Framework/Deprecated/Widgets/SliceViewerWidget.h @ 732:c35e98d22764

move Deprecated classes to a separate folder
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 21 May 2019 14:27:35 +0200
parents Framework/Widgets/SliceViewerWidget.h@4f2416d519b4
children b537002f83a9 2d8ab34c8c91
comparison
equal deleted inserted replaced
729:529189f399ec 732:c35e98d22764
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-2019 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
24 #include "WorldSceneWidget.h"
25 #include "../Layers/IVolumeSlicer.h"
26 #include "../../Toolbox/Extent2D.h"
27 #include "../../Messages/IObserver.h"
28
29 #include <map>
30
31 namespace Deprecated
32 {
33 class SliceViewerWidget :
34 public WorldSceneWidget,
35 public OrthancStone::IObserver,
36 public OrthancStone::IObservable
37 {
38 public:
39 ORTHANC_STONE_DEFINE_ORIGIN_MESSAGE(__FILE__, __LINE__, GeometryChangedMessage, SliceViewerWidget);
40 ORTHANC_STONE_DEFINE_ORIGIN_MESSAGE(__FILE__, __LINE__, ContentChangedMessage, SliceViewerWidget);
41
42
43 // TODO - Use this message in ReferenceLineSource
44 class DisplayedSliceMessage : public OrthancStone::OriginMessage<SliceViewerWidget>
45 {
46 ORTHANC_STONE_MESSAGE(__FILE__, __LINE__);
47
48 private:
49 const Deprecated::Slice& slice_;
50
51 public:
52 DisplayedSliceMessage(SliceViewerWidget& origin,
53 const Deprecated::Slice& slice) :
54 OriginMessage(origin),
55 slice_(slice)
56 {
57 }
58
59 const Deprecated::Slice& GetSlice() const
60 {
61 return slice_;
62 }
63 };
64
65 private:
66 SliceViewerWidget(const SliceViewerWidget&);
67 SliceViewerWidget& operator=(const SliceViewerWidget&);
68
69 class Scene;
70
71 typedef std::map<const IVolumeSlicer*, size_t> LayersIndex;
72
73 bool started_;
74 LayersIndex layersIndex_;
75 std::vector<IVolumeSlicer*> layers_;
76 std::vector<RenderStyle> styles_;
77 OrthancStone::CoordinateSystem3D plane_;
78 std::auto_ptr<Scene> currentScene_;
79 std::auto_ptr<Scene> pendingScene_;
80 std::vector<bool> changedLayers_;
81
82 bool LookupLayer(size_t& index /* out */,
83 const IVolumeSlicer& layer) const;
84
85 void GetLayerExtent(OrthancStone::Extent2D& extent,
86 IVolumeSlicer& source) const;
87
88 void OnGeometryReady(const IVolumeSlicer::GeometryReadyMessage& message);
89
90 virtual void OnContentChanged(const IVolumeSlicer::ContentChangedMessage& message);
91
92 virtual void OnSliceChanged(const IVolumeSlicer::SliceContentChangedMessage& message);
93
94 virtual void OnLayerReady(const IVolumeSlicer::LayerReadyMessage& message);
95
96 virtual void OnLayerError(const IVolumeSlicer::LayerErrorMessage& message);
97
98 void ObserveLayer(IVolumeSlicer& source);
99
100 void ResetChangedLayers();
101
102 public:
103 SliceViewerWidget(OrthancStone::MessageBroker& broker,
104 const std::string& name);
105
106 virtual OrthancStone::Extent2D GetSceneExtent();
107
108 protected:
109 virtual bool RenderScene(OrthancStone::CairoContext& context,
110 const ViewportGeometry& view);
111
112 void ResetPendingScene();
113
114 void UpdateLayer(size_t index,
115 ILayerRenderer* renderer,
116 const OrthancStone::CoordinateSystem3D& plane);
117
118 void InvalidateAllLayers();
119
120 void InvalidateLayer(size_t layer);
121
122 public:
123 virtual ~SliceViewerWidget();
124
125 size_t AddLayer(IVolumeSlicer* layer); // Takes ownership
126
127 void ReplaceLayer(size_t layerIndex, IVolumeSlicer* layer); // Takes ownership
128
129 void RemoveLayer(size_t layerIndex);
130
131 size_t GetLayerCount() const
132 {
133 return layers_.size();
134 }
135
136 const RenderStyle& GetLayerStyle(size_t layer) const;
137
138 void SetLayerStyle(size_t layer,
139 const RenderStyle& style);
140
141 void SetSlice(const OrthancStone::CoordinateSystem3D& plane);
142
143 const OrthancStone::CoordinateSystem3D& GetSlice() const
144 {
145 return plane_;
146 }
147
148 virtual bool HasAnimation() const
149 {
150 return true;
151 }
152
153 virtual void DoAnimation();
154 };
155 }