Mercurial > hg > orthanc-stone
annotate Framework/Toolbox/SortedFrames.cpp @ 1478:fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 18 Jun 2020 16:01:00 +0200 |
parents | |
children | 5e3cfe87a873 |
rev | line source |
---|---|
1478
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1 /** |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
2 * Stone of Orthanc |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
4 * Department, University Hospital of Liege, Belgium |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
5 * Copyright (C) 2017-2020 Osimis S.A., Belgium |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
6 * |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
7 * This program is free software: you can redistribute it and/or |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
8 * modify it under the terms of the GNU Affero General Public License |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
9 * as published by the Free Software Foundation, either version 3 of |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
10 * the License, or (at your option) any later version. |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
11 * |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
12 * This program is distributed in the hope that it will be useful, but |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
13 * WITHOUT ANY WARRANTY; without even the implied warranty of |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
15 * Affero General Public License for more details. |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
16 * |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
17 * You should have received a copy of the GNU Affero General Public License |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
19 **/ |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
20 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
21 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
22 #include "SortedFrames.h" |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
23 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
24 #include <OrthancException.h> |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
25 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
26 #include "GeometryToolbox.h" |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
27 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
28 namespace OrthancStone |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
29 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
30 SortedFrames::Instance::Instance(const Orthanc::DicomMap& tags) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
31 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
32 tags_.Assign(tags); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
33 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
34 if (!tags.LookupStringValue(sopInstanceUid_, Orthanc::DICOM_TAG_SOP_INSTANCE_UID, false)) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
35 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
36 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
37 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
38 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
39 uint32_t tmp; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
40 if (tags.ParseUnsignedInteger32(tmp, Orthanc::DICOM_TAG_NUMBER_OF_FRAMES)) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
41 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
42 numberOfFrames_ = tmp; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
43 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
44 else |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
45 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
46 numberOfFrames_ = 1; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
47 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
48 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
49 hasPosition_ = ( |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
50 LinearAlgebra::ParseVector(position_, tags, Orthanc::DICOM_TAG_IMAGE_POSITION_PATIENT) && |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
51 position_.size() == 3 && |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
52 GeometryToolbox::ComputeNormal(normal_, tags)); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
53 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
54 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
55 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
56 const Vector& SortedFrames::Instance::GetNormal() const |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
57 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
58 if (hasPosition_) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
59 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
60 return normal_; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
61 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
62 else |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
63 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
64 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
65 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
66 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
67 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
68 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
69 const Vector& SortedFrames::Instance::GetPosition() const |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
70 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
71 if (hasPosition_) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
72 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
73 return position_; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
74 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
75 else |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
76 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
77 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
78 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
79 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
80 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
81 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
82 SortedFrames::Frame::Frame(const Instance& instance, |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
83 unsigned int frameIndex) : |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
84 instance_(instance), |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
85 frameIndex_(frameIndex) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
86 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
87 if (frameIndex >= instance.GetNumberOfFrames()) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
88 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
89 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
90 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
91 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
92 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
93 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
94 const SortedFrames::Instance& SortedFrames::GetInstance(size_t index) const |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
95 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
96 if (index >= instances_.size()) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
97 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
98 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
99 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
100 else |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
101 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
102 assert(instances_[index] != NULL); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
103 return *instances_[index]; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
104 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
105 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
106 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
107 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
108 const SortedFrames::Frame& SortedFrames::GetFrame(size_t index) const |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
109 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
110 if (!sorted_) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
111 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
112 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls, |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
113 "Sort() has not been called"); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
114 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
115 if (index >= frames_.size()) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
116 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
117 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
118 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
119 else |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
120 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
121 return frames_[index]; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
122 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
123 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
124 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
125 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
126 SortedFrames::~SortedFrames() |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
127 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
128 for (size_t i = 0; i < instances_.size(); i++) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
129 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
130 assert(instances_[i] != NULL); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
131 delete instances_[i]; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
132 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
133 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
134 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
135 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
136 void SortedFrames::AddInstance(const Orthanc::DicomMap& tags) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
137 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
138 std::unique_ptr<Instance> instance(new Instance(tags)); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
139 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
140 std::string studyInstanceUid, seriesInstanceUid; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
141 if (!tags.LookupStringValue(studyInstanceUid, Orthanc::DICOM_TAG_STUDY_INSTANCE_UID, false) || |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
142 !tags.LookupStringValue(seriesInstanceUid, Orthanc::DICOM_TAG_SERIES_INSTANCE_UID, false)) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
143 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
144 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
145 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
146 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
147 if (instances_.empty()) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
148 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
149 studyInstanceUid_ = studyInstanceUid; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
150 seriesInstanceUid_ = seriesInstanceUid; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
151 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
152 else |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
153 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
154 if (studyInstanceUid_ != studyInstanceUid || |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
155 seriesInstanceUid_ != seriesInstanceUid) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
156 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
157 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange, |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
158 "Mixing instances from different series"); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
159 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
160 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
161 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
162 instances_.push_back(instance.release()); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
163 sorted_ = false; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
164 frames_.clear(); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
165 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
166 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
167 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
168 void SortedFrames::AddFramesOfInstance(std::set<size_t>& remainingInstances, |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
169 size_t index) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
170 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
171 assert(instances_[index] != NULL); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
172 const Instance& instance = *instances_[index]; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
173 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
174 for (unsigned int i = 0; i < instance.GetNumberOfFrames(); i++) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
175 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
176 frames_.push_back(Frame(instance, i)); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
177 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
178 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
179 assert(remainingInstances.find(index) != remainingInstances.end()); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
180 remainingInstances.erase(index); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
181 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
182 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
183 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
184 namespace |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
185 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
186 template<typename T> |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
187 class SortableItem |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
188 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
189 private: |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
190 T value_; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
191 size_t instance_; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
192 std::string sopInstanceUid_; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
193 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
194 public: |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
195 SortableItem(const T& value, |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
196 size_t instance, |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
197 const std::string& sopInstanceUid) : |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
198 value_(value), |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
199 instance_(instance), |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
200 sopInstanceUid_(sopInstanceUid) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
201 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
202 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
203 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
204 size_t GetInstanceIndex() const |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
205 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
206 return instance_; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
207 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
208 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
209 bool operator< (const SortableItem& other) const |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
210 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
211 return (value_ < other.value_ || |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
212 (value_ == other.value_ && |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
213 sopInstanceUid_ < other.sopInstanceUid_)); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
214 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
215 }; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
216 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
217 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
218 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
219 void SortedFrames::SortUsingIntegerTag(std::set<size_t>& remainingInstances, |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
220 const Orthanc::DicomTag& tag) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
221 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
222 std::vector< SortableItem<int32_t> > items; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
223 items.reserve(remainingInstances.size()); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
224 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
225 for (std::set<size_t>::const_iterator it = remainingInstances.begin(); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
226 it != remainingInstances.end(); ++it) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
227 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
228 assert(instances_[*it] != NULL); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
229 const Instance& instance = *instances_[*it]; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
230 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
231 int32_t value; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
232 std::string sopInstanceUid; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
233 if (instance.GetTags().ParseInteger32(value, tag) && |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
234 instance.GetTags().LookupStringValue( |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
235 sopInstanceUid, Orthanc::DICOM_TAG_SOP_INSTANCE_UID, false)) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
236 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
237 items.push_back(SortableItem<int32_t>(value, *it, sopInstanceUid)); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
238 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
239 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
240 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
241 std::sort(items.begin(), items.end()); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
242 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
243 for (size_t i = 0; i < items.size(); i++) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
244 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
245 AddFramesOfInstance(remainingInstances, items[i].GetInstanceIndex()); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
246 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
247 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
248 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
249 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
250 void SortedFrames::SortUsingSopInstanceUid(std::set<size_t>& remainingInstances) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
251 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
252 std::vector<SortableItem<int32_t> > items; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
253 items.reserve(remainingInstances.size()); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
254 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
255 for (std::set<size_t>::const_iterator it = remainingInstances.begin(); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
256 it != remainingInstances.end(); ++it) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
257 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
258 assert(instances_[*it] != NULL); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
259 const Instance& instance = *instances_[*it]; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
260 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
261 std::string sopInstanceUid; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
262 if (instance.GetTags().LookupStringValue( |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
263 sopInstanceUid, Orthanc::DICOM_TAG_SOP_INSTANCE_UID, false)) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
264 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
265 items.push_back(SortableItem<int32_t>(0 /* arbitrary value */, *it, sopInstanceUid)); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
266 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
267 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
268 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
269 std::sort(items.begin(), items.end()); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
270 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
271 for (size_t i = 0; i < items.size(); i++) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
272 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
273 AddFramesOfInstance(remainingInstances, items[i].GetInstanceIndex()); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
274 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
275 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
276 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
277 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
278 void SortedFrames::SortUsing3DLocation(std::set<size_t>& remainingInstances) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
279 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
280 /** |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
281 * Compute the mean of the normal vectors, using the recursive |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
282 * formula for arithmetic means for numerical stability. |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
283 * https://diego.assencio.com/?index=c34d06f4f4de2375658ed41f70177d59 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
284 **/ |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
285 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
286 Vector meanNormal; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
287 LinearAlgebra::AssignVector(meanNormal, 0, 0, 0); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
288 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
289 unsigned int n = 0; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
290 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
291 for (std::set<size_t>::const_iterator it = remainingInstances.begin(); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
292 it != remainingInstances.end(); ++it) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
293 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
294 assert(instances_[*it] != NULL); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
295 const Instance& instance = *instances_[*it]; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
296 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
297 if (instance.HasPosition()) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
298 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
299 n += 1; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
300 meanNormal += (instance.GetNormal() - meanNormal) / static_cast<float>(n); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
301 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
302 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
303 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
304 std::vector<SortableItem<float> > items; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
305 items.reserve(n); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
306 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
307 for (std::set<size_t>::const_iterator it = remainingInstances.begin(); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
308 it != remainingInstances.end(); ++it) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
309 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
310 assert(instances_[*it] != NULL); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
311 const Instance& instance = *instances_[*it]; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
312 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
313 std::string sopInstanceUid; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
314 if (instance.HasPosition() && |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
315 instance.GetTags().LookupStringValue( |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
316 sopInstanceUid, Orthanc::DICOM_TAG_SOP_INSTANCE_UID, false)) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
317 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
318 double p = LinearAlgebra::DotProduct(meanNormal, instance.GetPosition()); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
319 items.push_back(SortableItem<float>(p, *it, sopInstanceUid)); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
320 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
321 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
322 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
323 assert(items.size() <= n); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
324 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
325 std::sort(items.begin(), items.end()); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
326 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
327 for (size_t i = 0; i < items.size(); i++) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
328 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
329 AddFramesOfInstance(remainingInstances, items[i].GetInstanceIndex()); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
330 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
331 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
332 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
333 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
334 size_t SortedFrames::GetFramesCount() const |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
335 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
336 if (sorted_) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
337 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
338 return frames_.size(); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
339 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
340 else |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
341 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
342 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls, |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
343 "Sort() has not been called"); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
344 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
345 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
346 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
347 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
348 void SortedFrames::Sort() |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
349 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
350 if (!sorted_) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
351 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
352 size_t totalFrames = 0; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
353 std::set<size_t> remainingInstances; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
354 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
355 for (size_t i = 0; i < instances_.size(); i++) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
356 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
357 assert(instances_[i] != NULL); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
358 totalFrames += instances_[i]->GetNumberOfFrames(); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
359 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
360 remainingInstances.insert(i); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
361 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
362 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
363 frames_.clear(); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
364 frames_.reserve(totalFrames); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
365 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
366 SortUsingIntegerTag(remainingInstances, Orthanc::DICOM_TAG_INSTANCE_NUMBER); // VR is "IS" |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
367 SortUsingIntegerTag(remainingInstances, Orthanc::DICOM_TAG_IMAGE_INDEX); // VR is "US" |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
368 SortUsing3DLocation(remainingInstances); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
369 SortUsingSopInstanceUid(remainingInstances); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
370 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
371 // The following could in theory happen if several instances |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
372 // have the same SOPInstanceUID, no ordering is available |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
373 for (std::set<size_t>::const_iterator it = remainingInstances.begin(); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
374 it != remainingInstances.end(); it++) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
375 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
376 AddFramesOfInstance(remainingInstances, *it); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
377 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
378 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
379 if (frames_.size() != totalFrames || |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
380 !remainingInstances.empty()) |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
381 { |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
382 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
383 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
384 |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
385 sorted_ = true; |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
386 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
387 } |
fab6c6e795a3
Framework/Toolbox/SortedFrames.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
388 } |