Mercurial > hg > orthanc-stone
annotate OrthancStone/Sources/Scene2D/AnnotationsSceneLayer.h @ 2085:554bc96e7508
added DicomStructuredReport
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 07 Nov 2023 17:03:38 +0100 |
parents | 07964689cb0b |
children | fdb012c86a75 c23eef785569 |
rev | line source |
---|---|
1804 | 1 /** |
2 * Stone of Orthanc | |
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics | |
4 * Department, University Hospital of Liege, Belgium | |
2077
07964689cb0b
upgrade to year 2023
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2001
diff
changeset
|
5 * Copyright (C) 2017-2023 Osimis S.A., Belgium |
07964689cb0b
upgrade to year 2023
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2001
diff
changeset
|
6 * Copyright (C) 2021-2023 Sebastien Jodogne, ICTEAM UCLouvain, Belgium |
1804 | 7 * |
8 * This program is free software: you can redistribute it and/or | |
9 * modify it under the terms of the GNU Lesser General Public License | |
10 * as published by the Free Software Foundation, either version 3 of | |
11 * the License, or (at your option) any later version. | |
12 * | |
13 * This program is distributed in the hope that it will be useful, but | |
14 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
16 * Lesser General Public License for more details. | |
17 * | |
18 * You should have received a copy of the GNU Lesser General Public | |
19 * License along with this program. If not, see | |
20 * <http://www.gnu.org/licenses/>. | |
21 **/ | |
22 | |
23 | |
24 #include "../Messages/IObservable.h" | |
25 #include "Scene2D.h" | |
26 #include "../Scene2DViewport/IFlexiblePointerTracker.h" | |
27 | |
28 namespace OrthancStone | |
29 { | |
30 class AnnotationsSceneLayer : public IObservable | |
31 { | |
32 public: | |
33 ORTHANC_STONE_DEFINE_ORIGIN_MESSAGE(__FILE__, __LINE__, AnnotationAddedMessage, AnnotationsSceneLayer); | |
34 ORTHANC_STONE_DEFINE_ORIGIN_MESSAGE(__FILE__, __LINE__, AnnotationRemovedMessage, AnnotationsSceneLayer); | |
1809
79a5838739a6
starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1806
diff
changeset
|
35 ORTHANC_STONE_DEFINE_ORIGIN_MESSAGE(__FILE__, __LINE__, AnnotationChangedMessage, AnnotationsSceneLayer); |
1804 | 36 |
2001
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
37 class TextAnnotationRequiredMessage : public OriginMessage<AnnotationsSceneLayer> |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
38 { |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
39 ORTHANC_STONE_MESSAGE(__FILE__, __LINE__); |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
40 |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
41 private: |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
42 ScenePoint2D pointedPosition_; |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
43 ScenePoint2D labelPosition_; |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
44 |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
45 public: |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
46 TextAnnotationRequiredMessage(const AnnotationsSceneLayer& origin, |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
47 ScenePoint2D pointedPosition, |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
48 ScenePoint2D labelPosition) : |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
49 OriginMessage(origin), |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
50 pointedPosition_(pointedPosition), |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
51 labelPosition_(labelPosition) |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
52 { |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
53 } |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
54 |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
55 const ScenePoint2D& GetPointedPosition() const |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
56 { |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
57 return pointedPosition_; |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
58 } |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
59 |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
60 const ScenePoint2D& GetLabelPosition() const |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
61 { |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
62 return labelPosition_; |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
63 } |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
64 }; |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
65 |
1804 | 66 enum Tool |
67 { | |
68 Tool_Edit, | |
69 Tool_None, | |
1998
1fa3f484008e
added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1987
diff
changeset
|
70 Tool_Length, |
1804 | 71 Tool_Angle, |
72 Tool_Circle, | |
1975
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
73 Tool_Remove, |
1982
ba45e1b0812a
preparing interfaces for rectangle probe, ellipse probe and text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1978
diff
changeset
|
74 Tool_PixelProbe, |
ba45e1b0812a
preparing interfaces for rectangle probe, ellipse probe and text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1978
diff
changeset
|
75 Tool_RectangleProbe, |
ba45e1b0812a
preparing interfaces for rectangle probe, ellipse probe and text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1978
diff
changeset
|
76 Tool_EllipseProbe, |
ba45e1b0812a
preparing interfaces for rectangle probe, ellipse probe and text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1978
diff
changeset
|
77 Tool_TextAnnotation |
1804 | 78 }; |
1821
36430d73e36c
introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1817
diff
changeset
|
79 |
1804 | 80 private: |
81 class GeometricPrimitive; | |
82 class Handle; | |
83 class Segment; | |
84 class Circle; | |
85 class Arc; | |
86 class Text; | |
1987
a595776232bb
added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1983
diff
changeset
|
87 class Ellipse; |
1804 | 88 |
89 class Annotation; | |
1978
95449b0e064a
pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1977
diff
changeset
|
90 class ProbingAnnotation; |
1975
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
91 class PixelProbeAnnotation; |
1804 | 92 class SegmentAnnotation; |
1998
1fa3f484008e
added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1987
diff
changeset
|
93 class LengthAnnotation; |
1999
709b90ae0f89
starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1998
diff
changeset
|
94 class TextAnnotation; |
1804 | 95 class AngleAnnotation; |
96 class CircleAnnotation; | |
1983
20fa913272b7
drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1982
diff
changeset
|
97 class RectangleProbeAnnotation; |
1987
a595776232bb
added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1983
diff
changeset
|
98 class EllipseProbeAnnotation; |
1804 | 99 |
100 class EditPrimitiveTracker; | |
1983
20fa913272b7
drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1982
diff
changeset
|
101 class CreateTwoHandlesTracker; |
1804 | 102 class CreateAngleTracker; |
1975
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
103 class CreatePixelProbeTracker; |
1809
79a5838739a6
starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1806
diff
changeset
|
104 class RemoveTracker; |
2001
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
105 class CreateTextAnnotationTracker; |
1804 | 106 |
107 typedef std::set<GeometricPrimitive*> GeometricPrimitives; | |
108 typedef std::set<Annotation*> Annotations; | |
109 typedef std::set<size_t> SubLayers; | |
110 | |
111 Tool activeTool_; | |
112 size_t macroLayerIndex_; | |
113 size_t polylineSubLayer_; | |
114 GeometricPrimitives primitives_; | |
115 Annotations annotations_; | |
116 SubLayers subLayersToRemove_; | |
1821
36430d73e36c
introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1817
diff
changeset
|
117 Units units_; |
1975
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
118 int probedLayer_; |
1804 | 119 |
120 void AddAnnotation(Annotation* annotation); | |
121 | |
122 void DeleteAnnotation(Annotation* annotation); | |
123 | |
124 void DeletePrimitive(GeometricPrimitive* primitive); | |
125 | |
126 void TagSubLayerToRemove(size_t subLayerIndex); | |
127 | |
128 public: | |
1817 | 129 explicit AnnotationsSceneLayer(size_t macroLayerIndex); |
1804 | 130 |
131 ~AnnotationsSceneLayer() | |
132 { | |
133 Clear(); | |
134 } | |
135 | |
136 void Clear(); | |
137 | |
138 void SetActiveTool(Tool tool) | |
139 { | |
140 activeTool_ = tool; | |
141 } | |
142 | |
143 Tool GetActiveTool() const | |
144 { | |
145 return activeTool_; | |
146 } | |
147 | |
1821
36430d73e36c
introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1817
diff
changeset
|
148 void SetUnits(Units units); |
36430d73e36c
introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1817
diff
changeset
|
149 |
36430d73e36c
introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1817
diff
changeset
|
150 Units GetUnits() const |
36430d73e36c
introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1817
diff
changeset
|
151 { |
36430d73e36c
introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1817
diff
changeset
|
152 return units_; |
36430d73e36c
introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1817
diff
changeset
|
153 } |
36430d73e36c
introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1817
diff
changeset
|
154 |
1998
1fa3f484008e
added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1987
diff
changeset
|
155 void AddLengthAnnotation(const ScenePoint2D& p1, |
1fa3f484008e
added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1987
diff
changeset
|
156 const ScenePoint2D& p2); |
1806
0840a25c6d41
removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1804
diff
changeset
|
157 |
0840a25c6d41
removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1804
diff
changeset
|
158 void AddCircleAnnotation(const ScenePoint2D& p1, |
0840a25c6d41
removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1804
diff
changeset
|
159 const ScenePoint2D& p2); |
0840a25c6d41
removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1804
diff
changeset
|
160 |
0840a25c6d41
removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1804
diff
changeset
|
161 void AddAngleAnnotation(const ScenePoint2D& p1, |
0840a25c6d41
removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1804
diff
changeset
|
162 const ScenePoint2D& p2, |
0840a25c6d41
removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1804
diff
changeset
|
163 const ScenePoint2D& p3); |
0840a25c6d41
removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1804
diff
changeset
|
164 |
1804 | 165 void Render(Scene2D& scene); |
166 | |
167 bool ClearHover(); | |
168 | |
169 bool SetMouseHover(const ScenePoint2D& p /* expressed in canvas coordinates */, | |
170 const Scene2D& scene); | |
171 | |
172 IFlexiblePointerTracker* CreateTracker(const ScenePoint2D& p /* expressed in canvas coordinates */, | |
173 const Scene2D& scene); | |
174 | |
175 void Serialize(Json::Value& target) const; | |
176 | |
177 void Unserialize(const Json::Value& serialized); | |
1975
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
178 |
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
179 void SetProbedLayer(int layer) |
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
180 { |
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
181 probedLayer_ = layer; |
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
182 } |
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
183 |
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
184 int GetProbedLayer() const |
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
185 { |
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
186 return probedLayer_; |
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
187 } |
2001
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
188 |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
189 void AddTextAnnotation(const std::string& label, |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
190 const ScenePoint2D& pointedPosition, |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
191 const ScenePoint2D& labelPosition); |
1804 | 192 }; |
193 } |