Mercurial > hg > orthanc-stone
comparison Applications/Samples/Common/RtViewerApp.cpp @ 1903:c7bc9e1776a6
fix rendering of RT sample
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 31 Jan 2022 18:00:10 +0100 |
parents | b3c08e607d9f |
children | 5a434f5889f8 |
comparison
equal
deleted
inserted
replaced
1902:1cfd602de69d | 1903:c7bc9e1776a6 |
---|---|
23 #include "RtViewerApp.h" | 23 #include "RtViewerApp.h" |
24 #include "RtViewerView.h" | 24 #include "RtViewerView.h" |
25 #include "SampleHelpers.h" | 25 #include "SampleHelpers.h" |
26 | 26 |
27 // Stone of Orthanc | 27 // Stone of Orthanc |
28 #include "../../../OrthancStone/Sources/StoneInitialization.h" | 28 #include "../../../OrthancStone/Sources/Oracle/GetOrthancWebViewerJpegCommand.h" |
29 #include "../../../OrthancStone/Sources/Scene2D/CairoCompositor.h" | 29 #include "../../../OrthancStone/Sources/Scene2D/CairoCompositor.h" |
30 #include "../../../OrthancStone/Sources/Scene2D/ColorTextureSceneLayer.h" | 30 #include "../../../OrthancStone/Sources/Scene2D/ColorTextureSceneLayer.h" |
31 #include "../../../OrthancStone/Sources/Scene2D/GrayscaleStyleConfigurator.h" | |
32 #include "../../../OrthancStone/Sources/Scene2D/LookupTableStyleConfigurator.h" | |
31 #include "../../../OrthancStone/Sources/Scene2D/OpenGLCompositor.h" | 33 #include "../../../OrthancStone/Sources/Scene2D/OpenGLCompositor.h" |
32 #include "../../../OrthancStone/Sources/Scene2D/PanSceneTracker.h" | 34 #include "../../../OrthancStone/Sources/Scene2D/PanSceneTracker.h" |
35 #include "../../../OrthancStone/Sources/Scene2D/RotateSceneTracker.h" | |
33 #include "../../../OrthancStone/Sources/Scene2D/ZoomSceneTracker.h" | 36 #include "../../../OrthancStone/Sources/Scene2D/ZoomSceneTracker.h" |
34 #include "../../../OrthancStone/Sources/Scene2D/RotateSceneTracker.h" | 37 #include "../../../OrthancStone/Sources/Scene2DViewport/CreateAngleMeasureTracker.h" |
35 #include "../../../OrthancStone/Sources/Scene2DViewport/UndoStack.h" | |
36 #include "../../../OrthancStone/Sources/Scene2DViewport/CreateLineMeasureTracker.h" | 38 #include "../../../OrthancStone/Sources/Scene2DViewport/CreateLineMeasureTracker.h" |
37 #include "../../../OrthancStone/Sources/Scene2DViewport/CreateAngleMeasureTracker.h" | |
38 #include "../../../OrthancStone/Sources/Scene2DViewport/IFlexiblePointerTracker.h" | 39 #include "../../../OrthancStone/Sources/Scene2DViewport/IFlexiblePointerTracker.h" |
39 #include "../../../OrthancStone/Sources/Scene2DViewport/MeasureTool.h" | 40 #include "../../../OrthancStone/Sources/Scene2DViewport/MeasureTool.h" |
40 #include "../../../OrthancStone/Sources/Scene2DViewport/PredeclaredTypes.h" | 41 #include "../../../OrthancStone/Sources/Scene2DViewport/PredeclaredTypes.h" |
42 #include "../../../OrthancStone/Sources/Scene2DViewport/UndoStack.h" | |
43 #include "../../../OrthancStone/Sources/StoneException.h" | |
44 #include "../../../OrthancStone/Sources/StoneInitialization.h" | |
45 #include "../../../OrthancStone/Sources/Volumes/DicomVolumeImageMPRSlicer.h" | |
41 #include "../../../OrthancStone/Sources/Volumes/VolumeSceneLayerSource.h" | 46 #include "../../../OrthancStone/Sources/Volumes/VolumeSceneLayerSource.h" |
42 #include "../../../OrthancStone/Sources/Oracle/GetOrthancWebViewerJpegCommand.h" | |
43 #include "../../../OrthancStone/Sources/Scene2D/GrayscaleStyleConfigurator.h" | |
44 #include "../../../OrthancStone/Sources/Scene2D/LookupTableStyleConfigurator.h" | |
45 #include "../../../OrthancStone/Sources/Volumes/DicomVolumeImageMPRSlicer.h" | |
46 #include "../../../OrthancStone/Sources/StoneException.h" | |
47 | 47 |
48 // Orthanc | 48 // Orthanc |
49 #include <Logging.h> | 49 #include <Logging.h> |
50 #include <OrthancException.h> | 50 #include <OrthancException.h> |
51 | 51 |
82 | 82 |
83 RtViewerApp::RtViewerApp() : | 83 RtViewerApp::RtViewerApp() : |
84 // Create the volumes that will be filled later on | 84 // Create the volumes that will be filled later on |
85 ctVolume_(boost::make_shared<DicomVolumeImage>()), | 85 ctVolume_(boost::make_shared<DicomVolumeImage>()), |
86 doseVolume_(boost::make_shared<DicomVolumeImage>()), | 86 doseVolume_(boost::make_shared<DicomVolumeImage>()), |
87 undoStack_(new UndoStack) | 87 undoStack_(new UndoStack), |
88 isFirstSlice_(true) | |
88 { | 89 { |
89 } | 90 } |
90 | 91 |
91 boost::shared_ptr<RtViewerApp> RtViewerApp::Create() | 92 boost::shared_ptr<RtViewerApp> RtViewerApp::Create() |
92 { | 93 { |
140 */ | 141 */ |
141 | 142 |
142 Register<DicomVolumeImage::GeometryReadyMessage> | 143 Register<DicomVolumeImage::GeometryReadyMessage> |
143 (*ctLoader_, &RtViewerApp::HandleGeometryReady); | 144 (*ctLoader_, &RtViewerApp::HandleGeometryReady); |
144 | 145 |
145 Register<OrthancSeriesVolumeProgressiveLoader::VolumeImageReadyInHighQuality> | |
146 (*ctLoader_, &RtViewerApp::HandleCTLoaded); | |
147 | |
148 Register<DicomVolumeImage::ContentUpdatedMessage> | 146 Register<DicomVolumeImage::ContentUpdatedMessage> |
149 (*ctLoader_, &RtViewerApp::HandleCTContentUpdated); | 147 (*ctLoader_, &RtViewerApp::HandleCTContentUpdated); |
150 | 148 |
151 Register<DicomVolumeImage::ContentUpdatedMessage> | 149 Register<DicomVolumeImage::ContentUpdatedMessage> |
152 (*doseLoader_, &RtViewerApp::HandleDoseLoaded); | 150 (*doseLoader_, &RtViewerApp::HandleDoseLoaded); |
195 } | 193 } |
196 } | 194 } |
197 | 195 |
198 void RtViewerApp::HandleGeometryReady(const DicomVolumeImage::GeometryReadyMessage& message) | 196 void RtViewerApp::HandleGeometryReady(const DicomVolumeImage::GeometryReadyMessage& message) |
199 { | 197 { |
198 UpdateLayersInAllViews(); | |
199 } | |
200 | |
201 void RtViewerApp::UpdateLayersInAllViews() | |
202 { | |
200 for (size_t i = 0; i < views_.size(); ++i) | 203 for (size_t i = 0; i < views_.size(); ++i) |
201 { | 204 { |
202 views_[i]->RetrieveGeometry(); | |
203 } | |
204 FitContent(); | |
205 UpdateLayersInAllViews(); | |
206 } | |
207 | |
208 void RtViewerApp::FitContent() | |
209 { | |
210 for (size_t i = 0; i < views_.size(); ++i) | |
211 { | |
212 views_[i]->FitContent(); | |
213 } | |
214 } | |
215 | |
216 void RtViewerApp::UpdateLayersInAllViews() | |
217 { | |
218 for (size_t i = 0; i < views_.size(); ++i) | |
219 { | |
220 views_[i]->UpdateLayers(); | 205 views_[i]->UpdateLayers(); |
221 } | 206 } |
222 } | 207 } |
223 | 208 |
224 void RtViewerApp::HandleCTLoaded(const OrthancSeriesVolumeProgressiveLoader::VolumeImageReadyInHighQuality& message) | |
225 { | |
226 for (size_t i = 0; i < views_.size(); ++i) | |
227 { | |
228 views_[i]->RetrieveGeometry(); | |
229 } | |
230 UpdateLayersInAllViews(); | |
231 } | |
232 | |
233 void RtViewerApp::HandleCTContentUpdated(const DicomVolumeImage::ContentUpdatedMessage& message) | 209 void RtViewerApp::HandleCTContentUpdated(const DicomVolumeImage::ContentUpdatedMessage& message) |
234 { | 210 { |
211 if (isFirstSlice_) | |
212 { | |
213 for (size_t i = 0; i < views_.size(); ++i) | |
214 { | |
215 views_[i]->RetrieveGeometry(); | |
216 views_[i]->FitContent(); | |
217 } | |
218 | |
219 isFirstSlice_ = false; | |
220 } | |
221 | |
235 UpdateLayersInAllViews(); | 222 UpdateLayersInAllViews(); |
236 } | 223 } |
237 | 224 |
238 void RtViewerApp::HandleDoseLoaded(const DicomVolumeImage::ContentUpdatedMessage& message) | 225 void RtViewerApp::HandleDoseLoaded(const DicomVolumeImage::ContentUpdatedMessage& message) |
239 { | 226 { |