Mercurial > hg > orthanc-stone
comparison Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp @ 1862:63587fdeec69
added 'SkipSeriesFromModalities' to ignore series from modality types
author | Alain Mazy <am@osimis.io> |
---|---|
date | Thu, 23 Sep 2021 14:38:42 +0200 |
parents | 58681a5c727b |
children | 3889ae96d2e9 |
comparison
equal
deleted
inserted
replaced
1861:9290d2916150 | 1862:63587fdeec69 |
---|---|
96 | 96 |
97 | 97 |
98 #include <boost/math/special_functions/round.hpp> | 98 #include <boost/math/special_functions/round.hpp> |
99 #include <boost/make_shared.hpp> | 99 #include <boost/make_shared.hpp> |
100 #include <stdio.h> | 100 #include <stdio.h> |
101 | 101 #include <algorithm> |
102 | 102 |
103 #if !defined(STONE_WEB_VIEWER_EXPORT) | 103 #if !defined(STONE_WEB_VIEWER_EXPORT) |
104 // We are not running ParseWebAssemblyExports.py, but we're compiling the wasm | 104 // We are not running ParseWebAssemblyExports.py, but we're compiling the wasm |
105 # define STONE_WEB_VIEWER_EXPORT | 105 # define STONE_WEB_VIEWER_EXPORT |
106 #endif | 106 #endif |
319 boost::shared_ptr<OrthancStone::DicomResourcesLoader> resourcesLoader_; | 319 boost::shared_ptr<OrthancStone::DicomResourcesLoader> resourcesLoader_; |
320 boost::shared_ptr<OrthancStone::SeriesThumbnailsLoader> thumbnailsLoader_; | 320 boost::shared_ptr<OrthancStone::SeriesThumbnailsLoader> thumbnailsLoader_; |
321 boost::shared_ptr<OrthancStone::SeriesMetadataLoader> metadataLoader_; | 321 boost::shared_ptr<OrthancStone::SeriesMetadataLoader> metadataLoader_; |
322 std::set<std::string> scheduledVirtualSeriesThumbnails_; | 322 std::set<std::string> scheduledVirtualSeriesThumbnails_; |
323 VirtualSeries virtualSeries_; | 323 VirtualSeries virtualSeries_; |
324 std::vector<std::string> skipSeriesFromModalities_; | |
324 | 325 |
325 explicit ResourcesLoader(OrthancStone::ILoadersContext& context, | 326 explicit ResourcesLoader(OrthancStone::ILoadersContext& context, |
326 const OrthancStone::DicomSource& source) : | 327 const OrthancStone::DicomSource& source) : |
327 context_(context), | 328 context_(context), |
328 source_(source), | 329 source_(source), |
340 OrthancStone::LoadedDicomResources& dicom = *message.GetResources(); | 341 OrthancStone::LoadedDicomResources& dicom = *message.GetResources(); |
341 | 342 |
342 LOG(INFO) << "resources loaded: " << dicom.GetSize() | 343 LOG(INFO) << "resources loaded: " << dicom.GetSize() |
343 << ", " << Orthanc::EnumerationToString(payload.GetValue()); | 344 << ", " << Orthanc::EnumerationToString(payload.GetValue()); |
344 | 345 |
346 std::vector<std::string> seriesIdsToRemove; | |
347 | |
345 if (payload.GetValue() == Orthanc::ResourceType_Series) | 348 if (payload.GetValue() == Orthanc::ResourceType_Series) |
346 { | 349 { |
350 // the 'dicom' var is actually equivalent to the 'series_' member in this case | |
351 | |
347 for (size_t i = 0; i < dicom.GetSize(); i++) | 352 for (size_t i = 0; i < dicom.GetSize(); i++) |
348 { | 353 { |
349 std::string studyInstanceUid, seriesInstanceUid; | 354 std::string studyInstanceUid, seriesInstanceUid, modality; |
350 if (dicom.GetResource(i).LookupStringValue( | 355 if (dicom.GetResource(i).LookupStringValue( |
351 studyInstanceUid, Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, false) && | 356 studyInstanceUid, Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, false) && |
352 dicom.GetResource(i).LookupStringValue( | 357 dicom.GetResource(i).LookupStringValue( |
353 seriesInstanceUid, Orthanc::DICOM_TAG_SERIES_INSTANCE_UID, false)) | 358 seriesInstanceUid, Orthanc::DICOM_TAG_SERIES_INSTANCE_UID, false) && |
359 dicom.GetResource(i).LookupStringValue( | |
360 modality, Orthanc::DICOM_TAG_MODALITY, false)) | |
354 { | 361 { |
355 thumbnailsLoader_->ScheduleLoadThumbnail(source_, "", studyInstanceUid, seriesInstanceUid); | 362 // skip series that should not be displayed |
356 metadataLoader_->ScheduleLoadSeries(PRIORITY_LOW + 1, source_, studyInstanceUid, seriesInstanceUid); | 363 if (std::find(skipSeriesFromModalities_.begin(), skipSeriesFromModalities_.end(), modality) == skipSeriesFromModalities_.end()) |
364 { | |
365 thumbnailsLoader_->ScheduleLoadThumbnail(source_, "", studyInstanceUid, seriesInstanceUid); | |
366 metadataLoader_->ScheduleLoadSeries(PRIORITY_LOW + 1, source_, studyInstanceUid, seriesInstanceUid); | |
367 } | |
368 | |
369 else | |
370 { | |
371 seriesIdsToRemove.push_back(seriesInstanceUid); | |
372 } | |
357 } | 373 } |
374 } | |
375 | |
376 for (size_t i = 0; i < seriesIdsToRemove.size(); i++) | |
377 { | |
378 LOG(INFO) << "series to hide: " << seriesIdsToRemove[i]; | |
379 dicom.RemoveResource(seriesIdsToRemove[i]); | |
358 } | 380 } |
359 } | 381 } |
360 | 382 |
361 if (pending_ == 0) | 383 if (pending_ == 0) |
362 { | 384 { |
513 observer_->SignalVirtualSeriesThumbnailLoaded(virtualSeriesId, message.GetAnswer()); | 535 observer_->SignalVirtualSeriesThumbnailLoaded(virtualSeriesId, message.GetAnswer()); |
514 } | 536 } |
515 } | 537 } |
516 | 538 |
517 public: | 539 public: |
540 void SetSkipSeriesFromModalities(const std::vector<std::string>& skipSeriesFromModalities) | |
541 { | |
542 skipSeriesFromModalities_ = skipSeriesFromModalities; | |
543 } | |
544 | |
518 static boost::shared_ptr<ResourcesLoader> Create(OrthancStone::ILoadersContext::ILock& lock, | 545 static boost::shared_ptr<ResourcesLoader> Create(OrthancStone::ILoadersContext::ILock& lock, |
519 const OrthancStone::DicomSource& source) | 546 const OrthancStone::DicomSource& source) |
520 { | 547 { |
521 boost::shared_ptr<ResourcesLoader> loader(new ResourcesLoader(lock.GetContext(), source)); | 548 boost::shared_ptr<ResourcesLoader> loader(new ResourcesLoader(lock.GetContext(), source)); |
522 | 549 |
3570 EXTERN_CATCH_EXCEPTIONS; | 3597 EXTERN_CATCH_EXCEPTIONS; |
3571 } | 3598 } |
3572 | 3599 |
3573 | 3600 |
3574 EMSCRIPTEN_KEEPALIVE | 3601 EMSCRIPTEN_KEEPALIVE |
3602 void SetSkipSeriesFromModalities(const char* value) | |
3603 { | |
3604 try | |
3605 { | |
3606 LOG(WARNING) << "SetSkipSeriesFromModalities " << value; | |
3607 | |
3608 Json::Value modalities; | |
3609 Orthanc::Toolbox::ReadJson(modalities, value); | |
3610 std::vector<std::string> skipSeriesFromModalities; | |
3611 | |
3612 for (Json::Value::ArrayIndex i = 0; i < modalities.size(); i++) | |
3613 { | |
3614 skipSeriesFromModalities.push_back(modalities[i].asString()); | |
3615 } | |
3616 GetResourcesLoader().SetSkipSeriesFromModalities(skipSeriesFromModalities); | |
3617 } | |
3618 EXTERN_CATCH_EXCEPTIONS; | |
3619 } | |
3620 | |
3621 | |
3622 EMSCRIPTEN_KEEPALIVE | |
3575 void FetchAllStudies() | 3623 void FetchAllStudies() |
3576 { | 3624 { |
3577 try | 3625 try |
3578 { | 3626 { |
3579 GetResourcesLoader().FetchAllStudies(); | 3627 GetResourcesLoader().FetchAllStudies(); |