Mercurial > hg > orthanc-stone
annotate OrthancStone/Sources/Scene2D/AnnotationsSceneLayer.h @ 2060:86e0e92a2e0d deep-learning
added OpenGLTextureArray and OpenGLFramebuffer
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 03 May 2023 16:15:50 +0200 |
parents | e943a84da9ac |
children | fdb012c86a75 |
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 | |
1871
7053b8a0aaec
upgrade to year 2022
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1870
diff
changeset
|
5 * Copyright (C) 2017-2022 Osimis S.A., Belgium |
7053b8a0aaec
upgrade to year 2022
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1870
diff
changeset
|
6 * Copyright (C) 2021-2022 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 | |
2060
86e0e92a2e0d
added OpenGLTextureArray and OpenGLFramebuffer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2001
diff
changeset
|
24 #pragma once |
86e0e92a2e0d
added OpenGLTextureArray and OpenGLFramebuffer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2001
diff
changeset
|
25 |
1804 | 26 #include "../Messages/IObservable.h" |
27 #include "Scene2D.h" | |
28 #include "../Scene2DViewport/IFlexiblePointerTracker.h" | |
29 | |
30 namespace OrthancStone | |
31 { | |
32 class AnnotationsSceneLayer : public IObservable | |
33 { | |
34 public: | |
35 ORTHANC_STONE_DEFINE_ORIGIN_MESSAGE(__FILE__, __LINE__, AnnotationAddedMessage, AnnotationsSceneLayer); | |
36 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
|
37 ORTHANC_STONE_DEFINE_ORIGIN_MESSAGE(__FILE__, __LINE__, AnnotationChangedMessage, AnnotationsSceneLayer); |
1804 | 38 |
2001
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
39 class TextAnnotationRequiredMessage : public OriginMessage<AnnotationsSceneLayer> |
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 ORTHANC_STONE_MESSAGE(__FILE__, __LINE__); |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
42 |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
43 private: |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
44 ScenePoint2D pointedPosition_; |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
45 ScenePoint2D labelPosition_; |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
46 |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
47 public: |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
48 TextAnnotationRequiredMessage(const AnnotationsSceneLayer& origin, |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
49 ScenePoint2D pointedPosition, |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
50 ScenePoint2D labelPosition) : |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
51 OriginMessage(origin), |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
52 pointedPosition_(pointedPosition), |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
53 labelPosition_(labelPosition) |
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 } |
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 const ScenePoint2D& GetPointedPosition() const |
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 return pointedPosition_; |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
60 } |
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 const ScenePoint2D& GetLabelPosition() const |
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 return labelPosition_; |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
65 } |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
66 }; |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
67 |
1804 | 68 enum Tool |
69 { | |
70 Tool_Edit, | |
71 Tool_None, | |
1998
1fa3f484008e
added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1987
diff
changeset
|
72 Tool_Length, |
1804 | 73 Tool_Angle, |
74 Tool_Circle, | |
1975
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
75 Tool_Remove, |
1982
ba45e1b0812a
preparing interfaces for rectangle probe, ellipse probe and text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1978
diff
changeset
|
76 Tool_PixelProbe, |
ba45e1b0812a
preparing interfaces for rectangle probe, ellipse probe and text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1978
diff
changeset
|
77 Tool_RectangleProbe, |
ba45e1b0812a
preparing interfaces for rectangle probe, ellipse probe and text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1978
diff
changeset
|
78 Tool_EllipseProbe, |
ba45e1b0812a
preparing interfaces for rectangle probe, ellipse probe and text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1978
diff
changeset
|
79 Tool_TextAnnotation |
1804 | 80 }; |
1821
36430d73e36c
introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1817
diff
changeset
|
81 |
1804 | 82 private: |
83 class GeometricPrimitive; | |
84 class Handle; | |
85 class Segment; | |
86 class Circle; | |
87 class Arc; | |
88 class Text; | |
1987
a595776232bb
added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1983
diff
changeset
|
89 class Ellipse; |
1804 | 90 |
91 class Annotation; | |
1978
95449b0e064a
pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1977
diff
changeset
|
92 class ProbingAnnotation; |
1975
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
93 class PixelProbeAnnotation; |
1804 | 94 class SegmentAnnotation; |
1998
1fa3f484008e
added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1987
diff
changeset
|
95 class LengthAnnotation; |
1999
709b90ae0f89
starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1998
diff
changeset
|
96 class TextAnnotation; |
1804 | 97 class AngleAnnotation; |
98 class CircleAnnotation; | |
1983
20fa913272b7
drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1982
diff
changeset
|
99 class RectangleProbeAnnotation; |
1987
a595776232bb
added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1983
diff
changeset
|
100 class EllipseProbeAnnotation; |
1804 | 101 |
102 class EditPrimitiveTracker; | |
1983
20fa913272b7
drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1982
diff
changeset
|
103 class CreateTwoHandlesTracker; |
1804 | 104 class CreateAngleTracker; |
1975
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
105 class CreatePixelProbeTracker; |
1809
79a5838739a6
starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1806
diff
changeset
|
106 class RemoveTracker; |
2001
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
107 class CreateTextAnnotationTracker; |
1804 | 108 |
109 typedef std::set<GeometricPrimitive*> GeometricPrimitives; | |
110 typedef std::set<Annotation*> Annotations; | |
111 typedef std::set<size_t> SubLayers; | |
112 | |
113 Tool activeTool_; | |
114 size_t macroLayerIndex_; | |
115 size_t polylineSubLayer_; | |
116 GeometricPrimitives primitives_; | |
117 Annotations annotations_; | |
118 SubLayers subLayersToRemove_; | |
1821
36430d73e36c
introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1817
diff
changeset
|
119 Units units_; |
1975
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
120 int probedLayer_; |
1804 | 121 |
122 void AddAnnotation(Annotation* annotation); | |
123 | |
124 void DeleteAnnotation(Annotation* annotation); | |
125 | |
126 void DeletePrimitive(GeometricPrimitive* primitive); | |
127 | |
128 void TagSubLayerToRemove(size_t subLayerIndex); | |
129 | |
130 public: | |
1817 | 131 explicit AnnotationsSceneLayer(size_t macroLayerIndex); |
1804 | 132 |
133 ~AnnotationsSceneLayer() | |
134 { | |
135 Clear(); | |
136 } | |
137 | |
138 void Clear(); | |
139 | |
140 void SetActiveTool(Tool tool) | |
141 { | |
142 activeTool_ = tool; | |
143 } | |
144 | |
145 Tool GetActiveTool() const | |
146 { | |
147 return activeTool_; | |
148 } | |
149 | |
1821
36430d73e36c
introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1817
diff
changeset
|
150 void SetUnits(Units units); |
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 Units GetUnits() const |
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 return units_; |
36430d73e36c
introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1817
diff
changeset
|
155 } |
36430d73e36c
introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1817
diff
changeset
|
156 |
1998
1fa3f484008e
added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1987
diff
changeset
|
157 void AddLengthAnnotation(const ScenePoint2D& p1, |
1fa3f484008e
added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1987
diff
changeset
|
158 const ScenePoint2D& p2); |
1806
0840a25c6d41
removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1804
diff
changeset
|
159 |
0840a25c6d41
removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1804
diff
changeset
|
160 void AddCircleAnnotation(const ScenePoint2D& p1, |
0840a25c6d41
removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1804
diff
changeset
|
161 const ScenePoint2D& p2); |
0840a25c6d41
removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1804
diff
changeset
|
162 |
0840a25c6d41
removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1804
diff
changeset
|
163 void AddAngleAnnotation(const ScenePoint2D& p1, |
0840a25c6d41
removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1804
diff
changeset
|
164 const ScenePoint2D& p2, |
0840a25c6d41
removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1804
diff
changeset
|
165 const ScenePoint2D& p3); |
0840a25c6d41
removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1804
diff
changeset
|
166 |
1804 | 167 void Render(Scene2D& scene); |
168 | |
169 bool ClearHover(); | |
170 | |
171 bool SetMouseHover(const ScenePoint2D& p /* expressed in canvas coordinates */, | |
172 const Scene2D& scene); | |
173 | |
174 IFlexiblePointerTracker* CreateTracker(const ScenePoint2D& p /* expressed in canvas coordinates */, | |
175 const Scene2D& scene); | |
176 | |
177 void Serialize(Json::Value& target) const; | |
178 | |
179 void Unserialize(const Json::Value& serialized); | |
1975
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 void SetProbedLayer(int 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 probedLayer_ = layer; |
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
184 } |
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 int GetProbedLayer() const |
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
187 { |
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
188 return probedLayer_; |
5a434f5889f8
starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1871
diff
changeset
|
189 } |
2001
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
190 |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
191 void AddTextAnnotation(const std::string& label, |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
192 const ScenePoint2D& pointedPosition, |
e943a84da9ac
creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1999
diff
changeset
|
193 const ScenePoint2D& labelPosition); |
1804 | 194 }; |
195 } |