comparison Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp @ 1859:58681a5c727b

overlay: display ContentDate/ContentTime instead of StudyDate if available + new 'TimeFormat' option
author Alain Mazy <am@osimis.io>
date Mon, 20 Sep 2021 17:08:23 +0200
parents 73a4bee08bb6
children 63587fdeec69
comparison
equal deleted inserted replaced
1858:be88206f8d78 1859:58681a5c727b
1448 1448
1449 virtual void SignalFrameUpdated(const ViewerViewport& viewport, 1449 virtual void SignalFrameUpdated(const ViewerViewport& viewport,
1450 size_t currentFrame, 1450 size_t currentFrame,
1451 size_t countFrames, 1451 size_t countFrames,
1452 DisplayedFrameQuality quality, 1452 DisplayedFrameQuality quality,
1453 unsigned int instanceNumber) = 0; 1453 unsigned int instanceNumber,
1454 const std::string& contentDate,
1455 const std::string& contentTime) = 0;
1454 1456
1455 // "click" is a 3D vector in world coordinates 1457 // "click" is a 3D vector in world coordinates
1456 virtual void SignalCrosshair(const ViewerViewport& viewport, 1458 virtual void SignalCrosshair(const ViewerViewport& viewport,
1457 const OrthancStone::Vector& click) = 0; 1459 const OrthancStone::Vector& click) = 0;
1458 1460
1970 cursor_.get() != NULL && 1972 cursor_.get() != NULL &&
1971 observer_.get() != NULL) 1973 observer_.get() != NULL)
1972 { 1974 {
1973 const Orthanc::DicomMap& instance = frames_->GetInstanceOfFrame(cursor_->GetCurrentIndex()).GetTags(); 1975 const Orthanc::DicomMap& instance = frames_->GetInstanceOfFrame(cursor_->GetCurrentIndex()).GetTags();
1974 1976
1975 uint32_t instanceNumber; 1977 uint32_t instanceNumber = 0;
1976 if (!instance.ParseUnsignedInteger32(instanceNumber, Orthanc::DICOM_TAG_INSTANCE_NUMBER)) 1978 std::string contentDate;
1977 { 1979 std::string contentTime;
1978 instanceNumber = 0; 1980
1979 } 1981 instance.ParseUnsignedInteger32(instanceNumber, Orthanc::DICOM_TAG_INSTANCE_NUMBER);
1980 1982 instance.LookupStringValue(contentDate, Orthanc::DicomTag(0x0008, 0x0023), false);
1981 observer_->SignalFrameUpdated(*this, cursorIndex, frames_->GetFramesCount(), quality, instanceNumber); 1983 instance.LookupStringValue(contentTime, Orthanc::DicomTag(0x0008, 0x0033), false);
1984
1985 observer_->SignalFrameUpdated(*this, cursorIndex, frames_->GetFramesCount(), quality, instanceNumber, contentDate, contentTime);
1982 } 1986 }
1983 } 1987 }
1984 1988
1985 1989
1986 void RenderCurrentScene(const Orthanc::ImageAccessor& frame, 1990 void RenderCurrentScene(const Orthanc::ImageAccessor& frame,
2573 prefetchQueue_.clear(); 2577 prefetchQueue_.clear();
2574 2578
2575 if (observer_.get() != NULL) 2579 if (observer_.get() != NULL)
2576 { 2580 {
2577 observer_->SignalFrameUpdated(*this, cursor_->GetCurrentIndex(), 2581 observer_->SignalFrameUpdated(*this, cursor_->GetCurrentIndex(),
2578 frames_->GetFramesCount(), DisplayedFrameQuality_None, 0); 2582 frames_->GetFramesCount(), DisplayedFrameQuality_None, 0, "", "");
2579 } 2583 }
2580 2584
2581 centralPhysicalWidth_ = 1; 2585 centralPhysicalWidth_ = 1;
2582 centralPhysicalHeight_ = 1; 2586 centralPhysicalHeight_ = 1;
2583 2587
3255 3259
3256 virtual void SignalFrameUpdated(const ViewerViewport& viewport, 3260 virtual void SignalFrameUpdated(const ViewerViewport& viewport,
3257 size_t currentFrame, 3261 size_t currentFrame,
3258 size_t countFrames, 3262 size_t countFrames,
3259 DisplayedFrameQuality quality, 3263 DisplayedFrameQuality quality,
3260 unsigned int instanceNumber) ORTHANC_OVERRIDE 3264 unsigned int instanceNumber,
3265 const std::string& contentDate,
3266 const std::string& contentTime) ORTHANC_OVERRIDE
3261 { 3267 {
3262 EM_ASM({ 3268 EM_ASM({
3263 const customEvent = document.createEvent("CustomEvent"); 3269 const customEvent = document.createEvent("CustomEvent");
3264 customEvent.initCustomEvent("FrameUpdated", false, false, 3270 customEvent.initCustomEvent("FrameUpdated", false, false,
3265 { "canvasId" : UTF8ToString($0), 3271 { "canvasId" : UTF8ToString($0),
3266 "currentFrame" : $1, 3272 "currentFrame" : $1,
3267 "numberOfFrames" : $2, 3273 "numberOfFrames" : $2,
3268 "quality" : $3, 3274 "quality" : $3,
3269 "instanceNumber" : $4 }); 3275 "instanceNumber" : $4,
3276 "contentDate" : UTF8ToString($5),
3277 "contentTime" : UTF8ToString($6),
3278 });
3270 window.dispatchEvent(customEvent); 3279 window.dispatchEvent(customEvent);
3271 }, 3280 },
3272 viewport.GetCanvasId().c_str(), 3281 viewport.GetCanvasId().c_str(),
3273 static_cast<int>(currentFrame), 3282 static_cast<int>(currentFrame),
3274 static_cast<int>(countFrames), 3283 static_cast<int>(countFrames),
3275 quality, instanceNumber); 3284 quality,
3285 instanceNumber,
3286 contentDate.c_str(),
3287 contentTime.c_str());
3276 3288
3277 UpdateReferenceLines(); 3289 UpdateReferenceLines();
3278 } 3290 }
3279 3291
3280 virtual void SignalCrosshair(const ViewerViewport& viewport, 3292 virtual void SignalCrosshair(const ViewerViewport& viewport,