comparison OrthancStone/Sources/Volumes/VolumeSceneLayerSource.cpp @ 1606:874e178f34e9

- ViewportController now has weak ptr to Viewport - Measuring tools + related commands and all trackers now store only a weak_ptr to the Viewport and lock() on demand for usage - LayerHolder and FixedPoint aligner store only a weak_ptr to the Viewport, too - Fixed float/double warning in GrayscaleWindowingSceneTracker
author Benjamin Golinvaux <bgo@osimis.io>
date Wed, 28 Oct 2020 20:14:34 +0100
parents 8563ea5d8ae4
children 646e581e115b
comparison
equal deleted inserted replaced
1605:b3c439d96d3e 1606:874e178f34e9
38 double distance; 38 double distance;
39 return (CoordinateSystem3D::ComputeDistance(distance, a, b) && 39 return (CoordinateSystem3D::ComputeDistance(distance, a, b) &&
40 LinearAlgebra::IsCloseToZero(distance)); 40 LinearAlgebra::IsCloseToZero(distance));
41 } 41 }
42 42
43
44 void VolumeSceneLayerSource::ClearLayer() 43 void VolumeSceneLayerSource::ClearLayer()
45 { 44 {
46 { 45 {
47 std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); 46 std::unique_ptr<IViewport::ILock> lock(GetViewportLock());
48 ViewportController& controller = lock->GetController(); 47 ViewportController& controller = lock->GetController();
49 Scene2D& scene = controller.GetScene(); 48 Scene2D& scene = controller.GetScene();
50 scene.DeleteLayer(layerDepth_); 49 scene.DeleteLayer(layerDepth_);
51 } 50 }
52 lastPlane_.reset(NULL); 51 lastPlane_.reset(NULL);
53 } 52 }
54 53
54 IViewport::ILock* VolumeSceneLayerSource::GetViewportLock()
55 {
56 boost::shared_ptr<IViewport> viewport = viewport_.lock();
57 if (viewport)
58 return viewport->Lock();
59 else
60 return nullptr;
61 }
62
63 IViewport::ILock* VolumeSceneLayerSource::GetViewportLock() const
64 {
65 boost::shared_ptr<IViewport> viewport = viewport_.lock();
66 if (viewport)
67 return viewport->Lock();
68 else
69 return nullptr;
70 }
71
72
55 VolumeSceneLayerSource::VolumeSceneLayerSource( 73 VolumeSceneLayerSource::VolumeSceneLayerSource(
56 boost::shared_ptr<OrthancStone::IViewport> viewport, 74 boost::weak_ptr<OrthancStone::IViewport> viewport,
57 int layerDepth, 75 int layerDepth,
58 const boost::shared_ptr<IVolumeSlicer>& slicer) : 76 const boost::shared_ptr<IVolumeSlicer>& slicer) :
59 viewport_(viewport), 77 viewport_(viewport),
60 layerDepth_(layerDepth), 78 layerDepth_(layerDepth),
61 slicer_(slicer), 79 slicer_(slicer),
66 { 84 {
67 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); 85 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer);
68 } 86 }
69 87
70 { 88 {
71 std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); 89 std::unique_ptr<IViewport::ILock> lock(GetViewportLock());
72 ViewportController& controller = lock->GetController(); 90 ViewportController& controller = lock->GetController();
73 Scene2D& scene = controller.GetScene(); 91 Scene2D& scene = controller.GetScene();
74 ORTHANC_ASSERT(!scene.HasLayer(layerDepth_)); 92 ORTHANC_ASSERT(!scene.HasLayer(layerDepth_));
75 93
76 // we need to book the scene layer depth by adding a dummy layer 94 // we need to book the scene layer depth by adding a dummy layer
117 } 135 }
118 136
119 137
120 void VolumeSceneLayerSource::Update(const CoordinateSystem3D& plane) 138 void VolumeSceneLayerSource::Update(const CoordinateSystem3D& plane)
121 { 139 {
122 std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); 140 std::unique_ptr<IViewport::ILock> lock(GetViewportLock());
123 ViewportController& controller = lock->GetController(); 141 ViewportController& controller = lock->GetController();
124 Scene2D& scene = controller.GetScene(); 142 Scene2D& scene = controller.GetScene();
125 143
126 assert(slicer_.get() != NULL); 144 assert(slicer_.get() != NULL);
127 std::unique_ptr<IVolumeSlicer::IExtractedSlice> slice(slicer_->ExtractSlice(plane)); 145 std::unique_ptr<IVolumeSlicer::IExtractedSlice> slice(slicer_->ExtractSlice(plane));