Mercurial > hg > orthanc-stone
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)); |