Mercurial > hg > orthanc-stone
diff Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp @ 2094:7c3d65166c26
partial integration dicom-sr->mainline
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 08 Nov 2023 14:54:15 +0100 |
parents | 07964689cb0b |
children | ec676dbe85ac |
line wrap: on
line diff
--- a/Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp Tue Nov 07 18:11:13 2023 +0100 +++ b/Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp Wed Nov 08 14:54:15 2023 +0100 @@ -204,6 +204,84 @@ +class IFramesCollection : public boost::noncopyable +{ +public: + virtual ~IFramesCollection() + { + } + + virtual size_t GetFramesCount() const = 0; + + virtual const OrthancStone::DicomInstanceParameters& GetInstanceOfFrame(size_t frameIndex) const = 0; + + virtual unsigned int GetFrameNumberInInstance(size_t frameIndex) const = 0; + + virtual bool LookupFrame(size_t& frameIndex, + const std::string& sopInstanceUid, + unsigned int frameNumber) const = 0; + + virtual bool FindClosestFrame(size_t& frameIndex, + const OrthancStone::Vector& point, + double maximumDistance) const = 0; + + static OrthancStone::CoordinateSystem3D GetFrameGeometry(const IFramesCollection& frames, + size_t frameIndex) + { + return frames.GetInstanceOfFrame(frameIndex).GetFrameGeometry(frames.GetFrameNumberInInstance(frameIndex)); + } +}; + + +class SortedFramesCollection : public IFramesCollection +{ +private: + std::unique_ptr<OrthancStone::SortedFrames> frames_; + +public: + SortedFramesCollection(OrthancStone::SortedFrames* frames) + { + if (frames == NULL) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); + } + else + { + frames_.reset(frames); + } + } + + virtual size_t GetFramesCount() const ORTHANC_OVERRIDE + { + return frames_->GetFramesCount(); + } + + const OrthancStone::DicomInstanceParameters& GetInstanceOfFrame(size_t frameIndex) const ORTHANC_OVERRIDE + { + return frames_->GetInstanceOfFrame(frameIndex); + } + + virtual unsigned int GetFrameNumberInInstance(size_t frameIndex) const ORTHANC_OVERRIDE + { + return frames_->GetFrameNumberInInstance(frameIndex); + } + + virtual bool LookupFrame(size_t& frameIndex, + const std::string& sopInstanceUid, + unsigned int frameNumber) const ORTHANC_OVERRIDE + { + return frames_->LookupFrame(frameIndex, sopInstanceUid, frameNumber); + } + + virtual bool FindClosestFrame(size_t& frameIndex, + const OrthancStone::Vector& point, + double maximumDistance) const ORTHANC_OVERRIDE + { + return frames_->FindClosestFrame(frameIndex, point, maximumDistance); + }; +}; + + class VirtualSeries : public boost::noncopyable { private: