Mercurial > hg > orthanc-stone
diff Framework/Toolbox/DicomStructureSet.h @ 122:e3433dabfb8d wasm
refactoring DicomStructureSet
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 06 Oct 2017 17:25:08 +0200 |
parents | 2eca030792aa |
children | 44fc253d4876 |
line wrap: on
line diff
--- a/Framework/Toolbox/DicomStructureSet.h Wed Oct 04 17:53:47 2017 +0200 +++ b/Framework/Toolbox/DicomStructureSet.h Fri Oct 06 17:25:08 2017 +0200 @@ -24,7 +24,7 @@ #include "CoordinateSystem3D.h" #include "../Viewport/CairoContext.h" -#include <Plugins/Samples/Common/IOrthancConnection.h> +#include <Plugins/Samples/Common/FullOrthancDataset.h> #include <list> @@ -33,13 +33,64 @@ class DicomStructureSet : public boost::noncopyable { private: + struct ReferencedSlice + { + std::string seriesInstanceUid_; + CoordinateSystem3D geometry_; + double thickness_; + + ReferencedSlice() + { + } + + ReferencedSlice(const std::string& seriesInstanceUid, + const CoordinateSystem3D& geometry, + double thickness) : + seriesInstanceUid_(seriesInstanceUid), + geometry_(geometry), + thickness_(thickness) + { + } + }; + + typedef std::map<std::string, ReferencedSlice> ReferencedSlices; + typedef std::list<Vector> Points; - struct Polygon + class Polygon { - double projectionAlongNormal_; - double sliceThickness_; // In millimeters - Points points_; + private: + std::string sopInstanceUid_; + bool hasSlice_; + Vector normal_; + double projectionAlongNormal_; + double sliceThickness_; // In millimeters + Points points_; + + void CheckPoint(const Vector& v); + + public: + Polygon(const std::string& sopInstanceUid) : + sopInstanceUid_(sopInstanceUid), + hasSlice_(false) + { + } + + void AddPoint(const Vector& v); + + bool UpdateReferencedSlice(const ReferencedSlices& slices); + + bool IsOnSlice(const CoordinateSystem3D& geometry) const; + + const std::string& GetSopInstanceUid() const + { + return sopInstanceUid_; + } + + const Points& GetPoints() const + { + return points_; + } }; typedef std::list<Polygon> Polygons; @@ -56,25 +107,13 @@ typedef std::vector<Structure> Structures; - Structures structures_; - std::string parentSeriesId_; - Vector normal_; - - CoordinateSystem3D ExtractSliceGeometry(double& sliceThickness, - OrthancPlugins::IOrthancConnection& orthanc, - const OrthancPlugins::IDicomDataset& tags, - size_t contourIndex, - size_t sliceIndex); + Structures structures_; + ReferencedSlices referencedSlices_; const Structure& GetStructure(size_t index) const; - bool IsPolygonOnSlice(const Polygon& polygon, - const CoordinateSystem3D& geometry) const; - - public: - DicomStructureSet(OrthancPlugins::IOrthancConnection& orthanc, - const std::string& instanceId); + DicomStructureSet(const OrthancPlugins::FullOrthancDataset& instance); size_t GetStructureCount() const { @@ -92,12 +131,23 @@ uint8_t& blue, size_t index) const; - const Vector& GetNormal() const - { - return normal_; - } + void GetReferencedInstances(std::set<std::string>& instances); + + void AddReferencedSlice(const std::string& sopInstanceUid, + const std::string& seriesInstanceUid, + const CoordinateSystem3D& geometry, + double thickness); + + void AddReferencedSlice(const Orthanc::DicomMap& dataset); + + void CheckReferencedSlices(); void Render(CairoContext& context, - const CoordinateSystem3D& slice) const; + const CoordinateSystem3D& slice); + + Vector GetNormal() const; + + static DicomStructureSet* SynchronousLoad(OrthancPlugins::IOrthancConnection& orthanc, + const std::string& instanceId); }; }