Mercurial > hg > orthanc-stone
comparison Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp @ 2089:63d77859edee dicom-sr
cont
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 07 Nov 2023 19:30:44 +0100 |
parents | b98d159c7545 |
children | c2dfc253bd04 |
comparison
equal
deleted
inserted
replaced
2088:b98d159c7545 | 2089:63d77859edee |
---|---|
80 #include "../../../OrthancStone/Sources/Scene2D/PolylineSceneLayer.h" | 80 #include "../../../OrthancStone/Sources/Scene2D/PolylineSceneLayer.h" |
81 #include "../../../OrthancStone/Sources/Scene2D/TextSceneLayer.h" | 81 #include "../../../OrthancStone/Sources/Scene2D/TextSceneLayer.h" |
82 #include "../../../OrthancStone/Sources/Scene2DViewport/ViewportController.h" | 82 #include "../../../OrthancStone/Sources/Scene2DViewport/ViewportController.h" |
83 #include "../../../OrthancStone/Sources/StoneException.h" | 83 #include "../../../OrthancStone/Sources/StoneException.h" |
84 #include "../../../OrthancStone/Sources/Toolbox/DicomInstanceParameters.h" | 84 #include "../../../OrthancStone/Sources/Toolbox/DicomInstanceParameters.h" |
85 #include "../../../OrthancStone/Sources/Toolbox/DicomStructuredReport.h" | |
85 #include "../../../OrthancStone/Sources/Toolbox/GeometryToolbox.h" | 86 #include "../../../OrthancStone/Sources/Toolbox/GeometryToolbox.h" |
86 #include "../../../OrthancStone/Sources/Toolbox/OsiriX/AngleAnnotation.h" | 87 #include "../../../OrthancStone/Sources/Toolbox/OsiriX/AngleAnnotation.h" |
87 #include "../../../OrthancStone/Sources/Toolbox/OsiriX/CollectionOfAnnotations.h" | 88 #include "../../../OrthancStone/Sources/Toolbox/OsiriX/CollectionOfAnnotations.h" |
88 #include "../../../OrthancStone/Sources/Toolbox/OsiriX/LineAnnotation.h" | 89 #include "../../../OrthancStone/Sources/Toolbox/OsiriX/LineAnnotation.h" |
89 #include "../../../OrthancStone/Sources/Toolbox/OsiriX/TextAnnotation.h" | 90 #include "../../../OrthancStone/Sources/Toolbox/OsiriX/TextAnnotation.h" |
99 #include <algorithm> | 100 #include <algorithm> |
100 #include <boost/make_shared.hpp> | 101 #include <boost/make_shared.hpp> |
101 #include <boost/math/constants/constants.hpp> | 102 #include <boost/math/constants/constants.hpp> |
102 #include <boost/math/special_functions/round.hpp> | 103 #include <boost/math/special_functions/round.hpp> |
103 #include <stdio.h> | 104 #include <stdio.h> |
104 | |
105 static const char* const DICOM_COMPREHENSIVE_SR_IOD = "1.2.840.10008.5.1.4.1.1.88.33"; | |
106 | 105 |
107 static const double PI = boost::math::constants::pi<double>(); | 106 static const double PI = boost::math::constants::pi<double>(); |
108 | 107 |
109 #if !defined(STONE_WEB_VIEWER_EXPORT) | 108 #if !defined(STONE_WEB_VIEWER_EXPORT) |
110 // We are not running ParseWebAssemblyExports.py, but we're compiling the wasm | 109 // We are not running ParseWebAssemblyExports.py, but we're compiling the wasm |
425 { | 424 { |
426 if (observer_.get() != NULL) | 425 if (observer_.get() != NULL) |
427 { | 426 { |
428 for (size_t i = 0; i < message.GetInstancesCount(); i++) | 427 for (size_t i = 0; i < message.GetInstancesCount(); i++) |
429 { | 428 { |
430 std::string sopClassUid; | 429 std::string sopInstanceUid, sopClassUid; |
431 if (message.GetInstance(i).LookupStringValue(sopClassUid, Orthanc::DICOM_TAG_SOP_CLASS_UID, false) && | 430 if (message.GetInstance(i).LookupStringValue(sopInstanceUid, Orthanc::DICOM_TAG_SOP_INSTANCE_UID, false) && |
432 sopClassUid == DICOM_COMPREHENSIVE_SR_IOD) | 431 message.GetInstance(i).LookupStringValue(sopClassUid, Orthanc::DICOM_TAG_SOP_CLASS_UID, false) && |
432 OrthancStone::StringToSopClassUid(sopClassUid) == OrthancStone::SopClassUid_ComprehensiveSR) | |
433 { | 433 { |
434 LOG(ERROR) << "ICI " << message.GetSeriesInstanceUid(); | 434 std::unique_ptr<OrthancStone::ILoadersContext::ILock> lock(context_.Lock()); |
435 lock->Schedule( | |
436 GetSharedObserver(), PRIORITY_NORMAL, OrthancStone::ParseDicomFromWadoCommand::Create( | |
437 source_, message.GetStudyInstanceUid(), message.GetSeriesInstanceUid(), sopInstanceUid, | |
438 false /* no transcoding */, Orthanc::DicomTransferSyntax_LittleEndianExplicit /* dummy value */, | |
439 new InstanceInfo(message.GetStudyInstanceUid(), message.GetSeriesInstanceUid(), OrthancStone::SopClassUid_ComprehensiveSR))); | |
440 return; | |
435 } | 441 } |
436 } | 442 } |
437 | 443 |
438 observer_->SignalSeriesMetadataLoaded( | 444 observer_->SignalSeriesMetadataLoaded( |
439 message.GetStudyInstanceUid(), message.GetSeriesInstanceUid()); | 445 message.GetStudyInstanceUid(), message.GetSeriesInstanceUid()); |
531 } | 537 } |
532 else | 538 else |
533 { | 539 { |
534 LOG(ERROR) << "Unable to extract PDF from series: " << info.GetSeriesInstanceUid(); | 540 LOG(ERROR) << "Unable to extract PDF from series: " << info.GetSeriesInstanceUid(); |
535 } | 541 } |
542 | |
543 break; | |
544 } | |
545 | |
546 case OrthancStone::SopClassUid_ComprehensiveSR: | |
547 { | |
548 try | |
549 { | |
550 OrthancStone::DicomStructuredReport sr(message.GetDicom()); | |
551 | |
552 std::list<OrthancStone::DicomStructuredReport::Frame> frames; | |
553 sr.ExportOrderedFrames(frames); | |
554 | |
555 for (std::list<OrthancStone::DicomStructuredReport::Frame>::const_iterator | |
556 it = frames.begin(); it != frames.end(); ++it) | |
557 { | |
558 LOG(ERROR) << "YOU " << it->GetSopInstanceUid() << " " << it->GetFrameNumber(); | |
559 } | |
560 } | |
561 catch (Orthanc::OrthancException& e) | |
562 { | |
563 LOG(ERROR) << "Cannot decode DICOM-SR: " << e.What(); | |
564 } | |
565 break; | |
536 } | 566 } |
537 | 567 |
538 default: | 568 default: |
539 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); | 569 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
540 } | 570 } |