Mercurial > hg > orthanc-stone
diff 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 |
line wrap: on
line diff
--- a/Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp Thu May 20 19:11:44 2021 +0200 +++ b/Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp Tue May 25 11:29:53 2021 +0200 @@ -1190,6 +1190,7 @@ DisplayedFrameQuality quality, unsigned int instanceNumber) = 0; + // "click" is a 3D vector in world coordinates virtual void SignalCrosshair(const ViewerViewport& viewport, const OrthancStone::Vector& click) = 0; @@ -1577,8 +1578,13 @@ bool hasFocusOnInstance_; std::string focusSopInstanceUid_; size_t focusFrameNumber_; - + + // The coordinates of OsiriX annotations are expressed in 3D world coordinates boost::shared_ptr<OrthancStone::OsiriX::CollectionOfAnnotations> annotations_; + + // The coordinates of Stone annotations are expressed in 2D + // coordinates of the current texture, with (0,0) corresponding to + // the center of the top-left pixel boost::shared_ptr<OrthancStone::AnnotationsSceneLayer> annotationsStone_; void ScheduleNextPrefetch() @@ -2645,6 +2651,23 @@ viewport, event, viewportWidth, viewportHeight); } } + + virtual bool HasMouseHover() const ORTHANC_OVERRIDE + { + return true; + } + + virtual void HandleMouseHover(OrthancStone::IViewport& viewport, + const OrthancStone::PointerEvent& event) ORTHANC_OVERRIDE + { + std::unique_ptr<OrthancStone::IViewport::ILock> lock(viewport.Lock()); + + if (viewer_.annotationsStone_->SetMouseHover(event.GetMainPosition(), lock->GetController().GetScene())) + { + viewer_.annotationsStone_->Render(lock->GetController().GetScene()); + lock->Invalidate(); + } + } }; @@ -2875,6 +2898,11 @@ virtual void SignalCrosshair(const ViewerViewport& viewport, const OrthancStone::Vector& click) ORTHANC_OVERRIDE { + if (click.size() != 3u) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); + } + for (Viewports::const_iterator it = allViewports_.begin(); it != allViewports_.end(); ++it) { // TODO - One could check the "Frame Of Reference UID" here