Mercurial > hg > orthanc-stone
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, |