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)