Mercurial > hg > orthanc-stone
comparison Framework/Deprecated/Loaders/OrthancSeriesVolumeProgressiveLoader.cpp @ 1310:9bea7e15b519 broker
- first pass at changes to cope with the refactoring of the loading system
- global loader-related data accessible through ILoadersContext::ILock
- many changes in legacy loaders (CT, RTSTRUCT, DOSE) + loader cache
- NOT FINISHED! there are shared_from_this calls in ctors! this will crash!
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Mon, 09 Mar 2020 14:53:22 +0100 |
parents | 257f2c9a02ac |
children | 9b126de2cde2 |
comparison
equal
deleted
inserted
replaced
1309:1f877e0846fe | 1310:9bea7e15b519 |
---|---|
19 **/ | 19 **/ |
20 | 20 |
21 | 21 |
22 #include "OrthancSeriesVolumeProgressiveLoader.h" | 22 #include "OrthancSeriesVolumeProgressiveLoader.h" |
23 | 23 |
24 #include "../../Loaders/ILoadersContext.h" | |
24 #include "../../Loaders/BasicFetchingItemsSorter.h" | 25 #include "../../Loaders/BasicFetchingItemsSorter.h" |
25 #include "../../Loaders/BasicFetchingStrategy.h" | 26 #include "../../Loaders/BasicFetchingStrategy.h" |
26 #include "../../Toolbox/GeometryToolbox.h" | 27 #include "../../Toolbox/GeometryToolbox.h" |
27 #include "../../Volumes/DicomVolumeImageMPRSlicer.h" | 28 #include "../../Volumes/DicomVolumeImageMPRSlicer.h" |
28 | 29 |
29 #include <Core/Images/ImageProcessing.h> | 30 #include <Core/Images/ImageProcessing.h> |
30 #include <Core/OrthancException.h> | 31 #include <Core/OrthancException.h> |
31 | 32 |
32 namespace Deprecated | 33 namespace Deprecated |
33 { | 34 { |
35 using OrthancStone::ILoadersContext; | |
36 | |
34 class OrthancSeriesVolumeProgressiveLoader::ExtractedSlice : public OrthancStone::DicomVolumeImageMPRSlicer::Slice | 37 class OrthancSeriesVolumeProgressiveLoader::ExtractedSlice : public OrthancStone::DicomVolumeImageMPRSlicer::Slice |
35 { | 38 { |
36 private: | 39 private: |
37 const OrthancSeriesVolumeProgressiveLoader& that_; | 40 const OrthancSeriesVolumeProgressiveLoader& that_; |
38 | 41 |
300 tmp->SetExpectedPixelFormat(slice.GetExpectedPixelFormat()); | 303 tmp->SetExpectedPixelFormat(slice.GetExpectedPixelFormat()); |
301 command.reset(tmp.release()); | 304 command.reset(tmp.release()); |
302 } | 305 } |
303 | 306 |
304 command->AcquirePayload(new Orthanc::SingleValueObject<unsigned int>(sliceIndex)); | 307 command->AcquirePayload(new Orthanc::SingleValueObject<unsigned int>(sliceIndex)); |
305 | 308 |
306 boost::shared_ptr<IObserver> observer(GetSharedObserver()); | 309 { |
307 oracle_.Schedule(observer, command.release()); | 310 std::unique_ptr<OrthancStone::ILoadersContext::ILock> lock(loadersContext_.Lock()); |
311 boost::shared_ptr<IObserver> observer(GetSharedObserver()); | |
312 lock->Schedule(observer, 0, command.release()); // TODO: priority! | |
313 } | |
308 } | 314 } |
309 else | 315 else |
310 { | 316 { |
311 // loading is finished! | 317 // loading is finished! |
312 volumeImageReadyInHighQuality_ = true; | 318 volumeImageReadyInHighQuality_ = true; |
428 | 434 |
429 SetSliceContent(GetSliceIndexPayload(message.GetOrigin()), message.GetImage(), quality); | 435 SetSliceContent(GetSliceIndexPayload(message.GetOrigin()), message.GetImage(), quality); |
430 } | 436 } |
431 | 437 |
432 | 438 |
433 OrthancSeriesVolumeProgressiveLoader::OrthancSeriesVolumeProgressiveLoader(const boost::shared_ptr<OrthancStone::DicomVolumeImage>& volume, | 439 OrthancSeriesVolumeProgressiveLoader::OrthancSeriesVolumeProgressiveLoader( |
434 OrthancStone::IOracle& oracle, | 440 OrthancStone::ILoadersContext& loadersContext, |
435 OrthancStone::IObservable& oracleObservable) : | 441 const boost::shared_ptr<OrthancStone::DicomVolumeImage>& volume) |
436 oracle_(oracle), | 442 : loadersContext_(loadersContext) |
437 active_(false), | 443 , active_(false) |
438 simultaneousDownloads_(4), | 444 , simultaneousDownloads_(4) |
439 volume_(volume), | 445 , volume_(volume) |
440 sorter_(new OrthancStone::BasicFetchingItemsSorter::Factory), | 446 , sorter_(new OrthancStone::BasicFetchingItemsSorter::Factory) |
441 volumeImageReadyInHighQuality_(false) | 447 , volumeImageReadyInHighQuality_(false) |
442 { | 448 { |
443 // TODO => Move this out of constructor | 449 std::auto_ptr<OrthancStone::ILoadersContext::ILock> lock(loadersContext.Lock()); |
444 Register<OrthancStone::OrthancRestApiCommand::SuccessMessage> | 450 |
445 (oracleObservable, &OrthancSeriesVolumeProgressiveLoader::LoadGeometry); | 451 // TODO => Move this out of constructor WHY? |
446 | 452 Register<OrthancStone::OrthancRestApiCommand::SuccessMessage>( |
447 Register<OrthancStone::GetOrthancImageCommand::SuccessMessage> | 453 lock->GetOracleObservable(), |
448 (oracleObservable, &OrthancSeriesVolumeProgressiveLoader::LoadBestQualitySliceContent); | 454 &OrthancSeriesVolumeProgressiveLoader::LoadGeometry); |
449 | 455 |
450 Register<OrthancStone::GetOrthancWebViewerJpegCommand::SuccessMessage> | 456 Register<OrthancStone::GetOrthancImageCommand::SuccessMessage>( |
451 (oracleObservable, &OrthancSeriesVolumeProgressiveLoader::LoadJpegSliceContent); | 457 lock->GetOracleObservable(), |
458 &OrthancSeriesVolumeProgressiveLoader::LoadBestQualitySliceContent); | |
459 | |
460 Register<OrthancStone::GetOrthancWebViewerJpegCommand::SuccessMessage>( | |
461 lock->GetOracleObservable(), | |
462 &OrthancSeriesVolumeProgressiveLoader::LoadJpegSliceContent); | |
452 } | 463 } |
453 | 464 |
454 OrthancSeriesVolumeProgressiveLoader::~OrthancSeriesVolumeProgressiveLoader() | 465 OrthancSeriesVolumeProgressiveLoader::~OrthancSeriesVolumeProgressiveLoader() |
455 { | 466 { |
456 LOG(TRACE) << "OrthancSeriesVolumeProgressiveLoader::~OrthancSeriesVolumeProgressiveLoader()"; | 467 LOG(TRACE) << "OrthancSeriesVolumeProgressiveLoader::~OrthancSeriesVolumeProgressiveLoader()"; |
487 { | 498 { |
488 active_ = true; | 499 active_ = true; |
489 | 500 |
490 std::unique_ptr<OrthancStone::OrthancRestApiCommand> command(new OrthancStone::OrthancRestApiCommand); | 501 std::unique_ptr<OrthancStone::OrthancRestApiCommand> command(new OrthancStone::OrthancRestApiCommand); |
491 command->SetUri("/series/" + seriesId + "/instances-tags"); | 502 command->SetUri("/series/" + seriesId + "/instances-tags"); |
492 | 503 { |
493 // LOG(TRACE) << "OrthancSeriesVolumeProgressiveLoader::LoadSeries about to call oracle_.Schedule"; | 504 std::unique_ptr<OrthancStone::ILoadersContext::ILock> lock(loadersContext_.Lock()); |
494 boost::shared_ptr<IObserver> observer(GetSharedObserver()); | 505 boost::shared_ptr<IObserver> observer(GetSharedObserver()); |
495 oracle_.Schedule(observer, command.release()); | 506 lock->Schedule(observer, 0, command.release()); //TODO: priority! |
496 // LOG(TRACE) << "OrthancSeriesVolumeProgressiveLoader::LoadSeries called oracle_.Schedule"; | 507 } |
497 } | 508 } |
498 } | 509 } |
499 | 510 |
500 | 511 |
501 OrthancStone::IVolumeSlicer::IExtractedSlice* | 512 OrthancStone::IVolumeSlicer::IExtractedSlice* |