comparison Framework/Widgets/SliceViewerWidget.cpp @ 726:4f2416d519b4

moving layers, widgets and loaders to Deprecated namespace
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 21 May 2019 11:43:25 +0200
parents d2c0e347ddc2
children
comparison
equal deleted inserted replaced
714:d2c0e347ddc2 726:4f2416d519b4
31 #include <boost/math/constants/constants.hpp> 31 #include <boost/math/constants/constants.hpp>
32 32
33 33
34 static const double THIN_SLICE_THICKNESS = 100.0 * std::numeric_limits<double>::epsilon(); 34 static const double THIN_SLICE_THICKNESS = 100.0 * std::numeric_limits<double>::epsilon();
35 35
36 namespace OrthancStone 36 namespace Deprecated
37 { 37 {
38 class SliceViewerWidget::Scene : public boost::noncopyable 38 class SliceViewerWidget::Scene : public boost::noncopyable
39 { 39 {
40 private: 40 private:
41 CoordinateSystem3D plane_; 41 OrthancStone::CoordinateSystem3D plane_;
42 double thickness_; 42 double thickness_;
43 size_t countMissing_; 43 size_t countMissing_;
44 std::vector<ILayerRenderer*> renderers_; 44 std::vector<ILayerRenderer*> renderers_;
45 45
46 public: 46 public:
60 renderers_[index] = NULL; 60 renderers_[index] = NULL;
61 countMissing_++; 61 countMissing_++;
62 } 62 }
63 } 63 }
64 64
65 Scene(const CoordinateSystem3D& plane, 65 Scene(const OrthancStone::CoordinateSystem3D& plane,
66 double thickness, 66 double thickness,
67 size_t countLayers) : 67 size_t countLayers) :
68 plane_(plane), 68 plane_(plane),
69 thickness_(thickness), 69 thickness_(thickness),
70 countMissing_(countLayers), 70 countMissing_(countLayers),
96 96
97 renderers_[index] = renderer; 97 renderers_[index] = renderer;
98 countMissing_--; 98 countMissing_--;
99 } 99 }
100 100
101 const CoordinateSystem3D& GetPlane() const 101 const OrthancStone::CoordinateSystem3D& GetPlane() const
102 { 102 {
103 return plane_; 103 return plane_;
104 } 104 }
105 105
106 bool HasRenderer(size_t index) 106 bool HasRenderer(size_t index)
116 unsigned int GetCountMissing() const 116 unsigned int GetCountMissing() const
117 { 117 {
118 return static_cast<unsigned int>(countMissing_); 118 return static_cast<unsigned int>(countMissing_);
119 } 119 }
120 120
121 bool RenderScene(CairoContext& context, 121 bool RenderScene(OrthancStone::CairoContext& context,
122 const ViewportGeometry& view, 122 const ViewportGeometry& view,
123 const CoordinateSystem3D& viewportPlane) 123 const OrthancStone::CoordinateSystem3D& viewportPlane)
124 { 124 {
125 bool fullQuality = true; 125 bool fullQuality = true;
126 cairo_t *cr = context.GetObject(); 126 cairo_t *cr = context.GetObject();
127 127
128 for (size_t i = 0; i < renderers_.size(); i++) 128 for (size_t i = 0; i < renderers_.size(); i++)
129 { 129 {
130 if (renderers_[i] != NULL) 130 if (renderers_[i] != NULL)
131 { 131 {
132 const CoordinateSystem3D& framePlane = renderers_[i]->GetLayerPlane(); 132 const OrthancStone::CoordinateSystem3D& framePlane = renderers_[i]->GetLayerPlane();
133 133
134 double x0, y0, x1, y1, x2, y2; 134 double x0, y0, x1, y1, x2, y2;
135 viewportPlane.ProjectPoint(x0, y0, framePlane.GetOrigin()); 135 viewportPlane.ProjectPoint(x0, y0, framePlane.GetOrigin());
136 viewportPlane.ProjectPoint(x1, y1, framePlane.GetOrigin() + framePlane.GetAxisX()); 136 viewportPlane.ProjectPoint(x1, y1, framePlane.GetOrigin() + framePlane.GetAxisX());
137 viewportPlane.ProjectPoint(x2, y2, framePlane.GetOrigin() + framePlane.GetAxisY()); 137 viewportPlane.ProjectPoint(x2, y2, framePlane.GetOrigin() + framePlane.GetAxisY());
205 { 205 {
206 renderers_[index]->SetLayerStyle(style); 206 renderers_[index]->SetLayerStyle(style);
207 } 207 }
208 } 208 }
209 209
210 bool ContainsPlane(const CoordinateSystem3D& plane) const 210 bool ContainsPlane(const OrthancStone::CoordinateSystem3D& plane) const
211 { 211 {
212 bool isOpposite; 212 bool isOpposite;
213 if (!GeometryToolbox::IsParallelOrOpposite(isOpposite, 213 if (!OrthancStone::GeometryToolbox::IsParallelOrOpposite(isOpposite,
214 plane.GetNormal(), 214 plane.GetNormal(),
215 plane_.GetNormal())) 215 plane_.GetNormal()))
216 { 216 {
217 return false; 217 return false;
218 } 218 }
219 else 219 else
220 { 220 {
254 return true; 254 return true;
255 } 255 }
256 } 256 }
257 257
258 258
259 void SliceViewerWidget::GetLayerExtent(Extent2D& extent, 259 void SliceViewerWidget::GetLayerExtent(OrthancStone::Extent2D& extent,
260 IVolumeSlicer& source) const 260 IVolumeSlicer& source) const
261 { 261 {
262 extent.Reset(); 262 extent.Reset();
263 263
264 std::vector<Vector> points; 264 std::vector<OrthancStone::Vector> points;
265 if (source.GetExtent(points, plane_)) 265 if (source.GetExtent(points, plane_))
266 { 266 {
267 for (size_t i = 0; i < points.size(); i++) 267 for (size_t i = 0; i < points.size(); i++)
268 { 268 {
269 double x, y; 269 double x, y;
272 } 272 }
273 } 273 }
274 } 274 }
275 275
276 276
277 Extent2D SliceViewerWidget::GetSceneExtent() 277 OrthancStone::Extent2D SliceViewerWidget::GetSceneExtent()
278 { 278 {
279 Extent2D sceneExtent; 279 OrthancStone::Extent2D sceneExtent;
280 280
281 for (size_t i = 0; i < layers_.size(); i++) 281 for (size_t i = 0; i < layers_.size(); i++)
282 { 282 {
283 assert(layers_[i] != NULL); 283 assert(layers_[i] != NULL);
284 Extent2D layerExtent; 284 OrthancStone::Extent2D layerExtent;
285 GetLayerExtent(layerExtent, *layers_[i]); 285 GetLayerExtent(layerExtent, *layers_[i]);
286 286
287 sceneExtent.Union(layerExtent); 287 sceneExtent.Union(layerExtent);
288 } 288 }
289 289
290 return sceneExtent; 290 return sceneExtent;
291 } 291 }
292 292
293 293
294 bool SliceViewerWidget::RenderScene(CairoContext& context, 294 bool SliceViewerWidget::RenderScene(OrthancStone::CairoContext& context,
295 const ViewportGeometry& view) 295 const ViewportGeometry& view)
296 { 296 {
297 if (currentScene_.get() != NULL) 297 if (currentScene_.get() != NULL)
298 { 298 {
299 return currentScene_->RenderScene(context, view, plane_); 299 return currentScene_->RenderScene(context, view, plane_);
321 } 321 }
322 322
323 323
324 void SliceViewerWidget::UpdateLayer(size_t index, 324 void SliceViewerWidget::UpdateLayer(size_t index,
325 ILayerRenderer* renderer, 325 ILayerRenderer* renderer,
326 const CoordinateSystem3D& plane) 326 const OrthancStone::CoordinateSystem3D& plane)
327 { 327 {
328 LOG(INFO) << "Updating layer " << index; 328 LOG(INFO) << "Updating layer " << index;
329 329
330 std::auto_ptr<ILayerRenderer> tmp(renderer); 330 std::auto_ptr<ILayerRenderer> tmp(renderer);
331 331
362 } 362 }
363 } 363 }
364 } 364 }
365 365
366 366
367 SliceViewerWidget::SliceViewerWidget(MessageBroker& broker, 367 SliceViewerWidget::SliceViewerWidget(OrthancStone::MessageBroker& broker,
368 const std::string& name) : 368 const std::string& name) :
369 WorldSceneWidget(name), 369 WorldSceneWidget(name),
370 IObserver(broker), 370 IObserver(broker),
371 IObservable(broker), 371 IObservable(broker),
372 started_(false) 372 started_(false)
383 } 383 }
384 } 384 }
385 385
386 void SliceViewerWidget::ObserveLayer(IVolumeSlicer& layer) 386 void SliceViewerWidget::ObserveLayer(IVolumeSlicer& layer)
387 { 387 {
388 layer.RegisterObserverCallback(new Callable<SliceViewerWidget, IVolumeSlicer::GeometryReadyMessage> 388 layer.RegisterObserverCallback(new OrthancStone::Callable<SliceViewerWidget, IVolumeSlicer::GeometryReadyMessage>
389 (*this, &SliceViewerWidget::OnGeometryReady)); 389 (*this, &SliceViewerWidget::OnGeometryReady));
390 // currently ignore errors layer->RegisterObserverCallback(new Callable<SliceViewerWidget, IVolumeSlicer::GeometryErrorMessage>(*this, &SliceViewerWidget::...)); 390 // currently ignore errors layer->RegisterObserverCallback(new Callable<SliceViewerWidget, IVolumeSlicer::GeometryErrorMessage>(*this, &SliceViewerWidget::...));
391 layer.RegisterObserverCallback(new Callable<SliceViewerWidget, IVolumeSlicer::SliceContentChangedMessage> 391 layer.RegisterObserverCallback(new OrthancStone::Callable<SliceViewerWidget, IVolumeSlicer::SliceContentChangedMessage>
392 (*this, &SliceViewerWidget::OnSliceChanged)); 392 (*this, &SliceViewerWidget::OnSliceChanged));
393 layer.RegisterObserverCallback(new Callable<SliceViewerWidget, IVolumeSlicer::ContentChangedMessage> 393 layer.RegisterObserverCallback(new OrthancStone::Callable<SliceViewerWidget, IVolumeSlicer::ContentChangedMessage>
394 (*this, &SliceViewerWidget::OnContentChanged)); 394 (*this, &SliceViewerWidget::OnContentChanged));
395 layer.RegisterObserverCallback(new Callable<SliceViewerWidget, IVolumeSlicer::LayerReadyMessage> 395 layer.RegisterObserverCallback(new OrthancStone::Callable<SliceViewerWidget, IVolumeSlicer::LayerReadyMessage>
396 (*this, &SliceViewerWidget::OnLayerReady)); 396 (*this, &SliceViewerWidget::OnLayerReady));
397 layer.RegisterObserverCallback(new Callable<SliceViewerWidget, IVolumeSlicer::LayerErrorMessage> 397 layer.RegisterObserverCallback(new OrthancStone::Callable<SliceViewerWidget, IVolumeSlicer::LayerErrorMessage>
398 (*this, &SliceViewerWidget::OnLayerError)); 398 (*this, &SliceViewerWidget::OnLayerError));
399 } 399 }
400 400
401 401
402 size_t SliceViewerWidget::AddLayer(IVolumeSlicer* layer) // Takes ownership 402 size_t SliceViewerWidget::AddLayer(IVolumeSlicer* layer) // Takes ownership
502 502
503 NotifyContentChanged(); 503 NotifyContentChanged();
504 } 504 }
505 505
506 506
507 void SliceViewerWidget::SetSlice(const CoordinateSystem3D& plane) 507 void SliceViewerWidget::SetSlice(const OrthancStone::CoordinateSystem3D& plane)
508 { 508 {
509 LOG(INFO) << "Setting slice origin: (" << plane.GetOrigin()[0] 509 LOG(INFO) << "Setting slice origin: (" << plane.GetOrigin()[0]
510 << "," << plane.GetOrigin()[1] 510 << "," << plane.GetOrigin()[1]
511 << "," << plane.GetOrigin()[2] << ")"; 511 << "," << plane.GetOrigin()[2] << ")";
512 512