Mercurial > hg > orthanc-stone
annotate RenderingPlugin/Sources/Plugin.cpp @ 1885:ddaee6b96501
retrieving rt-struct info
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 14 Jan 2022 19:04:05 +0100 |
parents | 0c6923982fdd |
children | ca89fec8c48f |
rev | line source |
---|---|
1877
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1 /** |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
2 * Stone of Orthanc |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
4 * Department, University Hospital of Liege, Belgium |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
5 * Copyright (C) 2017-2022 Osimis S.A., Belgium |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
6 * Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
7 * |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
8 * This program is free software: you can redistribute it and/or |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
9 * modify it under the terms of the GNU General Public License as |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
10 * published by the Free Software Foundation, either version 3 of the |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
11 * License, or (at your option) any later version. |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
12 * |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
13 * This program is distributed in the hope that it will be useful, but |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
14 * WITHOUT ANY WARRANTY; without even the implied warranty of |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
16 * General Public License for more details. |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
17 * |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
18 * You should have received a copy of the GNU General Public License |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
19 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
20 **/ |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
21 |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
22 |
1885
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
23 #include "OrthancPluginConnection.h" |
1877
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
24 #include "../Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h" |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
25 |
1882
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
26 #include "../../OrthancStone/Sources/Toolbox/AffineTransform2D.h" |
1883
fba6e550e0ee
apply rescale slope/intercept in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1882
diff
changeset
|
27 #include "../../OrthancStone/Sources/Toolbox/DicomInstanceParameters.h" |
1885
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
28 #include "../../OrthancStone/Sources/Toolbox/DicomStructureSet.h" |
1882
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
29 |
1877
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
30 #include <EmbeddedResources.h> |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
31 |
1882
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
32 #include <Images/Image.h> |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
33 #include <Images/ImageProcessing.h> |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
34 #include <Images/NumpyWriter.h> |
1877
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
35 #include <Logging.h> |
1884
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
36 #include <SerializationToolbox.h> |
1885
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
37 #include <Toolbox.h> |
1877
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
38 |
1882
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
39 #include <boost/math/constants/constants.hpp> |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
40 |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
41 |
1885
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
42 class DicomStructureCache : public boost::noncopyable |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
43 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
44 private: |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
45 boost::mutex mutex_; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
46 std::string instanceId_; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
47 std::unique_ptr<OrthancStone::DicomStructureSet> rtstruct_; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
48 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
49 DicomStructureCache() // Singleton design pattern |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
50 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
51 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
52 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
53 public: |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
54 void Invalidate(const std::string& instanceId) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
55 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
56 boost::mutex::scoped_lock lock(mutex_); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
57 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
58 if (instanceId_ == instanceId) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
59 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
60 rtstruct_.reset(NULL); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
61 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
62 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
63 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
64 static DicomStructureCache& GetSingleton() |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
65 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
66 static DicomStructureCache instance; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
67 return instance; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
68 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
69 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
70 class Accessor : public boost::noncopyable |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
71 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
72 private: |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
73 boost::mutex::scoped_lock lock_; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
74 std::string instanceId_; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
75 const OrthancStone::DicomStructureSet* rtstruct_; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
76 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
77 public: |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
78 Accessor(DicomStructureCache& that, |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
79 const std::string& instanceId) : |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
80 lock_(that.mutex_), |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
81 instanceId_(instanceId), |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
82 rtstruct_(NULL) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
83 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
84 if (that.instanceId_ == instanceId && |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
85 that.rtstruct_.get() != NULL) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
86 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
87 rtstruct_ = that.rtstruct_.get(); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
88 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
89 else |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
90 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
91 try |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
92 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
93 OrthancStone::OrthancPluginConnection connection; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
94 OrthancStone::FullOrthancDataset dataset(connection, "/instances/" + instanceId + "/tags?ignore-length=3006-0050"); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
95 that.rtstruct_.reset(new OrthancStone::DicomStructureSet(dataset)); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
96 that.instanceId_ = instanceId; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
97 rtstruct_ = that.rtstruct_.get(); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
98 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
99 catch (Orthanc::OrthancException&) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
100 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
101 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
102 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
103 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
104 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
105 const std::string& GetInstanceId() const |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
106 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
107 return instanceId_; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
108 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
109 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
110 bool IsValid() const |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
111 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
112 return rtstruct_ != NULL; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
113 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
114 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
115 const OrthancStone::DicomStructureSet& GetRtStruct() const |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
116 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
117 if (IsValid()) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
118 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
119 return *rtstruct_; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
120 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
121 else |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
122 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
123 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
124 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
125 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
126 }; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
127 }; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
128 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
129 |
1882
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
130 static Orthanc::PixelFormat Convert(OrthancPluginPixelFormat format) |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
131 { |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
132 switch (format) |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
133 { |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
134 case OrthancPluginPixelFormat_RGB24: |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
135 return Orthanc::PixelFormat_RGB24; |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
136 |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
137 case OrthancPluginPixelFormat_Grayscale8: |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
138 return Orthanc::PixelFormat_Grayscale8; |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
139 |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
140 case OrthancPluginPixelFormat_Grayscale16: |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
141 return Orthanc::PixelFormat_Grayscale16; |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
142 |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
143 case OrthancPluginPixelFormat_SignedGrayscale16: |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
144 return Orthanc::PixelFormat_SignedGrayscale16; |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
145 |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
146 default: |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
147 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
148 } |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
149 } |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
150 |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
151 |
1884
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
152 static bool ParseBoolean(const std::string& key, |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
153 const std::string& value) |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
154 { |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
155 bool result; |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
156 |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
157 if (Orthanc::SerializationToolbox::ParseBoolean(result, value)) |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
158 { |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
159 return result; |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
160 } |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
161 else |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
162 { |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
163 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange, |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
164 "Bad value for " + key + ": " + value); |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
165 } |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
166 } |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
167 |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
168 |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
169 static double ParseDouble(const std::string& key, |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
170 const std::string& value) |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
171 { |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
172 double result; |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
173 |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
174 if (Orthanc::SerializationToolbox::ParseDouble(result, value)) |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
175 { |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
176 return result; |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
177 } |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
178 else |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
179 { |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
180 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange, |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
181 "Bad value for " + key + ": " + value); |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
182 } |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
183 } |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
184 |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
185 |
1882
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
186 static void RenderNumpyFrame(OrthancPluginRestOutput* output, |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
187 const char* url, |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
188 const OrthancPluginHttpRequest* request) |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
189 { |
1884
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
190 double angleRadians = 0; |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
191 double scaling = 1; |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
192 double offsetX = 0; |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
193 double offsetY = 0; |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
194 bool flipX = false; |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
195 bool flipY = false; |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
196 bool compress = false; |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
197 |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
198 for (uint32_t i = 0; i < request->getCount; i++) |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
199 { |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
200 std::string key(request->getKeys[i]); |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
201 std::string value(request->getValues[i]); |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
202 |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
203 if (key == "angle") |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
204 { |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
205 double angle = ParseDouble(key, value); |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
206 angleRadians = angle / 180.0 * boost::math::constants::pi<double>(); |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
207 } |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
208 else if (key == "scaling") |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
209 { |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
210 scaling = ParseDouble(key, value); |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
211 } |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
212 else if (key == "offset-x") |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
213 { |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
214 offsetX = ParseDouble(key, value); |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
215 } |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
216 else if (key == "offset-y") |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
217 { |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
218 offsetY = ParseDouble(key, value); |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
219 } |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
220 else if (key == "flip-x") |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
221 { |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
222 flipX = ParseBoolean(key, value); |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
223 } |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
224 else if (key == "flip-y") |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
225 { |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
226 flipY = ParseBoolean(key, value); |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
227 } |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
228 else if (key == "compress") |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
229 { |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
230 compress = ParseBoolean(key, value); |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
231 } |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
232 else |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
233 { |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
234 LOG(WARNING) << "Unsupported option: " << key; |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
235 } |
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
236 } |
1883
fba6e550e0ee
apply rescale slope/intercept in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1882
diff
changeset
|
237 |
fba6e550e0ee
apply rescale slope/intercept in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1882
diff
changeset
|
238 OrthancPlugins::MemoryBuffer tags; |
fba6e550e0ee
apply rescale slope/intercept in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1882
diff
changeset
|
239 if (!tags.RestApiGet("/instances/" + std::string(request->groups[0]) + "/tags", false)) |
fba6e550e0ee
apply rescale slope/intercept in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1882
diff
changeset
|
240 { |
fba6e550e0ee
apply rescale slope/intercept in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1882
diff
changeset
|
241 throw Orthanc::OrthancException(Orthanc::ErrorCode_InexistentItem); |
fba6e550e0ee
apply rescale slope/intercept in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1882
diff
changeset
|
242 } |
fba6e550e0ee
apply rescale slope/intercept in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1882
diff
changeset
|
243 |
fba6e550e0ee
apply rescale slope/intercept in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1882
diff
changeset
|
244 Json::Value json; |
fba6e550e0ee
apply rescale slope/intercept in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1882
diff
changeset
|
245 tags.ToJson(json); |
fba6e550e0ee
apply rescale slope/intercept in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1882
diff
changeset
|
246 |
fba6e550e0ee
apply rescale slope/intercept in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1882
diff
changeset
|
247 Orthanc::DicomMap m; |
fba6e550e0ee
apply rescale slope/intercept in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1882
diff
changeset
|
248 m.FromDicomAsJson(json); |
fba6e550e0ee
apply rescale slope/intercept in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1882
diff
changeset
|
249 |
fba6e550e0ee
apply rescale slope/intercept in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1882
diff
changeset
|
250 OrthancStone::DicomInstanceParameters parameters(m); |
1882
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
251 |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
252 OrthancPlugins::MemoryBuffer dicom; |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
253 dicom.GetDicomInstance(request->groups[0]); |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
254 |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
255 unsigned int frame = boost::lexical_cast<unsigned int>(request->groups[1]); |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
256 |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
257 OrthancPlugins::OrthancImage image; |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
258 image.DecodeDicomImage(dicom.GetData(), dicom.GetSize(), frame); |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
259 |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
260 Orthanc::ImageAccessor source; |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
261 source.AssignReadOnly(Convert(image.GetPixelFormat()), image.GetWidth(), image.GetHeight(), |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
262 image.GetPitch(), image.GetBuffer()); |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
263 |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
264 OrthancStone::AffineTransform2D t; |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
265 t = OrthancStone::AffineTransform2D::Combine( |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
266 OrthancStone::AffineTransform2D::CreateOffset(static_cast<double>(image.GetWidth()) / 2.0 + offsetX, |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
267 static_cast<double>(image.GetHeight()) / 2.0 + offsetY), |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
268 OrthancStone::AffineTransform2D::CreateScaling(scaling, scaling), |
1884
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
269 OrthancStone::AffineTransform2D::CreateRotation(angleRadians), |
1882
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
270 OrthancStone::AffineTransform2D::CreateOffset(-static_cast<double>(image.GetWidth()) / 2.0, |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
271 -static_cast<double>(image.GetHeight()) / 2.0), |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
272 OrthancStone::AffineTransform2D::CreateFlip(flipX, flipY, image.GetWidth(), image.GetHeight())); |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
273 |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
274 std::unique_ptr<Orthanc::ImageAccessor> modified; |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
275 |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
276 if (source.GetFormat() == Orthanc::PixelFormat_RGB24) |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
277 { |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
278 LOG(WARNING) << "Bilinear interpolation for color images is not implemented yet"; |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
279 |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
280 modified.reset(new Orthanc::Image(source.GetFormat(), source.GetWidth(), source.GetHeight(), false)); |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
281 t.Apply(*modified, source, OrthancStone::ImageInterpolation_Nearest, true); |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
282 } |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
283 else |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
284 { |
1883
fba6e550e0ee
apply rescale slope/intercept in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1882
diff
changeset
|
285 std::unique_ptr<Orthanc::ImageAccessor> converted(parameters.ConvertToFloat(source)); |
1882
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
286 |
1883
fba6e550e0ee
apply rescale slope/intercept in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1882
diff
changeset
|
287 assert(converted.get() != NULL); |
fba6e550e0ee
apply rescale slope/intercept in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1882
diff
changeset
|
288 modified.reset(new Orthanc::Image(converted->GetFormat(), converted->GetWidth(), converted->GetHeight(), false)); |
fba6e550e0ee
apply rescale slope/intercept in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1882
diff
changeset
|
289 t.Apply(*modified, *converted, OrthancStone::ImageInterpolation_Bilinear, true); |
1882
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
290 } |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
291 |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
292 assert(modified.get() != NULL); |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
293 |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
294 std::string answer; |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
295 Orthanc::NumpyWriter writer; |
1884
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
296 writer.SetCompressed(compress); |
1882
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
297 Orthanc::IImageWriter::WriteToMemory(writer, answer, *modified); |
1884
0c6923982fdd
rendering options from GET args
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1883
diff
changeset
|
298 |
1882
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
299 OrthancPluginAnswerBuffer(OrthancPlugins::GetGlobalContext(), output, |
1885
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
300 answer.c_str(), answer.size(), "application/octet-stream"); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
301 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
302 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
303 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
304 static bool IsRtStruct(const std::string& instanceId) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
305 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
306 static const char* SOP_CLASS_UID = "0008,0016"; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
307 static const char* RT_STRUCT_IOD = "1.2.840.10008.5.1.4.1.1.481.3"; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
308 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
309 std::string s; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
310 if (OrthancPlugins::RestApiGetString(s, "/instances/" + instanceId + "/content/" + SOP_CLASS_UID, false) && |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
311 !s.empty()) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
312 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
313 if (s[s.size() - 1] == '\0') // Deal with DICOM padding |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
314 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
315 s.resize(s.size() - 1); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
316 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
317 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
318 return s == RT_STRUCT_IOD; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
319 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
320 else |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
321 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
322 return false; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
323 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
324 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
325 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
326 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
327 static void ListRtStruct(OrthancPluginRestOutput* output, |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
328 const char* url, |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
329 const OrthancPluginHttpRequest* request) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
330 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
331 // This is a quick version of "/tools/find" on "SOPClassUID" (the |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
332 // latter would load all the DICOM files from disk) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
333 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
334 static const char* INSTANCES = "Instances"; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
335 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
336 Json::Value series; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
337 OrthancPlugins::RestApiGet(series, "/series?expand", false); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
338 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
339 if (series.type() != Json::arrayValue) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
340 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
341 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
342 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
343 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
344 Json::Value answer = Json::arrayValue; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
345 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
346 for (Json::Value::ArrayIndex i = 0; i < series.size(); i++) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
347 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
348 if (series[i].type() != Json::objectValue || |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
349 !series[i].isMember(INSTANCES) || |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
350 series[i][INSTANCES].type() != Json::arrayValue) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
351 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
352 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
353 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
354 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
355 const Json::Value& instances = series[i][INSTANCES]; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
356 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
357 for (Json::Value::ArrayIndex j = 0; j < instances.size(); j++) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
358 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
359 if (instances[j].type() != Json::stringValue) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
360 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
361 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
362 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
363 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
364 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
365 if (instances.size() > 0 && |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
366 IsRtStruct(instances[0].asString())) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
367 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
368 for (Json::Value::ArrayIndex j = 0; j < instances.size(); j++) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
369 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
370 answer.append(instances[j].asString()); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
371 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
372 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
373 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
374 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
375 std::string s = answer.toStyledString(); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
376 OrthancPluginAnswerBuffer(OrthancPlugins::GetGlobalContext(), output, s.c_str(), s.size(), "application/json"); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
377 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
378 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
379 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
380 static void GetRtStruct(OrthancPluginRestOutput* output, |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
381 const char* url, |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
382 const OrthancPluginHttpRequest* request) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
383 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
384 static const char* STRUCTURES = "Structures"; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
385 static const char* INSTANCES = "Instances"; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
386 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
387 DicomStructureCache::Accessor accessor(DicomStructureCache::GetSingleton(), request->groups[0]); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
388 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
389 if (!accessor.IsValid()) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
390 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
391 throw Orthanc::OrthancException(Orthanc::ErrorCode_InexistentItem); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
392 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
393 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
394 Json::Value answer; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
395 answer[STRUCTURES] = Json::arrayValue; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
396 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
397 for (size_t i = 0; i < accessor.GetRtStruct().GetStructuresCount(); i++) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
398 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
399 Json::Value color = Json::arrayValue; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
400 color.append(accessor.GetRtStruct().GetStructureColor(i).GetRed()); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
401 color.append(accessor.GetRtStruct().GetStructureColor(i).GetGreen()); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
402 color.append(accessor.GetRtStruct().GetStructureColor(i).GetBlue()); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
403 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
404 Json::Value structure; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
405 structure["Name"] = accessor.GetRtStruct().GetStructureName(i); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
406 structure["Interpretation"] = accessor.GetRtStruct().GetStructureInterpretation(i); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
407 structure["Color"] = color; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
408 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
409 answer[STRUCTURES].append(structure); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
410 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
411 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
412 std::set<std::string> sopInstanceUids; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
413 accessor.GetRtStruct().GetReferencedInstances(sopInstanceUids); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
414 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
415 answer[INSTANCES] = Json::arrayValue; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
416 for (std::set<std::string>::const_iterator it = sopInstanceUids.begin(); it != sopInstanceUids.end(); ++it) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
417 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
418 OrthancPlugins::OrthancString s; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
419 s.Assign(OrthancPluginLookupInstance(OrthancPlugins::GetGlobalContext(), it->c_str())); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
420 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
421 std::string t; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
422 s.ToString(t); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
423 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
424 answer[INSTANCES].append(t); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
425 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
426 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
427 std::string s = answer.toStyledString(); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
428 OrthancPluginAnswerBuffer(OrthancPlugins::GetGlobalContext(), output, s.c_str(), s.size(), "application/json"); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
429 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
430 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
431 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
432 static void RenderRtStruct(OrthancPluginRestOutput* output, |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
433 const char* url, |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
434 const OrthancPluginHttpRequest* request) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
435 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
436 static const char* MAIN_DICOM_TAGS = "MainDicomTags"; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
437 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
438 DicomStructureCache::Accessor accessor(DicomStructureCache::GetSingleton(), request->groups[0]); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
439 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
440 if (!accessor.IsValid()) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
441 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
442 throw Orthanc::OrthancException(Orthanc::ErrorCode_InexistentItem); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
443 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
444 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
445 std::string structureName; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
446 std::string instanceId; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
447 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
448 for (uint32_t i = 0; i < request->getCount; i++) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
449 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
450 std::string key(request->getKeys[i]); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
451 std::string value(request->getValues[i]); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
452 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
453 if (key == "structure") |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
454 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
455 structureName = value; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
456 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
457 else if (key == "instance") |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
458 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
459 instanceId = value; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
460 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
461 else |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
462 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
463 LOG(WARNING) << "Unsupported option: " << key; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
464 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
465 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
466 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
467 if (structureName.empty()) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
468 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
469 throw Orthanc::OrthancException(Orthanc::ErrorCode_NetworkProtocol, |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
470 "Missing option \"structure\" to provide the structure name"); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
471 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
472 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
473 if (instanceId.empty()) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
474 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
475 throw Orthanc::OrthancException(Orthanc::ErrorCode_NetworkProtocol, |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
476 "Missing option \"instance\" to provide the Orthanc identifier of the instance of interest"); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
477 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
478 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
479 size_t structureIndex; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
480 bool found = false; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
481 for (size_t i = 0; i < accessor.GetRtStruct().GetStructuresCount(); i++) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
482 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
483 if (accessor.GetRtStruct().GetStructureName(i) == structureName) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
484 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
485 structureIndex = i; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
486 found = true; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
487 break; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
488 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
489 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
490 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
491 if (!found) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
492 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
493 throw Orthanc::OrthancException(Orthanc::ErrorCode_InexistentItem, |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
494 "Unknown structure name: " + structureName); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
495 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
496 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
497 Json::Value instance; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
498 if (!OrthancPlugins::RestApiGet(instance, "/instances/" + instanceId, false)) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
499 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
500 throw Orthanc::OrthancException(Orthanc::ErrorCode_InexistentItem, |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
501 "Unknown instance with Orthanc ID: " + instanceId); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
502 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
503 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
504 if (instance.type() != Json::objectValue || |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
505 !instance.isMember(MAIN_DICOM_TAGS) || |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
506 instance[MAIN_DICOM_TAGS].type() != Json::objectValue) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
507 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
508 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
509 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
510 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
511 std::string sopInstanceUid = Orthanc::SerializationToolbox::ReadString(instance[MAIN_DICOM_TAGS], "SOPInstanceUID"); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
512 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
513 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
514 std::list< std::vector<OrthancStone::Vector> > p; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
515 accessor.GetRtStruct().GetStructurePoints(p, structureIndex, sopInstanceUid); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
516 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
517 std::string s = "hello"; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
518 OrthancPluginAnswerBuffer(OrthancPlugins::GetGlobalContext(), output, s.c_str(), s.size(), "application/json"); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
519 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
520 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
521 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
522 OrthancPluginErrorCode OnChangeCallback(OrthancPluginChangeType changeType, |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
523 OrthancPluginResourceType resourceType, |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
524 const char* resourceId) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
525 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
526 switch (changeType) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
527 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
528 case OrthancPluginChangeType_Deleted: |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
529 if (resourceType == OrthancPluginResourceType_Instance) |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
530 { |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
531 DicomStructureCache::GetSingleton().Invalidate(resourceId); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
532 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
533 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
534 break; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
535 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
536 default: |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
537 break; |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
538 } |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
539 |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
540 return OrthancPluginErrorCode_Success; |
1882
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
541 } |
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
542 |
1877
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
543 |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
544 extern "C" |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
545 { |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
546 ORTHANC_PLUGINS_API int32_t OrthancPluginInitialize(OrthancPluginContext* context) |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
547 { |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
548 OrthancPlugins::SetGlobalContext(context); |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
549 |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
550 #if ORTHANC_FRAMEWORK_VERSION_IS_ABOVE(1, 7, 2) |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
551 Orthanc::Logging::InitializePluginContext(context); |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
552 #else |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
553 Orthanc::Logging::Initialize(context); |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
554 #endif |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
555 |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
556 /* Check the version of the Orthanc core */ |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
557 if (OrthancPluginCheckVersion(context) == 0) |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
558 { |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
559 char info[1024]; |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
560 sprintf(info, "Your version of Orthanc (%s) must be above %d.%d.%d to run this plugin", |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
561 context->orthancVersion, |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
562 ORTHANC_PLUGINS_MINIMAL_MAJOR_NUMBER, |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
563 ORTHANC_PLUGINS_MINIMAL_MINOR_NUMBER, |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
564 ORTHANC_PLUGINS_MINIMAL_REVISION_NUMBER); |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
565 OrthancPluginLogError(context, info); |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
566 return -1; |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
567 } |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
568 |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
569 try |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
570 { |
1882
4e80b8afd0da
numpy in rendering plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
571 OrthancPlugins::RegisterRestCallback<RenderNumpyFrame>("/stone/instances/([^/]+)/frames/([0-9]+)/numpy", true); |
1885
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
572 OrthancPlugins::RegisterRestCallback<ListRtStruct>("/stone/rt-struct", true); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
573 OrthancPlugins::RegisterRestCallback<GetRtStruct>("/stone/rt-struct/([^/]+)/info", true); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
574 OrthancPlugins::RegisterRestCallback<RenderRtStruct>("/stone/rt-struct/([^/]+)/numpy", true); |
ddaee6b96501
retrieving rt-struct info
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1884
diff
changeset
|
575 OrthancPluginRegisterOnChangeCallback(context, OnChangeCallback); |
1877
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
576 } |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
577 catch (...) |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
578 { |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
579 OrthancPlugins::LogError("Exception while initializing the Stone Web viewer plugin"); |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
580 return -1; |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
581 } |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
582 |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
583 return 0; |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
584 } |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
585 |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
586 |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
587 ORTHANC_PLUGINS_API void OrthancPluginFinalize() |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
588 { |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
589 } |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
590 |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
591 |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
592 ORTHANC_PLUGINS_API const char* OrthancPluginGetName() |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
593 { |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
594 return PLUGIN_NAME; |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
595 } |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
596 |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
597 |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
598 ORTHANC_PLUGINS_API const char* OrthancPluginGetVersion() |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
599 { |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
600 return PLUGIN_VERSION; |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
601 } |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
602 } |