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();