Mercurial > hg > orthanc-stone
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 } |