Mercurial > hg > orthanc-stone
comparison Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp @ 1811:fdc6a8089eb9
hovering of annotations in Stone Web viewer
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 25 May 2021 11:29:53 +0200 |
parents | 79a5838739a6 |
children | db341679dc9f |
comparison
equal
deleted
inserted
replaced
1810:b05d5f0d014f | 1811:fdc6a8089eb9 |
---|---|
1188 size_t currentFrame, | 1188 size_t currentFrame, |
1189 size_t countFrames, | 1189 size_t countFrames, |
1190 DisplayedFrameQuality quality, | 1190 DisplayedFrameQuality quality, |
1191 unsigned int instanceNumber) = 0; | 1191 unsigned int instanceNumber) = 0; |
1192 | 1192 |
1193 // "click" is a 3D vector in world coordinates | |
1193 virtual void SignalCrosshair(const ViewerViewport& viewport, | 1194 virtual void SignalCrosshair(const ViewerViewport& viewport, |
1194 const OrthancStone::Vector& click) = 0; | 1195 const OrthancStone::Vector& click) = 0; |
1195 | 1196 |
1196 virtual void SignalSynchronizedBrowsing(const ViewerViewport& viewport, | 1197 virtual void SignalSynchronizedBrowsing(const ViewerViewport& viewport, |
1197 const OrthancStone::Vector& click, | 1198 const OrthancStone::Vector& click, |
1575 double centralPhysicalHeight_; | 1576 double centralPhysicalHeight_; |
1576 | 1577 |
1577 bool hasFocusOnInstance_; | 1578 bool hasFocusOnInstance_; |
1578 std::string focusSopInstanceUid_; | 1579 std::string focusSopInstanceUid_; |
1579 size_t focusFrameNumber_; | 1580 size_t focusFrameNumber_; |
1580 | 1581 |
1582 // The coordinates of OsiriX annotations are expressed in 3D world coordinates | |
1581 boost::shared_ptr<OrthancStone::OsiriX::CollectionOfAnnotations> annotations_; | 1583 boost::shared_ptr<OrthancStone::OsiriX::CollectionOfAnnotations> annotations_; |
1584 | |
1585 // The coordinates of Stone annotations are expressed in 2D | |
1586 // coordinates of the current texture, with (0,0) corresponding to | |
1587 // the center of the top-left pixel | |
1582 boost::shared_ptr<OrthancStone::AnnotationsSceneLayer> annotationsStone_; | 1588 boost::shared_ptr<OrthancStone::AnnotationsSceneLayer> annotationsStone_; |
1583 | 1589 |
1584 void ScheduleNextPrefetch() | 1590 void ScheduleNextPrefetch() |
1585 { | 1591 { |
1586 while (!prefetchQueue_.empty()) | 1592 while (!prefetchQueue_.empty()) |
2643 | 2649 |
2644 return DefaultViewportInteractor::CreateTracker( | 2650 return DefaultViewportInteractor::CreateTracker( |
2645 viewport, event, viewportWidth, viewportHeight); | 2651 viewport, event, viewportWidth, viewportHeight); |
2646 } | 2652 } |
2647 } | 2653 } |
2654 | |
2655 virtual bool HasMouseHover() const ORTHANC_OVERRIDE | |
2656 { | |
2657 return true; | |
2658 } | |
2659 | |
2660 virtual void HandleMouseHover(OrthancStone::IViewport& viewport, | |
2661 const OrthancStone::PointerEvent& event) ORTHANC_OVERRIDE | |
2662 { | |
2663 std::unique_ptr<OrthancStone::IViewport::ILock> lock(viewport.Lock()); | |
2664 | |
2665 if (viewer_.annotationsStone_->SetMouseHover(event.GetMainPosition(), lock->GetController().GetScene())) | |
2666 { | |
2667 viewer_.annotationsStone_->Render(lock->GetController().GetScene()); | |
2668 lock->Invalidate(); | |
2669 } | |
2670 } | |
2648 }; | 2671 }; |
2649 | 2672 |
2650 | 2673 |
2651 void SetMouseButtonActions(WebViewerAction leftAction, | 2674 void SetMouseButtonActions(WebViewerAction leftAction, |
2652 WebViewerAction middleAction, | 2675 WebViewerAction middleAction, |
2873 } | 2896 } |
2874 | 2897 |
2875 virtual void SignalCrosshair(const ViewerViewport& viewport, | 2898 virtual void SignalCrosshair(const ViewerViewport& viewport, |
2876 const OrthancStone::Vector& click) ORTHANC_OVERRIDE | 2899 const OrthancStone::Vector& click) ORTHANC_OVERRIDE |
2877 { | 2900 { |
2901 if (click.size() != 3u) | |
2902 { | |
2903 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); | |
2904 } | |
2905 | |
2878 for (Viewports::const_iterator it = allViewports_.begin(); it != allViewports_.end(); ++it) | 2906 for (Viewports::const_iterator it = allViewports_.begin(); it != allViewports_.end(); ++it) |
2879 { | 2907 { |
2880 // TODO - One could check the "Frame Of Reference UID" here | 2908 // TODO - One could check the "Frame Of Reference UID" here |
2881 assert(it->second.get() != NULL); | 2909 assert(it->second.get() != NULL); |
2882 if (it->second.get() != &viewport) | 2910 if (it->second.get() != &viewport) |