comparison 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
comparison
equal deleted inserted replaced
121:e66b2c757790 122:e3433dabfb8d
22 #pragma once 22 #pragma once
23 23
24 #include "CoordinateSystem3D.h" 24 #include "CoordinateSystem3D.h"
25 #include "../Viewport/CairoContext.h" 25 #include "../Viewport/CairoContext.h"
26 26
27 #include <Plugins/Samples/Common/IOrthancConnection.h> 27 #include <Plugins/Samples/Common/FullOrthancDataset.h>
28 28
29 #include <list> 29 #include <list>
30 30
31 namespace OrthancStone 31 namespace OrthancStone
32 { 32 {
33 class DicomStructureSet : public boost::noncopyable 33 class DicomStructureSet : public boost::noncopyable
34 { 34 {
35 private: 35 private:
36 struct ReferencedSlice
37 {
38 std::string seriesInstanceUid_;
39 CoordinateSystem3D geometry_;
40 double thickness_;
41
42 ReferencedSlice()
43 {
44 }
45
46 ReferencedSlice(const std::string& seriesInstanceUid,
47 const CoordinateSystem3D& geometry,
48 double thickness) :
49 seriesInstanceUid_(seriesInstanceUid),
50 geometry_(geometry),
51 thickness_(thickness)
52 {
53 }
54 };
55
56 typedef std::map<std::string, ReferencedSlice> ReferencedSlices;
57
36 typedef std::list<Vector> Points; 58 typedef std::list<Vector> Points;
37 59
38 struct Polygon 60 class Polygon
39 { 61 {
40 double projectionAlongNormal_; 62 private:
41 double sliceThickness_; // In millimeters 63 std::string sopInstanceUid_;
42 Points points_; 64 bool hasSlice_;
65 Vector normal_;
66 double projectionAlongNormal_;
67 double sliceThickness_; // In millimeters
68 Points points_;
69
70 void CheckPoint(const Vector& v);
71
72 public:
73 Polygon(const std::string& sopInstanceUid) :
74 sopInstanceUid_(sopInstanceUid),
75 hasSlice_(false)
76 {
77 }
78
79 void AddPoint(const Vector& v);
80
81 bool UpdateReferencedSlice(const ReferencedSlices& slices);
82
83 bool IsOnSlice(const CoordinateSystem3D& geometry) const;
84
85 const std::string& GetSopInstanceUid() const
86 {
87 return sopInstanceUid_;
88 }
89
90 const Points& GetPoints() const
91 {
92 return points_;
93 }
43 }; 94 };
44 95
45 typedef std::list<Polygon> Polygons; 96 typedef std::list<Polygon> Polygons;
46 97
47 struct Structure 98 struct Structure
54 uint8_t blue_; 105 uint8_t blue_;
55 }; 106 };
56 107
57 typedef std::vector<Structure> Structures; 108 typedef std::vector<Structure> Structures;
58 109
59 Structures structures_; 110 Structures structures_;
60 std::string parentSeriesId_; 111 ReferencedSlices referencedSlices_;
61 Vector normal_;
62
63 CoordinateSystem3D ExtractSliceGeometry(double& sliceThickness,
64 OrthancPlugins::IOrthancConnection& orthanc,
65 const OrthancPlugins::IDicomDataset& tags,
66 size_t contourIndex,
67 size_t sliceIndex);
68 112
69 const Structure& GetStructure(size_t index) const; 113 const Structure& GetStructure(size_t index) const;
70 114
71 bool IsPolygonOnSlice(const Polygon& polygon,
72 const CoordinateSystem3D& geometry) const;
73
74
75 public: 115 public:
76 DicomStructureSet(OrthancPlugins::IOrthancConnection& orthanc, 116 DicomStructureSet(const OrthancPlugins::FullOrthancDataset& instance);
77 const std::string& instanceId);
78 117
79 size_t GetStructureCount() const 118 size_t GetStructureCount() const
80 { 119 {
81 return structures_.size(); 120 return structures_.size();
82 } 121 }
90 void GetStructureColor(uint8_t& red, 129 void GetStructureColor(uint8_t& red,
91 uint8_t& green, 130 uint8_t& green,
92 uint8_t& blue, 131 uint8_t& blue,
93 size_t index) const; 132 size_t index) const;
94 133
95 const Vector& GetNormal() const 134 void GetReferencedInstances(std::set<std::string>& instances);
96 { 135
97 return normal_; 136 void AddReferencedSlice(const std::string& sopInstanceUid,
98 } 137 const std::string& seriesInstanceUid,
138 const CoordinateSystem3D& geometry,
139 double thickness);
140
141 void AddReferencedSlice(const Orthanc::DicomMap& dataset);
142
143 void CheckReferencedSlices();
99 144
100 void Render(CairoContext& context, 145 void Render(CairoContext& context,
101 const CoordinateSystem3D& slice) const; 146 const CoordinateSystem3D& slice);
147
148 Vector GetNormal() const;
149
150 static DicomStructureSet* SynchronousLoad(OrthancPlugins::IOrthancConnection& orthanc,
151 const std::string& instanceId);
102 }; 152 };
103 } 153 }