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 {