annotate OrthancStone/Sources/Scene2D/AnnotationsSceneLayer.cpp @ 2011:abd4ee1648de

Fix measurement of arcs
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 02 Dec 2022 18:44:11 +0100
parents 1bb0a9716876
children 07964689cb0b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 /**
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2 * Stone of Orthanc
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
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
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
7 *
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8 * This program is free software: you can redistribute it and/or
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public License
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 * as published by the Free Software Foundation, either version 3 of
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 * the License, or (at your option) any later version.
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 *
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful, but
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16 * Lesser General Public License for more details.
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17 *
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 * License along with this program. If not, see
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20 * <http://www.gnu.org/licenses/>.
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21 **/
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
22
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
24 #include "AnnotationsSceneLayer.h"
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
25
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
26 #include "MacroSceneLayer.h"
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
27 #include "PolylineSceneLayer.h"
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
28 #include "TextSceneLayer.h"
1987
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
29 #include "TextureBaseSceneLayer.h"
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
30
1978
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
31 #include <Images/ImageTraits.h>
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
32 #include <OrthancException.h>
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
33
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
34 #include <boost/math/constants/constants.hpp>
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
35 #include <list>
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
36
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
37 static const double PI = boost::math::constants::pi<double>();
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
38
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
39 static const double HANDLE_SIZE = 10.0;
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
40 static const double ARROW_LENGTH = 1.5 * HANDLE_SIZE;
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
41 static const double ARROW_ANGLE = 20.0 * PI / 180.0;
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
42
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
43 static const char* const KEY_ANNOTATIONS = "annotations";
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
44 static const char* const KEY_TYPE = "type";
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
45 static const char* const KEY_X = "x";
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
46 static const char* const KEY_Y = "y";
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
47 static const char* const KEY_X1 = "x1";
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
48 static const char* const KEY_Y1 = "y1";
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
49 static const char* const KEY_X2 = "x2";
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
50 static const char* const KEY_Y2 = "y2";
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
51 static const char* const KEY_X3 = "x3";
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
52 static const char* const KEY_Y3 = "y3";
1821
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
53 static const char* const KEY_UNITS = "units";
1999
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
54 static const char* const KEY_LABEL = "label";
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
55
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
56 static const char* const VALUE_ANGLE = "angle";
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
57 static const char* const VALUE_CIRCLE = "circle";
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
58 static const char* const VALUE_LENGTH = "length";
1821
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
59 static const char* const VALUE_MILLIMETERS = "millimeters";
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
60 static const char* const VALUE_PIXELS = "pixels";
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
61 static const char* const VALUE_PIXEL_PROBE = "pixel-probe";
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
62 static const char* const VALUE_RECTANGLE_PROBE = "rectangle-probe";
1987
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
63 static const char* const VALUE_ELLIPSE_PROBE = "ellipse-probe";
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
64 static const char* const VALUE_TEXT_ANNOTATION = "text";
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
65
1819
fe402c678d18 improved color theme for annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1817
diff changeset
66 #if 0
fe402c678d18 improved color theme for annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1817
diff changeset
67 static OrthancStone::Color COLOR_PRIMITIVES(192, 192, 192);
fe402c678d18 improved color theme for annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1817
diff changeset
68 static OrthancStone::Color COLOR_HOVER(0, 255, 0);
fe402c678d18 improved color theme for annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1817
diff changeset
69 static OrthancStone::Color COLOR_TEXT(255, 0, 0);
fe402c678d18 improved color theme for annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1817
diff changeset
70 #else
fe402c678d18 improved color theme for annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1817
diff changeset
71 static OrthancStone::Color COLOR_PRIMITIVES(0x40, 0x82, 0xad);
fe402c678d18 improved color theme for annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1817
diff changeset
72 static OrthancStone::Color COLOR_HOVER(0x40, 0xad, 0x79);
fe402c678d18 improved color theme for annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1817
diff changeset
73 static OrthancStone::Color COLOR_TEXT(0x4e, 0xde, 0x99);
fe402c678d18 improved color theme for annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1817
diff changeset
74 #endif
fe402c678d18 improved color theme for annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1817
diff changeset
75
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
76
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
77 namespace OrthancStone
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
78 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
79 class AnnotationsSceneLayer::GeometricPrimitive : public boost::noncopyable
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
80 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
81 private:
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
82 bool modified_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
83 Annotation& parentAnnotation_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
84 Color color_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
85 Color hoverColor_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
86 bool isHover_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
87 int depth_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
88
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
89 public:
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
90 GeometricPrimitive(Annotation& parentAnnotation,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
91 int depth) :
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
92 modified_(true),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
93 parentAnnotation_(parentAnnotation),
1819
fe402c678d18 improved color theme for annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1817
diff changeset
94 color_(COLOR_PRIMITIVES),
fe402c678d18 improved color theme for annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1817
diff changeset
95 hoverColor_(COLOR_HOVER),
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
96 isHover_(false),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
97 depth_(depth)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
98 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
99 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
100
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
101 virtual ~GeometricPrimitive()
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
102 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
103 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
104
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
105 Annotation& GetParentAnnotation() const
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
106 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
107 return parentAnnotation_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
108 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
109
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
110 int GetDepth() const
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
111 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
112 return depth_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
113 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
114
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
115 void SetHover(bool hover)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
116 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
117 if (hover != isHover_)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
118 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
119 isHover_ = hover;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
120 modified_ = true;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
121 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
122 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
123
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
124 bool IsHover() const
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
125 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
126 return isHover_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
127 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
128
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
129 void SetModified(bool modified)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
130 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
131 modified_ = modified;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
132 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
133
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
134 bool IsModified() const
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
135 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
136 return modified_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
137 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
138
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
139 void SetColor(const Color& color)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
140 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
141 SetModified(true);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
142 color_ = color;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
143 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
144
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
145 void SetHoverColor(const Color& color)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
146 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
147 SetModified(true);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
148 hoverColor_ = color;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
149 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
150
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
151 const Color& GetColor() const
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
152 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
153 return color_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
154 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
155
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
156 const Color& GetHoverColor() const
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
157 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
158 return hoverColor_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
159 }
1981
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
160
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
161 Color GetActiveColor() const
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
162 {
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
163 return (IsHover() ? GetHoverColor() : GetColor());
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
164 }
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
165
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
166 virtual bool IsHit(const ScenePoint2D& p,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
167 const Scene2D& scene) const = 0;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
168
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
169 // Always called, even if not modified
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
170 virtual void RenderPolylineLayer(PolylineSceneLayer& polyline,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
171 const Scene2D& scene) = 0;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
172
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
173 // Only called if modified
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
174 virtual void RenderOtherLayers(MacroSceneLayer& macro,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
175 const Scene2D& scene) = 0;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
176
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
177 virtual void MovePreview(const ScenePoint2D& delta,
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
178 const Scene2D& scene) = 0;
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
179
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
180 virtual void MoveDone(const ScenePoint2D& delta,
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
181 const Scene2D& scene) = 0;
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
182 };
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
183
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
184
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
185 class AnnotationsSceneLayer::Annotation : public boost::noncopyable
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
186 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
187 private:
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
188 typedef std::list<GeometricPrimitive*> GeometricPrimitives;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
189
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
190 AnnotationsSceneLayer& that_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
191 GeometricPrimitives primitives_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
192
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
193 public:
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
194 explicit Annotation(AnnotationsSceneLayer& that) :
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
195 that_(that)
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
196 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
197 that.AddAnnotation(this);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
198 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
199
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
200 virtual ~Annotation()
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
201 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
202 for (GeometricPrimitives::iterator it = primitives_.begin(); it != primitives_.end(); ++it)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
203 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
204 that_.DeletePrimitive(*it);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
205 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
206 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
207
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
208 AnnotationsSceneLayer& GetParentLayer() const
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
209 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
210 return that_;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
211 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
212
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
213 GeometricPrimitive* AddPrimitive(GeometricPrimitive* primitive)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
214 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
215 if (primitive == NULL)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
216 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
217 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
218 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
219 else
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
220 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
221 assert(that_.primitives_.find(primitive) == that_.primitives_.end());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
222 primitives_.push_back(primitive); // For automated deallocation
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
223 that_.primitives_.insert(primitive);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
224 return primitive;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
225 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
226 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
227
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
228 template <typename T>
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
229 T& AddTypedPrimitive(T* primitive)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
230 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
231 AddPrimitive(primitive);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
232 return *primitive;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
233 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
234
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
235 virtual unsigned int GetHandlesCount() const = 0;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
236
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
237 virtual Handle& GetHandle(unsigned int index) const = 0;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
238
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
239 virtual void SignalMove(GeometricPrimitive& primitive,
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
240 const Scene2D& scene) = 0;
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
241
1976
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
242 virtual void UpdateProbe(const Scene2D& scene) = 0;
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
243
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
244 virtual void Serialize(Json::Value& target) = 0;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
245 };
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
246
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
247
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
248 class AnnotationsSceneLayer::Handle : public GeometricPrimitive
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
249 {
1980
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
250 public:
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
251 enum Shape {
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
252 Shape_Square,
1981
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
253 Shape_CrossedSquare,
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
254 Shape_Circle,
1999
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
255 Shape_CrossedCircle,
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
256 Shape_Invisible /* to use in conjunction with arrows */
1980
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
257 };
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
258
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
259 private:
1980
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
260 Shape shape_;
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
261 ScenePoint2D center_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
262 ScenePoint2D delta_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
263
1980
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
264 void AddCross(PolylineSceneLayer& polyline,
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
265 double x1,
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
266 double y1,
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
267 double x2,
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
268 double y2)
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
269 {
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
270 const double halfX = (x1 + x2) / 2.0;
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
271 const double halfY = (y1 + y2) / 2.0;
1981
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
272 polyline.AddSegment(x1, halfY, x2, halfY, GetActiveColor());
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
273 polyline.AddSegment(halfX, y1, halfX, y2, GetActiveColor());
1980
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
274 }
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
275
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
276 public:
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
277 explicit Handle(Annotation& parentAnnotation,
1980
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
278 Shape shape,
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
279 const ScenePoint2D& center) :
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
280 GeometricPrimitive(parentAnnotation, 0), // Highest priority
1980
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
281 shape_(shape),
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
282 center_(center),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
283 delta_(0, 0)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
284 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
285 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
286
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
287 void SetSize(unsigned int size)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
288 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
289 SetModified(true);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
290 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
291
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
292 void SetCenter(const ScenePoint2D& center)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
293 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
294 SetModified(true);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
295 center_ = center;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
296 delta_ = ScenePoint2D(0, 0);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
297 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
298
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
299 void SetCenter(double x,
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
300 double y)
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
301 {
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
302 SetCenter(ScenePoint2D(x, y));
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
303 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
304
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
305 ScenePoint2D GetCenter() const
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
306 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
307 return center_ + delta_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
308 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
309
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
310 virtual bool IsHit(const ScenePoint2D& p,
1809
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
311 const Scene2D& scene) const ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
312 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
313 const double zoom = scene.GetSceneToCanvasTransform().ComputeZoom();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
314
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
315 double dx = (center_.GetX() + delta_.GetX() - p.GetX()) * zoom;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
316 double dy = (center_.GetY() + delta_.GetY() - p.GetY()) * zoom;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
317
1981
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
318 return (std::abs(dx) <= HANDLE_SIZE / 2.0 &&
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
319 std::abs(dy) <= HANDLE_SIZE / 2.0);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
320 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
321
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
322 virtual void RenderPolylineLayer(PolylineSceneLayer& polyline,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
323 const Scene2D& scene) ORTHANC_OVERRIDE
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
324 {
1981
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
325 static unsigned int NUM_SEGMENTS = 16;
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
326
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
327 const double zoom = scene.GetSceneToCanvasTransform().ComputeZoom();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
328
1981
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
329 // TODO: take DPI into account
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
330 const double unzoomedHandleSize = (HANDLE_SIZE / 2.0) / zoom;
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
331 const double x = center_.GetX() + delta_.GetX();
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
332 const double y = center_.GetY() + delta_.GetY();
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
333 const double x1 = x - unzoomedHandleSize;
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
334 const double y1 = y - unzoomedHandleSize;
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
335 const double x2 = x + unzoomedHandleSize;
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
336 const double y2 = y + unzoomedHandleSize;
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
337
1980
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
338 switch (shape_)
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
339 {
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
340 case Shape_Square:
1981
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
341 polyline.AddRectangle(x1, y1, x2, y2, GetActiveColor());
1980
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
342 break;
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
343
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
344 case Shape_CrossedSquare:
1981
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
345 polyline.AddRectangle(x1, y1, x2, y2, GetActiveColor());
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
346 AddCross(polyline, x1, y1, x2, y2);
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
347 break;
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
348
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
349 case Shape_Circle:
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
350 polyline.AddCircle(x, y, unzoomedHandleSize, GetActiveColor(), NUM_SEGMENTS);
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
351 break;
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
352
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
353 case Shape_CrossedCircle:
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
354 polyline.AddCircle(x, y, unzoomedHandleSize, GetActiveColor(), NUM_SEGMENTS);
1980
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
355 AddCross(polyline, x1, y1, x2, y2);
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
356 break;
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
357
1999
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
358 case Shape_Invisible:
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
359 break;
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
360
1980
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
361 default:
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
362 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
363 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
364 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
365
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
366 virtual void RenderOtherLayers(MacroSceneLayer& macro,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
367 const Scene2D& scene) ORTHANC_OVERRIDE
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
368 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
369 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
370
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
371 virtual void MovePreview(const ScenePoint2D& delta,
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
372 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
373 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
374 SetModified(true);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
375 delta_ = delta;
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
376 GetParentAnnotation().SignalMove(*this, scene);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
377 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
378
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
379 virtual void MoveDone(const ScenePoint2D& delta,
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
380 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
381 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
382 SetModified(true);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
383 center_ = center_ + delta;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
384 delta_ = ScenePoint2D(0, 0);
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
385 GetParentAnnotation().SignalMove(*this, scene);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
386 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
387 };
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
388
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
389
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
390 class AnnotationsSceneLayer::Segment : public GeometricPrimitive
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
391 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
392 private:
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
393 ScenePoint2D p1_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
394 ScenePoint2D p2_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
395 ScenePoint2D delta_;
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
396 bool hasStartArrow_;
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
397 bool hasEndArrow_;
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
398
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
399 public:
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
400 Segment(Annotation& parentAnnotation,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
401 const ScenePoint2D& p1,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
402 const ScenePoint2D& p2) :
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
403 GeometricPrimitive(parentAnnotation, 1), // Can only be selected if no handle matches
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
404 p1_(p1),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
405 p2_(p2),
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
406 delta_(0, 0),
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
407 hasStartArrow_(false),
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
408 hasEndArrow_(false)
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
409 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
410 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
411
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
412 Segment(Annotation& parentAnnotation,
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
413 double x1,
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
414 double y1,
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
415 double x2,
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
416 double y2) :
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
417 GeometricPrimitive(parentAnnotation, 1), // Can only be selected if no handle matches
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
418 p1_(x1, y1),
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
419 p2_(x2, y2),
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
420 delta_(0, 0),
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
421 hasStartArrow_(false),
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
422 hasEndArrow_(false)
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
423 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
424 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
425
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
426 void SetPosition(const ScenePoint2D& p1,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
427 const ScenePoint2D& p2)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
428 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
429 SetModified(true);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
430 p1_ = p1;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
431 p2_ = p2;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
432 delta_ = ScenePoint2D(0, 0);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
433 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
434
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
435 void SetPosition(double x1,
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
436 double y1,
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
437 double x2,
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
438 double y2)
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
439 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
440 SetModified(true);
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
441 p1_ = ScenePoint2D(x1, y1);
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
442 p2_ = ScenePoint2D(x2, y2);
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
443 delta_ = ScenePoint2D(0, 0);
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
444 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
445
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
446 ScenePoint2D GetPosition1() const
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
447 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
448 return p1_ + delta_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
449 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
450
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
451 ScenePoint2D GetPosition2() const
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
452 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
453 return p2_ + delta_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
454 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
455
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
456 void SetStartArrow(bool enabled)
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
457 {
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
458 SetModified(true);
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
459 hasStartArrow_ = enabled;
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
460 }
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
461
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
462 bool HasStartArrow() const
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
463 {
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
464 return hasStartArrow_;
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
465 }
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
466
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
467 void SetEndArrow(bool enabled)
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
468 {
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
469 SetModified(true);
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
470 hasEndArrow_ = enabled;
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
471 }
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
472
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
473 bool HasEndArrow() const
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
474 {
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
475 return hasEndArrow_;
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
476 }
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
477
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
478 virtual bool IsHit(const ScenePoint2D& p,
1809
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
479 const Scene2D& scene) const ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
480 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
481 const double zoom = scene.GetSceneToCanvasTransform().ComputeZoom();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
482 return (ScenePoint2D::SquaredDistancePtSegment(p1_ + delta_, p2_ + delta_, p) * zoom * zoom <=
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
483 (HANDLE_SIZE / 2.0) * (HANDLE_SIZE / 2.0));
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
484 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
485
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
486 virtual void RenderPolylineLayer(PolylineSceneLayer& polyline,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
487 const Scene2D& scene) ORTHANC_OVERRIDE
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
488 {
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
489 const Color color = GetActiveColor();
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
490 const ScenePoint2D a(p1_ + delta_);
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
491 const ScenePoint2D b(p2_ + delta_);
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
492
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
493 polyline.AddSegment(a, b, color);
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
494
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
495 if (hasStartArrow_ ||
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
496 hasEndArrow_)
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
497 {
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
498 const double length = ARROW_LENGTH / scene.GetSceneToCanvasTransform().ComputeZoom();
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
499 const double angle = atan2(b.GetY() - a.GetY(), b.GetX() - a.GetX());
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
500
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
501 if (hasStartArrow_)
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
502 {
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
503 polyline.AddSegment(a, a + ScenePoint2D(
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
504 length * cos(angle + ARROW_ANGLE),
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
505 length * sin(angle + ARROW_ANGLE)), color);
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
506 polyline.AddSegment(a, a + ScenePoint2D(
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
507 length * cos(angle - ARROW_ANGLE),
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
508 length * sin(angle - ARROW_ANGLE)), color);
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
509 }
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
510
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
511 if (hasEndArrow_)
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
512 {
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
513 polyline.AddSegment(b, b + ScenePoint2D(
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
514 length * cos(angle + ARROW_ANGLE + PI),
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
515 length * sin(angle + ARROW_ANGLE + PI)), color);
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
516 polyline.AddSegment(b, b + ScenePoint2D(
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
517 length * cos(angle - ARROW_ANGLE + PI),
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
518 length * sin(angle - ARROW_ANGLE + PI)), color);
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
519 }
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
520 }
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
521 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
522
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
523 virtual void RenderOtherLayers(MacroSceneLayer& macro,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
524 const Scene2D& scene) ORTHANC_OVERRIDE
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
525 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
526 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
527
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
528 virtual void MovePreview(const ScenePoint2D& delta,
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
529 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
530 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
531 SetModified(true);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
532 delta_ = delta;
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
533 GetParentAnnotation().SignalMove(*this, scene);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
534 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
535
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
536 virtual void MoveDone(const ScenePoint2D& delta,
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
537 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
538 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
539 SetModified(true);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
540 p1_ = p1_ + delta;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
541 p2_ = p2_ + delta;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
542 delta_ = ScenePoint2D(0, 0);
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
543 GetParentAnnotation().SignalMove(*this, scene);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
544 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
545 };
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
546
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
547
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
548 class AnnotationsSceneLayer::Circle : public GeometricPrimitive
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
549 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
550 private:
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
551 ScenePoint2D p1_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
552 ScenePoint2D p2_;
1823
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
553 ScenePoint2D delta_;
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
554
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
555 public:
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
556 Circle(Annotation& parentAnnotation,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
557 const ScenePoint2D& p1,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
558 const ScenePoint2D& p2) :
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
559 GeometricPrimitive(parentAnnotation, 2),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
560 p1_(p1),
1823
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
561 p2_(p2),
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
562 delta_(0, 0)
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
563 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
564 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
565
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
566 void SetPosition(const ScenePoint2D& p1,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
567 const ScenePoint2D& p2)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
568 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
569 SetModified(true);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
570 p1_ = p1;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
571 p2_ = p2;
1823
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
572 delta_ = ScenePoint2D(0, 0);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
573 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
574
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
575 ScenePoint2D GetPosition1() const
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
576 {
1823
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
577 return p1_ + delta_;
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
578 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
579
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
580 ScenePoint2D GetPosition2() const
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
581 {
1823
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
582 return p2_ + delta_;
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
583 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
584
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
585 virtual bool IsHit(const ScenePoint2D& p,
1809
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
586 const Scene2D& scene) const ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
587 {
1823
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
588 const double zoom = scene.GetSceneToCanvasTransform().ComputeZoom();
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
589
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
590 ScenePoint2D middle((p1_.GetX() + p2_.GetX()) / 2.0,
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
591 (p1_.GetY() + p2_.GetY()) / 2.0);
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
592
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
593 const double radius = ScenePoint2D::DistancePtPt(middle, p1_);
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
594 const double distance = ScenePoint2D::DistancePtPt(middle, p - delta_);
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
595
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
596 return std::abs(radius - distance) * zoom <= HANDLE_SIZE / 2.0;
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
597 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
598
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
599 virtual void RenderPolylineLayer(PolylineSceneLayer& polyline,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
600 const Scene2D& scene) ORTHANC_OVERRIDE
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
601 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
602 static unsigned int NUM_SEGMENTS = 128;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
603
1981
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
604 ScenePoint2D center((p1_.GetX() + p2_.GetX()) / 2.0,
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
605 (p1_.GetY() + p2_.GetY()) / 2.0);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
606
1981
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
607 const double radius = ScenePoint2D::DistancePtPt(center, p1_);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
608
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
609 polyline.AddCircle(center.GetX() + delta_.GetX(), center.GetY() + delta_.GetY(),
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
610 radius, GetActiveColor(), NUM_SEGMENTS);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
611 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
612
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
613 virtual void RenderOtherLayers(MacroSceneLayer& macro,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
614 const Scene2D& scene) ORTHANC_OVERRIDE
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
615 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
616 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
617
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
618 virtual void MovePreview(const ScenePoint2D& delta,
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
619 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
620 {
1823
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
621 SetModified(true);
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
622 delta_ = delta;
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
623 GetParentAnnotation().SignalMove(*this, scene);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
624 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
625
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
626 virtual void MoveDone(const ScenePoint2D& delta,
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
627 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
628 {
1823
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
629 SetModified(true);
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
630 p1_ = p1_ + delta;
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
631 p2_ = p2_ + delta;
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
632 delta_ = ScenePoint2D(0, 0);
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
633 GetParentAnnotation().SignalMove(*this, scene);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
634 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
635 };
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
636
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
637
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
638 class AnnotationsSceneLayer::Arc : public GeometricPrimitive
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
639 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
640 private:
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
641 ScenePoint2D start_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
642 ScenePoint2D middle_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
643 ScenePoint2D end_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
644 double radius_; // in pixels
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
645
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
646 void ComputeAngles(double& fullAngle,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
647 double& startAngle,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
648 double& endAngle) const
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
649 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
650 const double x1 = start_.GetX();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
651 const double y1 = start_.GetY();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
652 const double xc = middle_.GetX();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
653 const double yc = middle_.GetY();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
654 const double x2 = end_.GetX();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
655 const double y2 = end_.GetY();
2011
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
656
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
657 double referenceAngle = atan2(y1 - yc, x1 - xc);
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
658 double secondAngle = atan2(y2 - yc, x2 - xc);
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
659
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
660 secondAngle -= referenceAngle;
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
661
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
662 while (secondAngle >= PI)
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
663 {
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
664 secondAngle -= 2.0 * PI;
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
665 }
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
666
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
667 while (secondAngle <= -PI)
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
668 {
2011
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
669 secondAngle += 2.0 * PI;
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
670 }
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
671
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
672 if (secondAngle < 0)
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
673 {
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
674 startAngle = referenceAngle + secondAngle;
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
675 endAngle = referenceAngle;
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
676 }
2011
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
677 else
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
678 {
2011
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
679 startAngle = referenceAngle;
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
680 endAngle = referenceAngle + secondAngle;
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
681 }
2011
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
682
abd4ee1648de Fix measurement of arcs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2002
diff changeset
683 fullAngle = endAngle - startAngle;
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
684 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
685
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
686 public:
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
687 Arc(Annotation& parentAnnotation,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
688 const ScenePoint2D& start,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
689 const ScenePoint2D& middle,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
690 const ScenePoint2D& end) :
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
691 GeometricPrimitive(parentAnnotation, 2),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
692 start_(start),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
693 middle_(middle),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
694 end_(end),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
695 radius_(20)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
696 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
697 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
698
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
699 double GetAngle() const
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
700 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
701 double fullAngle, startAngle, endAngle;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
702 ComputeAngles(fullAngle, startAngle, endAngle);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
703 return fullAngle;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
704 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
705
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
706 void SetStart(const ScenePoint2D& p)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
707 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
708 SetModified(true);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
709 start_ = p;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
710 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
711
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
712 void SetMiddle(const ScenePoint2D& p)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
713 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
714 SetModified(true);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
715 middle_ = p;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
716 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
717
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
718 void SetEnd(const ScenePoint2D& p)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
719 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
720 SetModified(true);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
721 end_ = p;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
722 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
723
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
724 virtual bool IsHit(const ScenePoint2D& p,
1809
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
725 const Scene2D& scene) const ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
726 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
727 return false;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
728 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
729
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
730 virtual void RenderPolylineLayer(PolylineSceneLayer& polyline,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
731 const Scene2D& scene) ORTHANC_OVERRIDE
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
732 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
733 static unsigned int NUM_SEGMENTS = 64;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
734
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
735 const double radius = radius_ / scene.GetSceneToCanvasTransform().ComputeZoom();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
736
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
737 double fullAngle, startAngle, endAngle;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
738 ComputeAngles(fullAngle, startAngle, endAngle);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
739
1981
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
740 polyline.AddArc(middle_, radius, radius, startAngle, endAngle, GetActiveColor(), NUM_SEGMENTS);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
741 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
742
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
743 virtual void RenderOtherLayers(MacroSceneLayer& macro,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
744 const Scene2D& scene) ORTHANC_OVERRIDE
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
745 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
746 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
747
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
748 virtual void MovePreview(const ScenePoint2D& delta,
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
749 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
750 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
751 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); // No hit is possible
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
752 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
753
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
754 virtual void MoveDone(const ScenePoint2D& delta,
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
755 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
756 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
757 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); // No hit is possible
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
758 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
759 };
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
760
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
761
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
762 class AnnotationsSceneLayer::Text : public GeometricPrimitive
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
763 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
764 private:
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
765 AnnotationsSceneLayer& that_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
766 bool first_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
767 size_t subLayer_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
768 std::unique_ptr<TextSceneLayer> content_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
769
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
770 public:
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
771 Text(AnnotationsSceneLayer& that,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
772 Annotation& parentAnnotation) :
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
773 GeometricPrimitive(parentAnnotation, 2),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
774 that_(that),
1817
385c268e8b56 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1812
diff changeset
775 first_(true),
385c268e8b56 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1812
diff changeset
776 subLayer_(0) // dummy initialization
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
777 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
778 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
779
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
780 virtual ~Text()
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
781 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
782 if (!first_)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
783 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
784 that_.TagSubLayerToRemove(subLayer_);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
785 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
786 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
787
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
788 void SetContent(const TextSceneLayer& content)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
789 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
790 SetModified(true);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
791 content_.reset(dynamic_cast<TextSceneLayer*>(content.Clone()));
1977
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
792 }
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
793
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
794 void SetText(const std::string& text)
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
795 {
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
796 if (content_.get() == NULL)
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
797 {
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
798 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
799 }
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
800 else
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
801 {
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
802 SetModified(true);
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
803 content_->SetText(text);
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
804 }
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
805 }
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
806
1999
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
807 std::string GetText() const
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
808 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
809 return content_->GetText();
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
810 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
811
1977
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
812 void SetPosition(double x,
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
813 double y)
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
814 {
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
815 if (content_.get() == NULL)
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
816 {
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
817 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
818 }
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
819 else
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
820 {
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
821 SetModified(true);
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
822 content_->SetPosition(x, y);
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
823 }
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
824 }
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
825
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
826 virtual bool IsHit(const ScenePoint2D& p,
1809
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
827 const Scene2D& scene) const ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
828 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
829 return false;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
830 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
831
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
832 virtual void RenderPolylineLayer(PolylineSceneLayer& polyline,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
833 const Scene2D& scene) ORTHANC_OVERRIDE
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
834 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
835 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
836
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
837 virtual void RenderOtherLayers(MacroSceneLayer& macro,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
838 const Scene2D& scene) ORTHANC_OVERRIDE
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
839 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
840 if (content_.get() != NULL)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
841 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
842 std::unique_ptr<TextSceneLayer> layer(reinterpret_cast<TextSceneLayer*>(content_->Clone()));
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
843
1981
c074c75cf416 moved drawing primitives from AnnotationsSceneLayer to PolylineSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1980
diff changeset
844 layer->SetColor(GetActiveColor());
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
845
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
846 if (first_)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
847 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
848 subLayer_ = macro.AddLayer(layer.release());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
849 first_ = false;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
850 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
851 else
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
852 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
853 macro.UpdateLayer(subLayer_, layer.release());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
854 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
855 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
856 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
857
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
858 virtual void MovePreview(const ScenePoint2D& delta,
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
859 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
860 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
861 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); // No hit is possible
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
862 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
863
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
864 virtual void MoveDone(const ScenePoint2D& delta,
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
865 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
866 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
867 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); // No hit is possible
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
868 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
869 };
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
870
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
871
1987
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
872 class AnnotationsSceneLayer::Ellipse : public GeometricPrimitive
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
873 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
874 private:
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
875 ScenePoint2D p1_;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
876 ScenePoint2D p2_;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
877 ScenePoint2D delta_;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
878
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
879 double GetCenterX() const
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
880 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
881 return (p1_.GetX() + p2_.GetX()) / 2.0 + delta_.GetX();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
882 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
883
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
884 double GetCenterY() const
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
885 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
886 return (p1_.GetY() + p2_.GetY()) / 2.0 + delta_.GetY();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
887 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
888
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
889 double GetRadiusX() const
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
890 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
891 return std::abs(p1_.GetX() - p2_.GetX()) / 2.0;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
892 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
893
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
894 double GetRadiusY() const
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
895 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
896 return std::abs(p1_.GetY() - p2_.GetY()) / 2.0;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
897 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
898
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
899 public:
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
900 Ellipse(Annotation& parentAnnotation,
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
901 const ScenePoint2D& p1,
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
902 const ScenePoint2D& p2) :
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
903 GeometricPrimitive(parentAnnotation, 2),
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
904 p1_(p1),
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
905 p2_(p2),
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
906 delta_(0, 0)
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
907 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
908 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
909
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
910 void SetPosition(const ScenePoint2D& p1,
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
911 const ScenePoint2D& p2)
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
912 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
913 SetModified(true);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
914 p1_ = p1;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
915 p2_ = p2;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
916 delta_ = ScenePoint2D(0, 0);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
917 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
918
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
919 ScenePoint2D GetPosition1() const
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
920 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
921 return p1_ + delta_;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
922 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
923
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
924 ScenePoint2D GetPosition2() const
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
925 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
926 return p2_ + delta_;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
927 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
928
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
929 double GetArea() const
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
930 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
931 return PI * GetRadiusX() * GetRadiusY();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
932 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
933
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
934 bool IsPointInside(const ScenePoint2D& p) const
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
935 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
936 const double radiusX = GetRadiusX();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
937 const double radiusY = GetRadiusY();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
938
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
939 double a, b, x, y;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
940
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
941 if (radiusX > radiusY)
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
942 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
943 // The ellipse is horizontal => we are in the case described
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
944 // on Wikipedia:
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
945 // https://en.wikipedia.org/wiki/Ellipse#Standard_equation
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
946
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
947 a = radiusX;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
948 b = radiusY;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
949 x = p.GetX() - GetCenterX();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
950 y = p.GetY() - GetCenterY();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
951 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
952 else
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
953 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
954 a = radiusY;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
955 b = radiusX;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
956 x = p.GetY() - GetCenterY();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
957 y = p.GetX() - GetCenterX();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
958 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
959
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
960 const double c = sqrt(a * a - b * b);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
961
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
962 return (sqrt((x - c) * (x - c) + y * y) +
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
963 sqrt((x + c) * (x + c) + y * y)) <= 2.0 * a;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
964 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
965
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
966 virtual bool IsHit(const ScenePoint2D& p,
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
967 const Scene2D& scene) const ORTHANC_OVERRIDE
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
968 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
969 const double zoom = scene.GetSceneToCanvasTransform().ComputeZoom();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
970
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
971 const double radiusX = GetRadiusX();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
972 const double radiusY = GetRadiusY();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
973
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
974 // Warning: This is only an approximation of the
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
975 // point-to-ellipse distance, as explained here:
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
976 // https://blog.chatfield.io/simple-method-for-distance-to-ellipse/
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
977
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
978 const double x = (p.GetX() - GetCenterX()) / radiusX;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
979 const double y = (p.GetY() - GetCenterY()) / radiusY;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
980 const double t = atan2(y, x);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
981 const double xx = cos(t) - x;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
982 const double yy = sin(t) - y;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
983
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
984 const double approximateDistance = sqrt(xx * xx + yy * yy) * (radiusX + radiusY) / 2.0;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
985 return std::abs(approximateDistance) * zoom <= HANDLE_SIZE / 2.0;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
986 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
987
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
988 virtual void RenderPolylineLayer(PolylineSceneLayer& polyline,
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
989 const Scene2D& scene) ORTHANC_OVERRIDE
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
990 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
991 static unsigned int NUM_SEGMENTS = 128;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
992 polyline.AddArc(GetCenterX(), GetCenterY(), GetRadiusX(), GetRadiusY(), 0, 2.0 * PI, GetActiveColor(), NUM_SEGMENTS);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
993 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
994
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
995 virtual void RenderOtherLayers(MacroSceneLayer& macro,
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
996 const Scene2D& scene) ORTHANC_OVERRIDE
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
997 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
998 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
999
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
1000 virtual void MovePreview(const ScenePoint2D& delta,
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
1001 const Scene2D& scene) ORTHANC_OVERRIDE
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
1002 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
1003 SetModified(true);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
1004 delta_ = delta;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
1005 GetParentAnnotation().SignalMove(*this, scene);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
1006 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
1007
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
1008 virtual void MoveDone(const ScenePoint2D& delta,
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
1009 const Scene2D& scene) ORTHANC_OVERRIDE
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
1010 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
1011 SetModified(true);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
1012 p1_ = p1_ + delta;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
1013 p2_ = p2_ + delta;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
1014 delta_ = ScenePoint2D(0, 0);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
1015 GetParentAnnotation().SignalMove(*this, scene);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
1016 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
1017 };
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
1018
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
1019
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1020 class AnnotationsSceneLayer::EditPrimitiveTracker : public IFlexiblePointerTracker
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1021 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1022 private:
1809
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
1023 AnnotationsSceneLayer& that_;
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
1024 GeometricPrimitive& primitive_;
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
1025 ScenePoint2D sceneClick_;
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
1026 AffineTransform2D canvasToScene_;
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
1027 bool alive_;
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1028
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1029 public:
1809
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
1030 EditPrimitiveTracker(AnnotationsSceneLayer& that,
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
1031 GeometricPrimitive& primitive,
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1032 const ScenePoint2D& sceneClick,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1033 const AffineTransform2D& canvasToScene) :
1809
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
1034 that_(that),
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1035 primitive_(primitive),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1036 sceneClick_(sceneClick),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1037 canvasToScene_(canvasToScene),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1038 alive_(true)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1039 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1040 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1041
1972
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
1042 virtual void PointerMove(const PointerEvent& event,
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
1043 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1044 {
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1045 primitive_.MovePreview(event.GetMainPosition().Apply(canvasToScene_) - sceneClick_, scene);
1809
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
1046 that_.BroadcastMessage(AnnotationChangedMessage(that_));
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1047 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1048
1972
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
1049 virtual void PointerUp(const PointerEvent& event,
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
1050 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1051 {
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1052 primitive_.MoveDone(event.GetMainPosition().Apply(canvasToScene_) - sceneClick_, scene);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1053 alive_ = false;
1809
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
1054 that_.BroadcastMessage(AnnotationChangedMessage(that_));
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1055 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1056
1972
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
1057 virtual void PointerDown(const PointerEvent& event,
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
1058 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1059 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1060 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1061
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1062 virtual bool IsAlive() const ORTHANC_OVERRIDE
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1063 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1064 return alive_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1065 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1066
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1067 virtual void Cancel(const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1068 {
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1069 //primitive_.MoveDone(ScenePoint2D(0, 0), scene);
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1070 primitive_.MoveDone(sceneClick_, scene); // TODO Check this
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1071 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1072 };
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1073
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1074
1999
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1075 class AnnotationsSceneLayer::SegmentAnnotation : public Annotation
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1076 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1077 private:
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1078 Handle& handle1_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1079 Handle& handle2_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1080 Segment& segment_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1081 Text& label_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1082
1999
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1083 protected:
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1084 void SetLabelContent(const TextSceneLayer& content)
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1085 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1086 label_.SetContent(content);
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1087 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1088
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1089 std::string GetCurrentLabel() const
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1090 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1091 return label_.GetText();
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1092 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1093
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1094 const Handle& GetHandle1() const
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1095 {
1999
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1096 return handle1_;
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1097 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1098
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1099 const Handle& GetHandle2() const
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1100 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1101 return handle2_;
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1102 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1103
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1104 void SetStartArrow(bool enabled)
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1105 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1106 segment_.SetStartArrow(enabled);
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1107 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1108
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1109 void SetEndArrow(bool enabled)
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1110 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1111 segment_.SetEndArrow(enabled);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1112 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1113
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1114 public:
1999
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1115 SegmentAnnotation(AnnotationsSceneLayer& that,
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1116 Handle::Shape shape1,
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1117 const ScenePoint2D& p1,
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1118 Handle::Shape shape2,
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1119 const ScenePoint2D& p2) :
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
1120 Annotation(that),
1999
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1121 handle1_(AddTypedPrimitive<Handle>(new Handle(*this, shape1, p1))),
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1122 handle2_(AddTypedPrimitive<Handle>(new Handle(*this, shape2, p2))),
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1123 segment_(AddTypedPrimitive<Segment>(new Segment(*this, p1, p2))),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1124 label_(AddTypedPrimitive<Text>(new Text(that, *this)))
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1125 {
1819
fe402c678d18 improved color theme for annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1817
diff changeset
1126 label_.SetColor(COLOR_TEXT);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1127 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1128
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1129 virtual unsigned int GetHandlesCount() const ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1130 {
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1131 return 2;
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1132 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1133
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1134 virtual Handle& GetHandle(unsigned int index) const ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1135 {
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1136 switch (index)
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1137 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1138 case 0:
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1139 return handle1_;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1140
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1141 case 1:
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1142 return handle2_;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1143
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1144 default:
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1145 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1146 }
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1147 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1148
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1149 virtual void SignalMove(GeometricPrimitive& primitive,
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1150 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1151 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1152 if (&primitive == &handle1_ ||
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1153 &primitive == &handle2_)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1154 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1155 segment_.SetPosition(handle1_.GetCenter(), handle2_.GetCenter());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1156 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1157 else if (&primitive == &segment_)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1158 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1159 handle1_.SetCenter(segment_.GetPosition1());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1160 handle2_.SetCenter(segment_.GetPosition2());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1161 }
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1162 else
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1163 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1164 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented);
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1165 }
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1166 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1167
1976
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1168 virtual void UpdateProbe(const Scene2D& scene) ORTHANC_OVERRIDE
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1169 {
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1170 }
1999
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1171 };
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1172
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1173
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1174 class AnnotationsSceneLayer::LengthAnnotation : public SegmentAnnotation
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1175 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1176 private:
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
1177 Units units_;
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
1178 bool showLabel_;
1999
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1179
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1180 void UpdateLabel()
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1181 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1182 if (showLabel_)
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1183 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1184 TextSceneLayer content;
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1185
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1186 double x1 = GetHandle1().GetCenter().GetX();
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1187 double y1 = GetHandle1().GetCenter().GetY();
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1188 double x2 = GetHandle2().GetCenter().GetX();
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1189 double y2 = GetHandle2().GetCenter().GetY();
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1190
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1191 // Put the label to the right of the right-most handle
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1192 if (x1 < x2)
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1193 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1194 content.SetPosition(x2, y2);
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1195 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1196 else
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1197 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1198 content.SetPosition(x1, y1);
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1199 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1200
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1201 content.SetAnchor(BitmapAnchor_CenterLeft);
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1202 content.SetBorder(10);
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1203
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1204 double dx = x1 - x2;
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1205 double dy = y1 - y2;
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1206 char buf[32];
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1207
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
1208 switch (units_)
1999
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1209 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1210 case Units_Millimeters:
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1211 sprintf(buf, "%0.2f cm", sqrt(dx * dx + dy * dy) / 10.0);
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1212 break;
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1213
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1214 case Units_Pixels:
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1215 sprintf(buf, "%0.1f px", sqrt(dx * dx + dy * dy));
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1216 break;
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1217
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1218 default:
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1219 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented);
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1220 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1221
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1222 content.SetText(buf);
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1223
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1224 SetLabelContent(content);
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1225 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1226 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1227
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1228 public:
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1229 LengthAnnotation(AnnotationsSceneLayer& that,
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1230 Units units,
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1231 bool showLabel,
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1232 const ScenePoint2D& p1,
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1233 const ScenePoint2D& p2) :
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
1234 SegmentAnnotation(that, Handle::Shape_Square, p1, Handle::Shape_Square, p2),
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
1235 units_(units),
1999
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1236 showLabel_(showLabel)
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1237 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1238 UpdateLabel();
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1239 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1240
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1241 virtual void SignalMove(GeometricPrimitive& primitive,
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1242 const Scene2D& scene) ORTHANC_OVERRIDE
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1243 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1244 SegmentAnnotation::SignalMove(primitive, scene);
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1245 UpdateLabel();
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1246 }
1976
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1247
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1248 virtual void Serialize(Json::Value& target) ORTHANC_OVERRIDE
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1249 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1250 target = Json::objectValue;
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
1251 target[KEY_TYPE] = VALUE_LENGTH;
1999
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1252 target[KEY_X1] = GetHandle1().GetCenter().GetX();
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1253 target[KEY_Y1] = GetHandle1().GetCenter().GetY();
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1254 target[KEY_X2] = GetHandle2().GetCenter().GetX();
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1255 target[KEY_Y2] = GetHandle2().GetCenter().GetY();
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1256 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1257
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1258 static void Unserialize(AnnotationsSceneLayer& target,
1821
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1259 Units units,
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1260 const Json::Value& source)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1261 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1262 if (source.isMember(KEY_X1) &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1263 source.isMember(KEY_Y1) &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1264 source.isMember(KEY_X2) &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1265 source.isMember(KEY_Y2) &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1266 source[KEY_X1].isNumeric() &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1267 source[KEY_Y1].isNumeric() &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1268 source[KEY_X2].isNumeric() &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1269 source[KEY_Y2].isNumeric())
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1270 {
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
1271 new LengthAnnotation(target, units, true,
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
1272 ScenePoint2D(source[KEY_X1].asDouble(), source[KEY_Y1].asDouble()),
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
1273 ScenePoint2D(source[KEY_X2].asDouble(), source[KEY_Y2].asDouble()));
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1274 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1275 else
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1276 {
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
1277 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat, "Cannot unserialize a length annotation");
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1278 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1279 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1280 };
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1281
1977
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
1282
1999
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1283 class AnnotationsSceneLayer::TextAnnotation : public SegmentAnnotation
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1284 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1285 public:
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1286 TextAnnotation(AnnotationsSceneLayer& that,
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1287 const std::string& label,
2001
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
1288 const ScenePoint2D& pointedPosition,
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
1289 const ScenePoint2D& labelPosition) :
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
1290 SegmentAnnotation(that, Handle::Shape_Invisible, pointedPosition /* p1 */,
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
1291 Handle::Shape_Square, labelPosition /* p2 */)
1999
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1292 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1293 SetStartArrow(true);
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1294 UpdateLabel(label);
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1295 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1296
2001
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
1297 ScenePoint2D GetPointedPosition() const
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
1298 {
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
1299 return GetHandle1().GetCenter();
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
1300 }
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
1301
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
1302 ScenePoint2D GetLabelPosition() const
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
1303 {
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
1304 return GetHandle2().GetCenter();
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
1305 }
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
1306
1999
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1307 void UpdateLabel(const std::string& label)
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1308 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1309 TextSceneLayer content;
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1310
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1311 double x1 = GetHandle1().GetCenter().GetX();
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1312 double x2 = GetHandle2().GetCenter().GetX();
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1313 double y2 = GetHandle2().GetCenter().GetY();
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1314
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1315 if (x1 < x2)
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1316 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1317 content.SetAnchor(BitmapAnchor_CenterLeft);
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1318 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1319 else
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1320 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1321 content.SetAnchor(BitmapAnchor_CenterRight);
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1322 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1323
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1324 content.SetPosition(x2, y2);
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1325 content.SetBorder(10);
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1326 content.SetText(label);
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1327
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1328 SetLabelContent(content);
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1329 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1330
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1331 void UpdateLabel()
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1332 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1333 UpdateLabel(GetCurrentLabel());
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1334 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1335
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1336 virtual void SignalMove(GeometricPrimitive& primitive,
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1337 const Scene2D& scene) ORTHANC_OVERRIDE
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1338 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1339 SegmentAnnotation::SignalMove(primitive, scene);
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1340 UpdateLabel();
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1341 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1342
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1343 virtual void Serialize(Json::Value& target) ORTHANC_OVERRIDE
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1344 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1345 target = Json::objectValue;
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1346 target[KEY_TYPE] = VALUE_TEXT_ANNOTATION;
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1347 target[KEY_X1] = GetHandle1().GetCenter().GetX();
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1348 target[KEY_Y1] = GetHandle1().GetCenter().GetY();
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1349 target[KEY_X2] = GetHandle2().GetCenter().GetX();
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1350 target[KEY_Y2] = GetHandle2().GetCenter().GetY();
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1351 target[KEY_LABEL] = GetCurrentLabel();
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1352 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1353
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1354 static void Unserialize(AnnotationsSceneLayer& target,
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1355 const Json::Value& source)
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1356 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1357 if (source.isMember(KEY_X1) &&
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1358 source.isMember(KEY_Y1) &&
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1359 source.isMember(KEY_X2) &&
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1360 source.isMember(KEY_Y2) &&
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1361 source.isMember(KEY_LABEL) &&
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1362 source[KEY_X1].isNumeric() &&
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1363 source[KEY_Y1].isNumeric() &&
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1364 source[KEY_X2].isNumeric() &&
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1365 source[KEY_Y2].isNumeric() &&
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1366 source[KEY_LABEL].isString())
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1367 {
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
1368 new TextAnnotation(target, source[KEY_LABEL].asString(),
1999
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1369 ScenePoint2D(source[KEY_X1].asDouble(), source[KEY_Y1].asDouble()),
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1370 ScenePoint2D(source[KEY_X2].asDouble(), source[KEY_Y2].asDouble()));
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1371 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1372 else
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1373 {
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1374 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat, "Cannot unserialize a text annotation");
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1375 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1376 }
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1377 };
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1378
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
1379
1978
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1380 // Use this class to avoid unnecessary probing if neither the scene,
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1381 // nor the probe, has changed
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1382 class AnnotationsSceneLayer::ProbingAnnotation : public Annotation
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1383 {
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1384 private:
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1385 int probedLayer_;
1978
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1386 bool probeChanged_;
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1387 uint64_t lastLayerRevision_;
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1388
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1389 protected:
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1390 virtual void UpdateProbeForLayer(const ISceneLayer& layer) = 0;
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1391
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1392 void TagProbeAsChanged()
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1393 {
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1394 probeChanged_ = true;
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1395 }
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1396
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1397 public:
2002
1bb0a9716876 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2001
diff changeset
1398 explicit ProbingAnnotation(AnnotationsSceneLayer& that) :
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
1399 Annotation(that),
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1400 probedLayer_(that.GetProbedLayer()),
1978
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1401 probeChanged_(true),
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1402 lastLayerRevision_(0)
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1403 {
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1404 }
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1405
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1406 virtual void UpdateProbe(const Scene2D& scene) ORTHANC_OVERRIDE
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1407 {
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1408 if (scene.HasLayer(probedLayer_))
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1409 {
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1410 const ISceneLayer& layer = scene.GetLayer(probedLayer_);
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1411 if (probeChanged_ ||
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1412 layer.GetRevision() != lastLayerRevision_)
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1413 {
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1414 UpdateProbeForLayer(layer);
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1415 probeChanged_ = false;
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1416 lastLayerRevision_ = layer.GetRevision();
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1417 }
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1418 }
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1419 }
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1420 };
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1421
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1422
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1423 class AnnotationsSceneLayer::PixelProbeAnnotation : public ProbingAnnotation
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1424 {
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1425 private:
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1426 Handle& handle_;
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1427 Text& label_;
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1428
1978
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1429 protected:
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1430 virtual void UpdateProbeForLayer(const ISceneLayer& layer) ORTHANC_OVERRIDE
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1431 {
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1432 if (layer.GetType() == ISceneLayer::Type_FloatTexture ||
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1433 layer.GetType() == ISceneLayer::Type_ColorTexture)
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1434 {
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1435 const TextureBaseSceneLayer& texture = dynamic_cast<const TextureBaseSceneLayer&>(layer);
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1436 const AffineTransform2D sceneToTexture = AffineTransform2D::Invert(texture.GetTransform());
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1437
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1438 double sceneX = handle_.GetCenter().GetX();
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1439 double sceneY = handle_.GetCenter().GetY();
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1440 sceneToTexture.Apply(sceneX, sceneY);
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1441
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1442 int x = static_cast<int>(std::floor(sceneX));
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1443 int y = static_cast<int>(std::floor(sceneY));
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1444
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1445 const Orthanc::ImageAccessor& image = texture.GetTexture();
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1446
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1447 if (x >= 0 &&
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1448 y >= 0 &&
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1449 x < static_cast<int>(image.GetWidth()) &&
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1450 y < static_cast<int>(image.GetHeight()))
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1451 {
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1452 char buf[64];
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1453
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1454 switch (image.GetFormat())
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1455 {
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1456 case Orthanc::PixelFormat_Float32:
1980
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
1457 sprintf(buf, "(%d,%d): %.01f", x, y, Orthanc::ImageTraits<Orthanc::PixelFormat_Float32>::GetFloatPixel(
1978
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1458 image, static_cast<unsigned int>(x), static_cast<unsigned int>(y)));
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1459 break;
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1460
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1461 case Orthanc::PixelFormat_RGB24:
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1462 {
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1463 Orthanc::PixelTraits<Orthanc::PixelFormat_RGB24>::PixelType pixel;
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1464 Orthanc::ImageTraits<Orthanc::PixelFormat_RGB24>::GetPixel(
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1465 pixel, image, static_cast<unsigned int>(x), static_cast<unsigned int>(y));
1980
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
1466 sprintf(buf, "(%d,%d): (%d,%d,%d)", x, y, pixel.red_, pixel.green_, pixel.blue_);
1978
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1467 break;
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1468 }
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1469
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1470 default:
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1471 break;
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1472 }
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1473
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1474 label_.SetText(buf);
1979
b31e494e34c5 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1978
diff changeset
1475 }
b31e494e34c5 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1978
diff changeset
1476 else
b31e494e34c5 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1978
diff changeset
1477 {
b31e494e34c5 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1978
diff changeset
1478 label_.SetText("?");
b31e494e34c5 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1978
diff changeset
1479 }
1978
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1480 }
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1481 }
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1482
1976
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1483 public:
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1484 PixelProbeAnnotation(AnnotationsSceneLayer& that,
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1485 const ScenePoint2D& p) :
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
1486 ProbingAnnotation(that),
1980
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
1487 handle_(AddTypedPrimitive<Handle>(new Handle(*this, Handle::Shape_CrossedSquare, p))),
1976
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1488 label_(AddTypedPrimitive<Text>(new Text(that, *this)))
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1489 {
1977
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
1490 TextSceneLayer content;
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
1491 content.SetPosition(handle_.GetCenter().GetX(), handle_.GetCenter().GetY());
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
1492 content.SetAnchor(BitmapAnchor_CenterLeft);
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
1493 content.SetBorder(10);
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
1494 content.SetText("?");
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
1495
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
1496 label_.SetContent(content);
1976
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1497 label_.SetColor(COLOR_TEXT);
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1498 }
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1499
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1500 virtual unsigned int GetHandlesCount() const ORTHANC_OVERRIDE
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1501 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1502 return 1;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1503 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1504
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1505 virtual Handle& GetHandle(unsigned int index) const ORTHANC_OVERRIDE
1976
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1506 {
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1507 if (index == 0)
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1508 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1509 return handle_;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1510 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1511 else
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1512 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1513 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1514 }
1976
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1515 }
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1516
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1517 virtual void SignalMove(GeometricPrimitive& primitive,
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1518 const Scene2D& scene) ORTHANC_OVERRIDE
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1519 {
1977
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
1520 label_.SetPosition(handle_.GetCenter().GetX(), handle_.GetCenter().GetY());
1978
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
1521 TagProbeAsChanged();
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1522 }
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1523
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1524 virtual void Serialize(Json::Value& target) ORTHANC_OVERRIDE
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1525 {
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1526 target = Json::objectValue;
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1527 target[KEY_TYPE] = VALUE_PIXEL_PROBE;
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1528 target[KEY_X] = handle_.GetCenter().GetX();
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1529 target[KEY_Y] = handle_.GetCenter().GetY();
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1530 }
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1531
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1532 static void Unserialize(AnnotationsSceneLayer& target,
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1533 const Json::Value& source)
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1534 {
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1535 if (source.isMember(KEY_X) &&
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1536 source.isMember(KEY_Y) &&
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1537 source[KEY_X].isNumeric() &&
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1538 source[KEY_Y].isNumeric())
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1539 {
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
1540 new PixelProbeAnnotation(target, ScenePoint2D(source[KEY_X].asDouble(), source[KEY_Y].asDouble()));
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1541 }
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1542 else
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1543 {
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1544 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat, "Cannot unserialize a pixel probe");
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1545 }
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1546 }
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1547 };
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1548
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1549
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1550 class AnnotationsSceneLayer::AngleAnnotation : public Annotation
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1551 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1552 private:
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1553 Handle& startHandle_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1554 Handle& middleHandle_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1555 Handle& endHandle_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1556 Segment& segment1_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1557 Segment& segment2_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1558 Arc& arc_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1559 Text& label_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1560
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1561 void UpdateLabel()
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1562 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1563 TextSceneLayer content;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1564
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1565 const double x1 = startHandle_.GetCenter().GetX();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1566 const double x2 = middleHandle_.GetCenter().GetX();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1567 const double y2 = middleHandle_.GetCenter().GetY();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1568 const double x3 = endHandle_.GetCenter().GetX();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1569
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1570 if (x2 < x1 &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1571 x2 < x3)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1572 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1573 content.SetAnchor(BitmapAnchor_CenterRight);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1574 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1575 else
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1576 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1577 content.SetAnchor(BitmapAnchor_CenterLeft);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1578 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1579
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1580 content.SetPosition(x2, y2);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1581 content.SetBorder(10);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1582
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1583 char buf[32];
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1584 sprintf(buf, "%.01f%c%c", std::abs(arc_.GetAngle()) / PI * 180.0,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1585 0xc2, 0xb0 /* two bytes corresponding to degree symbol in UTF-8 */);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1586 content.SetText(buf);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1587
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1588 label_.SetContent(content);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1589 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1590
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1591 public:
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1592 AngleAnnotation(AnnotationsSceneLayer& that,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1593 const ScenePoint2D& start,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1594 const ScenePoint2D& middle,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1595 const ScenePoint2D& end) :
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
1596 Annotation(that),
1980
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
1597 startHandle_(AddTypedPrimitive<Handle>(new Handle(*this, Handle::Shape_Square, start))),
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
1598 middleHandle_(AddTypedPrimitive<Handle>(new Handle(*this, Handle::Shape_Square, middle))),
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
1599 endHandle_(AddTypedPrimitive<Handle>(new Handle(*this, Handle::Shape_Square, end))),
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1600 segment1_(AddTypedPrimitive<Segment>(new Segment(*this, start, middle))),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1601 segment2_(AddTypedPrimitive<Segment>(new Segment(*this, middle, end))),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1602 arc_(AddTypedPrimitive<Arc>(new Arc(*this, start, middle, end))),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1603 label_(AddTypedPrimitive<Text>(new Text(that, *this)))
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1604 {
1819
fe402c678d18 improved color theme for annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1817
diff changeset
1605 label_.SetColor(COLOR_TEXT);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1606 UpdateLabel();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1607 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1608
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1609 virtual unsigned int GetHandlesCount() const ORTHANC_OVERRIDE
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1610 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1611 return 3;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1612 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1613
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1614 virtual Handle& GetHandle(unsigned int index) const ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1615 {
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1616 switch (index)
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1617 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1618 case 0:
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1619 return startHandle_;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1620
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1621 case 1:
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1622 return middleHandle_;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1623
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1624 case 2:
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1625 return endHandle_;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1626
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1627 default:
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1628 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1629 }
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1630 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1631
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1632 virtual void SignalMove(GeometricPrimitive& primitive,
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1633 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1634 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1635 if (&primitive == &startHandle_)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1636 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1637 segment1_.SetPosition(startHandle_.GetCenter(), middleHandle_.GetCenter());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1638 arc_.SetStart(startHandle_.GetCenter());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1639 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1640 else if (&primitive == &middleHandle_)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1641 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1642 segment1_.SetPosition(startHandle_.GetCenter(), middleHandle_.GetCenter());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1643 segment2_.SetPosition(middleHandle_.GetCenter(), endHandle_.GetCenter());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1644 arc_.SetMiddle(middleHandle_.GetCenter());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1645 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1646 else if (&primitive == &endHandle_)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1647 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1648 segment2_.SetPosition(middleHandle_.GetCenter(), endHandle_.GetCenter());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1649 arc_.SetEnd(endHandle_.GetCenter());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1650 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1651 else if (&primitive == &segment1_)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1652 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1653 startHandle_.SetCenter(segment1_.GetPosition1());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1654 middleHandle_.SetCenter(segment1_.GetPosition2());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1655 segment2_.SetPosition(segment1_.GetPosition2(), segment2_.GetPosition2());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1656 arc_.SetStart(segment1_.GetPosition1());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1657 arc_.SetMiddle(segment1_.GetPosition2());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1658 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1659 else if (&primitive == &segment2_)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1660 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1661 middleHandle_.SetCenter(segment2_.GetPosition1());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1662 endHandle_.SetCenter(segment2_.GetPosition2());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1663 segment1_.SetPosition(segment1_.GetPosition1(), segment2_.GetPosition1());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1664 arc_.SetMiddle(segment2_.GetPosition1());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1665 arc_.SetEnd(segment2_.GetPosition2());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1666 }
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1667 else
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1668 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1669 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented);
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1670 }
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1671
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1672 UpdateLabel();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1673 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1674
1976
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1675 virtual void UpdateProbe(const Scene2D& scene) ORTHANC_OVERRIDE
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1676 {
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1677 }
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1678
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1679 virtual void Serialize(Json::Value& target) ORTHANC_OVERRIDE
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1680 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1681 target = Json::objectValue;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1682 target[KEY_TYPE] = VALUE_ANGLE;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1683 target[KEY_X1] = startHandle_.GetCenter().GetX();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1684 target[KEY_Y1] = startHandle_.GetCenter().GetY();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1685 target[KEY_X2] = middleHandle_.GetCenter().GetX();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1686 target[KEY_Y2] = middleHandle_.GetCenter().GetY();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1687 target[KEY_X3] = endHandle_.GetCenter().GetX();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1688 target[KEY_Y3] = endHandle_.GetCenter().GetY();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1689 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1690
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1691 static void Unserialize(AnnotationsSceneLayer& target,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1692 const Json::Value& source)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1693 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1694 if (source.isMember(KEY_X1) &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1695 source.isMember(KEY_Y1) &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1696 source.isMember(KEY_X2) &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1697 source.isMember(KEY_Y2) &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1698 source.isMember(KEY_X3) &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1699 source.isMember(KEY_Y3) &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1700 source[KEY_X1].isNumeric() &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1701 source[KEY_Y1].isNumeric() &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1702 source[KEY_X2].isNumeric() &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1703 source[KEY_Y2].isNumeric() &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1704 source[KEY_X3].isNumeric() &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1705 source[KEY_Y3].isNumeric())
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1706 {
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
1707 new AngleAnnotation(target,
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1708 ScenePoint2D(source[KEY_X1].asDouble(), source[KEY_Y1].asDouble()),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1709 ScenePoint2D(source[KEY_X2].asDouble(), source[KEY_Y2].asDouble()),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1710 ScenePoint2D(source[KEY_X3].asDouble(), source[KEY_Y3].asDouble()));
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1711 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1712 else
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1713 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1714 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat, "Cannot unserialize an angle annotation");
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1715 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1716 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1717 };
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1718
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1719
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1720 class AnnotationsSceneLayer::CircleAnnotation : public Annotation
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1721 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1722 private:
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
1723 Units units_;
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1724 Handle& handle1_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1725 Handle& handle2_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1726 Segment& segment_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1727 Circle& circle_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1728 Text& label_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1729
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1730 void UpdateLabel()
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1731 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1732 TextSceneLayer content;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1733
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1734 double x1 = handle1_.GetCenter().GetX();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1735 double y1 = handle1_.GetCenter().GetY();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1736 double x2 = handle2_.GetCenter().GetX();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1737 double y2 = handle2_.GetCenter().GetY();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1738
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1739 // Put the label to the right of the right-most handle
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1740 if (x1 < x2)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1741 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1742 content.SetPosition(x2, y2);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1743 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1744 else
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1745 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1746 content.SetPosition(x1, y1);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1747 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1748
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1749 content.SetAnchor(BitmapAnchor_CenterLeft);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1750 content.SetBorder(10);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1751
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1752 double dx = x1 - x2;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1753 double dy = y1 - y2;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1754 double diameter = sqrt(dx * dx + dy * dy); // in millimeters
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1755
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1756 double area = PI * diameter * diameter / 4.0;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1757
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1758 char buf[32];
1821
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1759
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
1760 switch (units_)
1821
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1761 {
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1762 case Units_Millimeters:
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1763 sprintf(buf, "%0.2f cm\n%0.2f cm%c%c",
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1764 diameter / 10.0,
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1765 area / 100.0,
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1766 0xc2, 0xb2 /* two bytes corresponding to two power in UTF-8 */);
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1767 break;
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1768
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1769 case Units_Pixels:
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1770 // Don't report area (pixel-times-pixel is a strange unit)
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1771 sprintf(buf, "%0.1f px", diameter);
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1772 break;
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1773
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1774 default:
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1775 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented);
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1776 }
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1777
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1778 content.SetText(buf);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1779
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1780 label_.SetContent(content);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1781 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1782
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1783 public:
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1784 CircleAnnotation(AnnotationsSceneLayer& that,
1821
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1785 Units units,
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1786 const ScenePoint2D& p1,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1787 const ScenePoint2D& p2) :
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
1788 Annotation(that),
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
1789 units_(units),
1980
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
1790 handle1_(AddTypedPrimitive<Handle>(new Handle(*this, Handle::Shape_Square, p1))),
0aac8f552d89 added pixel probe to the Stone Web viewer toolbar
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1979
diff changeset
1791 handle2_(AddTypedPrimitive<Handle>(new Handle(*this, Handle::Shape_Square, p2))),
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1792 segment_(AddTypedPrimitive<Segment>(new Segment(*this, p1, p2))),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1793 circle_(AddTypedPrimitive<Circle>(new Circle(*this, p1, p2))),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1794 label_(AddTypedPrimitive<Text>(new Text(that, *this)))
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1795 {
1819
fe402c678d18 improved color theme for annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1817
diff changeset
1796 label_.SetColor(COLOR_TEXT);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1797 UpdateLabel();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1798 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1799
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1800 virtual unsigned int GetHandlesCount() const ORTHANC_OVERRIDE
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1801 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1802 return 2;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1803 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1804
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1805 virtual Handle& GetHandle(unsigned int index) const ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1806 {
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1807 switch (index)
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1808 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1809 case 0:
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1810 return handle1_;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1811
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1812 case 1:
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1813 return handle2_;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1814
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1815 default:
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1816 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1817 }
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1818 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1819
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1820 virtual void SignalMove(GeometricPrimitive& primitive,
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
1821 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1822 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1823 if (&primitive == &handle1_ ||
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1824 &primitive == &handle2_)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1825 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1826 segment_.SetPosition(handle1_.GetCenter(), handle2_.GetCenter());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1827 circle_.SetPosition(handle1_.GetCenter(), handle2_.GetCenter());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1828 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1829 else if (&primitive == &segment_)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1830 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1831 handle1_.SetCenter(segment_.GetPosition1());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1832 handle2_.SetCenter(segment_.GetPosition2());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1833 circle_.SetPosition(segment_.GetPosition1(), segment_.GetPosition2());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1834 }
1823
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
1835 else if (&primitive == &circle_)
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
1836 {
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
1837 handle1_.SetCenter(circle_.GetPosition1());
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
1838 handle2_.SetCenter(circle_.GetPosition2());
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
1839 segment_.SetPosition(circle_.GetPosition1(), circle_.GetPosition2());
781e9fc8925e dragging circle annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1821
diff changeset
1840 }
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1841 else
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1842 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1843 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented);
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1844 }
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1845
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1846 UpdateLabel();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1847 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1848
1976
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1849 virtual void UpdateProbe(const Scene2D& scene) ORTHANC_OVERRIDE
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1850 {
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1851 }
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
1852
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1853 virtual void Serialize(Json::Value& target) ORTHANC_OVERRIDE
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1854 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1855 target = Json::objectValue;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1856 target[KEY_TYPE] = VALUE_CIRCLE;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1857 target[KEY_X1] = handle1_.GetCenter().GetX();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1858 target[KEY_Y1] = handle1_.GetCenter().GetY();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1859 target[KEY_X2] = handle2_.GetCenter().GetX();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1860 target[KEY_Y2] = handle2_.GetCenter().GetY();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1861 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1862
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1863 static void Unserialize(AnnotationsSceneLayer& target,
1821
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1864 Units units,
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1865 const Json::Value& source)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1866 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1867 if (source.isMember(KEY_X1) &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1868 source.isMember(KEY_Y1) &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1869 source.isMember(KEY_X2) &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1870 source.isMember(KEY_Y2) &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1871 source[KEY_X1].isNumeric() &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1872 source[KEY_Y1].isNumeric() &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1873 source[KEY_X2].isNumeric() &&
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1874 source[KEY_Y2].isNumeric())
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1875 {
1821
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
1876 new CircleAnnotation(target, units,
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1877 ScenePoint2D(source[KEY_X1].asDouble(), source[KEY_Y1].asDouble()),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1878 ScenePoint2D(source[KEY_X2].asDouble(), source[KEY_Y2].asDouble()));
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1879 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1880 else
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1881 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1882 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat, "Cannot unserialize an circle annotation");
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1883 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1884 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1885 };
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1886
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1887
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1888 class AnnotationsSceneLayer::RectangleProbeAnnotation : public ProbingAnnotation
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1889 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1890 private:
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
1891 Units units_;
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1892 Handle& handle1_;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1893 Handle& handle2_;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1894 Segment& segment1_;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1895 Segment& segment2_;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1896 Segment& segment3_;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1897 Segment& segment4_;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1898 Text& label_;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1899
1984
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1900 protected:
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1901 virtual void UpdateProbeForLayer(const ISceneLayer& layer) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1902 {
1984
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1903 double x1 = handle1_.GetCenter().GetX();
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1904 double y1 = handle1_.GetCenter().GetY();
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1905 double x2 = handle2_.GetCenter().GetX();
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1906 double y2 = handle2_.GetCenter().GetY();
1990
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
1907
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1908 {
1990
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
1909 // Put the label to the right of the right-most handle
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
1910 //const double y = std::min(y1, y2);
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
1911 const double y = (y1 + y2) / 2.0;
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
1912 if (x1 < x2)
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
1913 {
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
1914 label_.SetPosition(x2, y);
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
1915 }
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
1916 else
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
1917 {
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
1918 label_.SetPosition(x1, y);
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
1919 }
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1920 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1921
1984
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1922 std::string text;
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1923
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1924 char buf[32];
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1925
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
1926 if (units_ == Units_Millimeters)
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1927 {
1984
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1928 const double area = std::abs(x1 - x2) * std::abs(y1 - y2);
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1929
1987
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
1930 sprintf(buf, "Area: %0.2f cm%c%c",
1984
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1931 area / 100.0,
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1932 0xc2, 0xb2 /* two bytes corresponding to two power in UTF-8 */);
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1933 text = buf;
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1934 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1935
1984
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1936 if (layer.GetType() == ISceneLayer::Type_FloatTexture)
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1937 {
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1938 const TextureBaseSceneLayer& texture = dynamic_cast<const TextureBaseSceneLayer&>(layer);
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1939 const AffineTransform2D sceneToTexture = AffineTransform2D::Invert(texture.GetTransform());
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1940
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1941 const Orthanc::ImageAccessor& image = texture.GetTexture();
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1942 assert(image.GetFormat() == Orthanc::PixelFormat_Float32);
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1943
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1944 sceneToTexture.Apply(x1, y1);
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1945 sceneToTexture.Apply(x2, y2);
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1946 int ix1 = static_cast<int>(std::floor(x1));
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1947 int iy1 = static_cast<int>(std::floor(y1));
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1948 int ix2 = static_cast<int>(std::floor(x2));
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1949 int iy2 = static_cast<int>(std::floor(y2));
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1950
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1951 if (ix1 > ix2)
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1952 {
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1953 std::swap(ix1, ix2);
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1954 }
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1955
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1956 if (iy1 > iy2)
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1957 {
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1958 std::swap(iy1, iy2);
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1959 }
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1960
1984
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1961 LinearAlgebra::OnlineVarianceEstimator estimator;
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1962
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1963 for (int y = std::max(0, iy1); y <= std::min(static_cast<int>(image.GetHeight()) - 1, iy2); y++)
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1964 {
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1965 int x = std::max(0, ix1);
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1966
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1967 const float* p = reinterpret_cast<const float*>(image.GetConstRow(y)) + x;
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1968
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1969 for (; x <= std::min(static_cast<int>(image.GetWidth()) - 1, ix2); x++, p++)
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1970 {
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1971 estimator.AddSample(*p);
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1972 }
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1973 }
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1974
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1975 if (estimator.GetCount() > 0)
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1976 {
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1977 if (!text.empty())
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1978 {
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1979 text += "\n";
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1980 }
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1981 sprintf(buf, "Mean: %0.1f\nStdDev: %0.1f", estimator.GetMean(), estimator.GetStandardDeviation());
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1982 text += buf;
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1983 }
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1984 }
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1985
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
1986 label_.SetText(text);
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1987 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1988
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1989 public:
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1990 RectangleProbeAnnotation(AnnotationsSceneLayer& that,
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1991 Units units,
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1992 const ScenePoint2D& p1,
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1993 const ScenePoint2D& p2) :
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
1994 ProbingAnnotation(that),
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
1995 units_(units),
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1996 handle1_(AddTypedPrimitive<Handle>(new Handle(*this, Handle::Shape_Square, p1))),
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1997 handle2_(AddTypedPrimitive<Handle>(new Handle(*this, Handle::Shape_Square, p2))),
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1998 segment1_(AddTypedPrimitive<Segment>(new Segment(*this, p1.GetX(), p1.GetY(), p2.GetX(), p1.GetY()))),
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
1999 segment2_(AddTypedPrimitive<Segment>(new Segment(*this, p2.GetX(), p1.GetY(), p2.GetX(), p2.GetY()))),
1986
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2000 segment3_(AddTypedPrimitive<Segment>(new Segment(*this, p1.GetX(), p2.GetY(), p2.GetX(), p2.GetY()))),
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2001 segment4_(AddTypedPrimitive<Segment>(new Segment(*this, p1.GetX(), p1.GetY(), p1.GetX(), p2.GetY()))),
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2002 label_(AddTypedPrimitive<Text>(new Text(that, *this)))
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2003 {
1984
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
2004 TextSceneLayer content;
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
2005 content.SetAnchor(BitmapAnchor_CenterLeft);
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
2006 content.SetBorder(10);
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
2007 content.SetText("?");
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
2008
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
2009 label_.SetContent(content);
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2010 label_.SetColor(COLOR_TEXT);
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2011 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2012
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2013 virtual unsigned int GetHandlesCount() const ORTHANC_OVERRIDE
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2014 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2015 return 2;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2016 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2017
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2018 virtual Handle& GetHandle(unsigned int index) const ORTHANC_OVERRIDE
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2019 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2020 switch (index)
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2021 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2022 case 0:
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2023 return handle1_;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2024
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2025 case 1:
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2026 return handle2_;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2027
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2028 default:
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2029 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2030 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2031 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2032
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2033 virtual void SignalMove(GeometricPrimitive& primitive,
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2034 const Scene2D& scene) ORTHANC_OVERRIDE
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2035 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2036 if (&primitive == &handle1_ ||
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2037 &primitive == &handle2_)
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2038 {
1986
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2039 double x1 = handle1_.GetCenter().GetX();
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2040 double y1 = handle1_.GetCenter().GetY();
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2041 double x2 = handle2_.GetCenter().GetX();
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2042 double y2 = handle2_.GetCenter().GetY();
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2043
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2044 segment1_.SetPosition(x1, y1, x2, y1);
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2045 segment2_.SetPosition(x2, y1, x2, y2);
1986
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2046 segment3_.SetPosition(x1, y2, x2, y2);
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2047 segment4_.SetPosition(x1, y1, x1, y2);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2048 }
1986
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2049 else if (&primitive == &segment1_ ||
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2050 &primitive == &segment2_ ||
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2051 &primitive == &segment3_ ||
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2052 &primitive == &segment4_)
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2053 {
1986
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2054 const Segment& segment = dynamic_cast<const Segment&>(primitive);
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2055 double x1 = segment.GetPosition1().GetX();
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2056 double y1 = segment.GetPosition1().GetY();
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2057 double x2 = segment.GetPosition2().GetX();
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2058 double y2 = segment.GetPosition2().GetY();
1985
bb307007f8e2 improved interaction with rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1984
diff changeset
2059
1986
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2060 if (&primitive == &segment1_)
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2061 {
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2062 y2 = y1 + handle2_.GetCenter().GetY() - handle1_.GetCenter().GetY();
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2063 }
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2064 else if (&primitive == &segment2_)
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2065 {
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2066 x1 = x2 + handle1_.GetCenter().GetX() - handle2_.GetCenter().GetX();
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2067 }
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2068 else if (&primitive == &segment3_)
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2069 {
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2070 y1 = y2 + handle1_.GetCenter().GetY() - handle2_.GetCenter().GetY();
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2071 }
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2072 else if (&primitive == &segment4_)
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2073 {
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2074 x2 = x1 + handle2_.GetCenter().GetX() - handle1_.GetCenter().GetX();
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2075 }
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2076 else
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2077 {
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2078 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2079 }
1985
bb307007f8e2 improved interaction with rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1984
diff changeset
2080
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2081 handle1_.SetCenter(x1, y1);
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2082 handle2_.SetCenter(x2, y2);
1985
bb307007f8e2 improved interaction with rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1984
diff changeset
2083
1986
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2084 if (&primitive != &segment1_)
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2085 {
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2086 segment1_.SetPosition(x1, y1, x2, y1);
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2087 }
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2088
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2089 if (&primitive != &segment2_)
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2090 {
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2091 segment2_.SetPosition(x2, y1, x2, y2);
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2092 }
1985
bb307007f8e2 improved interaction with rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1984
diff changeset
2093
1986
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2094 if (&primitive != &segment3_)
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2095 {
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2096 segment3_.SetPosition(x1, y2, x2, y2);
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2097 }
1985
bb307007f8e2 improved interaction with rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1984
diff changeset
2098
1986
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2099 if (&primitive != &segment4_)
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2100 {
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2101 segment4_.SetPosition(x1, y1, x1, y2);
e29783c92419 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1985
diff changeset
2102 }
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2103 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2104 else
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2105 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2106 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented);
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2107 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2108
1984
187a261d7ae2 computation of mean and stddev in rectangle probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1983
diff changeset
2109 TagProbeAsChanged();
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2110 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2111
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2112 virtual void Serialize(Json::Value& target) ORTHANC_OVERRIDE
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2113 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2114 target = Json::objectValue;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2115 target[KEY_TYPE] = VALUE_RECTANGLE_PROBE;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2116 target[KEY_X1] = handle1_.GetCenter().GetX();
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2117 target[KEY_Y1] = handle1_.GetCenter().GetY();
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2118 target[KEY_X2] = handle2_.GetCenter().GetX();
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2119 target[KEY_Y2] = handle2_.GetCenter().GetY();
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2120 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2121
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2122 static void Unserialize(AnnotationsSceneLayer& target,
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2123 Units units,
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2124 const Json::Value& source)
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2125 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2126 if (source.isMember(KEY_X1) &&
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2127 source.isMember(KEY_Y1) &&
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2128 source.isMember(KEY_X2) &&
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2129 source.isMember(KEY_Y2) &&
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2130 source[KEY_X1].isNumeric() &&
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2131 source[KEY_Y1].isNumeric() &&
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2132 source[KEY_X2].isNumeric() &&
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2133 source[KEY_Y2].isNumeric())
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2134 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2135 new RectangleProbeAnnotation(target, units,
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2136 ScenePoint2D(source[KEY_X1].asDouble(), source[KEY_Y1].asDouble()),
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2137 ScenePoint2D(source[KEY_X2].asDouble(), source[KEY_Y2].asDouble()));
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2138 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2139 else
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2140 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2141 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat, "Cannot unserialize a rectangle probe annotation");
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2142 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2143 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2144 };
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2145
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2146
1987
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2147 class AnnotationsSceneLayer::EllipseProbeAnnotation : public ProbingAnnotation
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2148 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2149 private:
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
2150 Units units_;
1987
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2151 Handle& handle1_;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2152 Handle& handle2_;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2153 Ellipse& ellipse_;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2154 Text& label_;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2155
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2156 protected:
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2157 virtual void UpdateProbeForLayer(const ISceneLayer& layer) ORTHANC_OVERRIDE
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2158 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2159 double x1 = handle1_.GetCenter().GetX();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2160 double y1 = handle1_.GetCenter().GetY();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2161 double x2 = handle2_.GetCenter().GetX();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2162 double y2 = handle2_.GetCenter().GetY();
1990
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
2163
1987
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2164 {
1990
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
2165 // Put the label to the right of the right-most handle
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
2166 //const double y = std::min(y1, y2);
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
2167 const double y = (y1 + y2) / 2.0;
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
2168 if (x1 < x2)
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
2169 {
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
2170 label_.SetPosition(x2, y);
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
2171 }
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
2172 else
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
2173 {
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
2174 label_.SetPosition(x1, y);
f03a827f8b47 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
2175 }
1987
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2176 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2177
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2178 std::string text;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2179
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2180 char buf[32];
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2181
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
2182 if (units_ == Units_Millimeters)
1987
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2183 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2184 sprintf(buf, "Area: %0.2f cm%c%c",
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2185 ellipse_.GetArea() / 100.0,
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2186 0xc2, 0xb2 /* two bytes corresponding to two power in UTF-8 */);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2187 text = buf;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2188 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2189
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2190 if (layer.GetType() == ISceneLayer::Type_FloatTexture)
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2191 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2192 const TextureBaseSceneLayer& texture = dynamic_cast<const TextureBaseSceneLayer&>(layer);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2193 const AffineTransform2D& textureToScene = texture.GetTransform();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2194 const AffineTransform2D sceneToTexture = AffineTransform2D::Invert(textureToScene);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2195
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2196 const Orthanc::ImageAccessor& image = texture.GetTexture();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2197 assert(image.GetFormat() == Orthanc::PixelFormat_Float32);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2198
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2199 sceneToTexture.Apply(x1, y1);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2200 sceneToTexture.Apply(x2, y2);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2201 int ix1 = static_cast<int>(std::floor(x1));
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2202 int iy1 = static_cast<int>(std::floor(y1));
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2203 int ix2 = static_cast<int>(std::floor(x2));
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2204 int iy2 = static_cast<int>(std::floor(y2));
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2205
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2206 if (ix1 > ix2)
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2207 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2208 std::swap(ix1, ix2);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2209 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2210
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2211 if (iy1 > iy2)
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2212 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2213 std::swap(iy1, iy2);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2214 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2215
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2216 LinearAlgebra::OnlineVarianceEstimator estimator;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2217
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2218 for (int y = std::max(0, iy1); y <= std::min(static_cast<int>(image.GetHeight()) - 1, iy2); y++)
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2219 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2220 int x = std::max(0, ix1);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2221 const float* p = reinterpret_cast<const float*>(image.GetConstRow(y)) + x;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2222
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2223 for (; x <= std::min(static_cast<int>(image.GetWidth()) - 1, ix2); x++, p++)
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2224 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2225 double yy = static_cast<double>(y) + 0.5;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2226 double xx = static_cast<double>(x) + 0.5;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2227 textureToScene.Apply(xx, yy);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2228 if (ellipse_.IsPointInside(ScenePoint2D(xx, yy)))
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2229 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2230 estimator.AddSample(*p);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2231 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2232 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2233 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2234
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2235 if (estimator.GetCount() > 0)
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2236 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2237 if (!text.empty())
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2238 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2239 text += "\n";
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2240 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2241 sprintf(buf, "Mean: %0.1f\nStdDev: %0.1f", estimator.GetMean(), estimator.GetStandardDeviation());
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2242 text += buf;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2243 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2244 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2245
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2246 label_.SetText(text);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2247 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2248
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2249 public:
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2250 EllipseProbeAnnotation(AnnotationsSceneLayer& that,
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2251 Units units,
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2252 const ScenePoint2D& p1,
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2253 const ScenePoint2D& p2) :
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
2254 ProbingAnnotation(that),
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
2255 units_(units),
1987
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2256 handle1_(AddTypedPrimitive<Handle>(new Handle(*this, Handle::Shape_Square, p1))),
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2257 handle2_(AddTypedPrimitive<Handle>(new Handle(*this, Handle::Shape_Square, p2))),
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2258 ellipse_(AddTypedPrimitive<Ellipse>(new Ellipse(*this, p1, p2))),
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2259 label_(AddTypedPrimitive<Text>(new Text(that, *this)))
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2260 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2261 TextSceneLayer content;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2262 content.SetAnchor(BitmapAnchor_CenterLeft);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2263 content.SetBorder(10);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2264 content.SetText("?");
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2265
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2266 label_.SetContent(content);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2267 label_.SetColor(COLOR_TEXT);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2268 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2269
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2270 virtual unsigned int GetHandlesCount() const ORTHANC_OVERRIDE
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2271 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2272 return 2;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2273 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2274
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2275 virtual Handle& GetHandle(unsigned int index) const ORTHANC_OVERRIDE
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2276 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2277 switch (index)
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2278 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2279 case 0:
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2280 return handle1_;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2281
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2282 case 1:
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2283 return handle2_;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2284
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2285 default:
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2286 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2287 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2288 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2289
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2290 virtual void SignalMove(GeometricPrimitive& primitive,
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2291 const Scene2D& scene) ORTHANC_OVERRIDE
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2292 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2293 if (&primitive == &handle1_ ||
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2294 &primitive == &handle2_)
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2295 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2296 ellipse_.SetPosition(handle1_.GetCenter(), handle2_.GetCenter());
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2297 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2298 else if (&primitive == &ellipse_)
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2299 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2300 handle1_.SetCenter(ellipse_.GetPosition1());
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2301 handle2_.SetCenter(ellipse_.GetPosition2());
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2302 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2303 else
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2304 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2305 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2306 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2307
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2308 TagProbeAsChanged();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2309 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2310
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2311 virtual void Serialize(Json::Value& target) ORTHANC_OVERRIDE
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2312 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2313 target = Json::objectValue;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2314 target[KEY_TYPE] = VALUE_ELLIPSE_PROBE;
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2315 target[KEY_X1] = handle1_.GetCenter().GetX();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2316 target[KEY_Y1] = handle1_.GetCenter().GetY();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2317 target[KEY_X2] = handle2_.GetCenter().GetX();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2318 target[KEY_Y2] = handle2_.GetCenter().GetY();
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2319 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2320
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2321 static void Unserialize(AnnotationsSceneLayer& target,
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2322 Units units,
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2323 const Json::Value& source)
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2324 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2325 if (source.isMember(KEY_X1) &&
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2326 source.isMember(KEY_Y1) &&
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2327 source.isMember(KEY_X2) &&
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2328 source.isMember(KEY_Y2) &&
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2329 source[KEY_X1].isNumeric() &&
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2330 source[KEY_Y1].isNumeric() &&
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2331 source[KEY_X2].isNumeric() &&
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2332 source[KEY_Y2].isNumeric())
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2333 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2334 new EllipseProbeAnnotation(target, units,
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2335 ScenePoint2D(source[KEY_X1].asDouble(), source[KEY_Y1].asDouble()),
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2336 ScenePoint2D(source[KEY_X2].asDouble(), source[KEY_Y2].asDouble()));
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2337 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2338 else
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2339 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2340 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat, "Cannot unserialize an ellipse probe annotation");
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2341 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2342 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2343 };
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2344
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2345
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2346 class AnnotationsSceneLayer::CreateTwoHandlesTracker : public IFlexiblePointerTracker
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2347 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2348 private:
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2349 AnnotationsSceneLayer& layer_;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2350 Annotation* annotation_;
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2351 AffineTransform2D canvasToScene_;
2001
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2352
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2353 protected:
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2354 AnnotationsSceneLayer& GetLayer() const
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2355 {
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2356 return layer_;
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2357 }
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2358
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2359 const Annotation& GetAnnotation() const
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2360 {
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2361 if (IsAlive())
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2362 {
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2363 assert(annotation_ != NULL);
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2364 return *annotation_;
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2365 }
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2366 else
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2367 {
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2368 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2369 }
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2370 }
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2371
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2372 public:
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2373 CreateTwoHandlesTracker(Annotation& annotation,
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2374 const AffineTransform2D& canvasToScene) :
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2375 layer_(annotation.GetParentLayer()),
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2376 annotation_(&annotation),
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2377 canvasToScene_(canvasToScene)
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2378 {
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2379 assert(annotation_ != NULL &&
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2380 annotation_->GetHandlesCount() >= 2);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2381 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2382
1972
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2383 virtual void PointerMove(const PointerEvent& event,
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2384 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2385 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2386 if (annotation_ != NULL)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2387 {
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2388 annotation_->GetHandle(1).SetCenter(event.GetMainPosition().Apply(canvasToScene_));
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2389 annotation_->SignalMove(annotation_->GetHandle(1), scene);
1809
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
2390
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2391 layer_.BroadcastMessage(AnnotationChangedMessage(layer_));
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2392 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2393 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2394
1972
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2395 virtual void PointerUp(const PointerEvent& event,
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2396 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2397 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2398 annotation_ = NULL; // IsAlive() becomes false
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2399
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2400 layer_.BroadcastMessage(AnnotationAddedMessage(layer_));
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2401 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2402
1972
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2403 virtual void PointerDown(const PointerEvent& event,
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2404 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2405 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2406 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2407
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2408 virtual bool IsAlive() const ORTHANC_OVERRIDE
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2409 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2410 return (annotation_ != NULL);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2411 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2412
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2413 virtual void Cancel(const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2414 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2415 if (annotation_ != NULL)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2416 {
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2417 layer_.DeleteAnnotation(annotation_);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2418 annotation_ = NULL;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2419 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2420 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2421 };
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2422
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2423
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2424 class AnnotationsSceneLayer::CreateAngleTracker : public IFlexiblePointerTracker
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2425 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2426 private:
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2427 AnnotationsSceneLayer& that_;
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2428 LengthAnnotation* length_;
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2429 AngleAnnotation* angle_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2430 AffineTransform2D canvasToScene_;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2431
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2432 public:
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2433 CreateAngleTracker(AnnotationsSceneLayer& that,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2434 const ScenePoint2D& sceneClick,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2435 const AffineTransform2D& canvasToScene) :
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2436 that_(that),
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2437 length_(NULL),
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2438 angle_(NULL),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2439 canvasToScene_(canvasToScene)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2440 {
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
2441 length_ = new LengthAnnotation(that, that.GetUnits(), false /* no length label */, sceneClick, sceneClick);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2442 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2443
1972
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2444 virtual void PointerMove(const PointerEvent& event,
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2445 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2446 {
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2447 if (length_ != NULL)
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2448 {
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2449 length_->GetHandle(1).SetCenter(event.GetMainPosition().Apply(canvasToScene_));
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2450 length_->SignalMove(length_->GetHandle(1), scene);
1809
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
2451 that_.BroadcastMessage(AnnotationChangedMessage(that_));
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2452 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2453
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2454 if (angle_ != NULL)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2455 {
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2456 angle_->GetHandle(2).SetCenter(event.GetMainPosition().Apply(canvasToScene_));
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2457 angle_->SignalMove(angle_->GetHandle(2), scene);
1809
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
2458 that_.BroadcastMessage(AnnotationChangedMessage(that_));
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2459 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2460 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2461
1972
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2462 virtual void PointerUp(const PointerEvent& event,
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2463 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2464 {
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2465 if (length_ != NULL)
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2466 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2467 // End of first step: The first segment is available, now create the angle
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2468
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
2469 angle_ = new AngleAnnotation(that_, length_->GetHandle(0).GetCenter(),
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2470 length_->GetHandle(1).GetCenter(),
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2471 length_->GetHandle(1).GetCenter());
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2472
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2473 that_.DeleteAnnotation(length_);
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2474 length_ = NULL;
1809
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
2475
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
2476 that_.BroadcastMessage(AnnotationChangedMessage(that_));
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2477 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2478 else
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2479 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2480 angle_ = NULL; // IsAlive() becomes false
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2481
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2482 that_.BroadcastMessage(AnnotationAddedMessage(that_));
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2483 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2484 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2485
1972
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2486 virtual void PointerDown(const PointerEvent& event,
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2487 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2488 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2489 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2490
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2491 virtual bool IsAlive() const ORTHANC_OVERRIDE
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2492 {
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2493 return (length_ != NULL ||
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2494 angle_ != NULL);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2495 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2496
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2497 virtual void Cancel(const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2498 {
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2499 if (length_ != NULL)
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2500 {
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2501 that_.DeleteAnnotation(length_);
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2502 length_ = NULL;
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2503 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2504
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2505 if (angle_ != NULL)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2506 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2507 that_.DeleteAnnotation(angle_);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2508 angle_ = NULL;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2509 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2510 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2511 };
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2512
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2513
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2514 class AnnotationsSceneLayer::CreatePixelProbeTracker : public IFlexiblePointerTracker
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2515 {
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2516 public:
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2517 CreatePixelProbeTracker(AnnotationsSceneLayer& that,
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2518 const ScenePoint2D& sceneClick,
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2519 const Scene2D& scene)
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2520 {
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
2521 PixelProbeAnnotation* annotation = new PixelProbeAnnotation(that, sceneClick);
1976
d71acf30970a fixed serialization of pixel probes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1975
diff changeset
2522 annotation->UpdateProbe(scene);
1978
95449b0e064a pixel probe is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1977
diff changeset
2523 that.BroadcastMessage(AnnotationAddedMessage(that));
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2524 }
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2525
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2526 virtual void PointerMove(const PointerEvent& event,
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2527 const Scene2D& scene) ORTHANC_OVERRIDE
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2528 {
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2529 }
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2530
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2531 virtual void PointerUp(const PointerEvent& event,
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2532 const Scene2D& scene) ORTHANC_OVERRIDE
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2533 {
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2534 }
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2535
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2536 virtual void PointerDown(const PointerEvent& event,
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2537 const Scene2D& scene) ORTHANC_OVERRIDE
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2538 {
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2539 }
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2540
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2541 virtual bool IsAlive() const ORTHANC_OVERRIDE
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2542 {
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2543 return false;
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2544 }
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2545
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2546 virtual void Cancel(const Scene2D& scene) ORTHANC_OVERRIDE
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2547 {
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2548 }
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2549 };
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2550
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2551
2001
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2552 class AnnotationsSceneLayer::CreateTextAnnotationTracker : public CreateTwoHandlesTracker
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2553 {
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2554 public:
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2555 CreateTextAnnotationTracker(AnnotationsSceneLayer& that,
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2556 const std::string& label,
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2557 const ScenePoint2D& position,
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2558 const AffineTransform2D& canvasToScene) :
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2559 CreateTwoHandlesTracker(*new TextAnnotation(that, label, position, position), canvasToScene)
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2560 {
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2561 }
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2562
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2563 virtual void PointerUp(const PointerEvent& event,
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2564 const Scene2D& scene) ORTHANC_OVERRIDE
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2565 {
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2566 std::unique_ptr<TextAnnotationRequiredMessage> request;
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2567
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2568 {
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2569 const TextAnnotation& annotation = dynamic_cast<const TextAnnotation&>(GetAnnotation());
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2570 request.reset(new TextAnnotationRequiredMessage(GetLayer(), annotation.GetPointedPosition(), annotation.GetLabelPosition()));
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2571 }
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2572
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2573 Cancel(scene); // Warning: "annotation_" is now invalid!
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2574
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2575 GetLayer().BroadcastMessage(AnnotationChangedMessage(GetLayer()));
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2576 GetLayer().BroadcastMessage(*request);
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2577 }
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2578 };
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2579
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2580
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2581 // Dummy tracker that is only used for deletion, in order to warn
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2582 // the caller that the mouse action was taken into consideration
1809
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
2583 class AnnotationsSceneLayer::RemoveTracker : public IFlexiblePointerTracker
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2584 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2585 public:
1809
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
2586 RemoveTracker()
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2587 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2588 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2589
1972
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2590 virtual void PointerMove(const PointerEvent& event,
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2591 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2592 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2593 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2594
1972
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2595 virtual void PointerUp(const PointerEvent& event,
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2596 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2597 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2598 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2599
1972
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2600 virtual void PointerDown(const PointerEvent& event,
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2601 const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2602 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2603 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2604
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2605 virtual bool IsAlive() const ORTHANC_OVERRIDE
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2606 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2607 return false;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2608 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2609
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2610 virtual void Cancel(const Scene2D& scene) ORTHANC_OVERRIDE
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2611 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2612 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2613 };
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2614
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2615
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2616 void AnnotationsSceneLayer::AddAnnotation(Annotation* annotation)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2617 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2618 assert(annotation != NULL);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2619 assert(annotations_.find(annotation) == annotations_.end());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2620 annotations_.insert(annotation);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2621 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2622
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2623
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2624 void AnnotationsSceneLayer::DeleteAnnotation(Annotation* annotation)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2625 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2626 if (annotation != NULL)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2627 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2628 assert(annotations_.find(annotation) != annotations_.end());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2629 annotations_.erase(annotation);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2630 delete annotation;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2631 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2632 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2633
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2634
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2635 void AnnotationsSceneLayer::DeletePrimitive(GeometricPrimitive* primitive)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2636 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2637 if (primitive != NULL)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2638 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2639 assert(primitives_.find(primitive) != primitives_.end());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2640 primitives_.erase(primitive);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2641 delete primitive;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2642 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2643 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2644
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2645
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2646 void AnnotationsSceneLayer::TagSubLayerToRemove(size_t subLayerIndex)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2647 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2648 assert(subLayersToRemove_.find(subLayerIndex) == subLayersToRemove_.end());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2649 subLayersToRemove_.insert(subLayerIndex);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2650 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2651
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2652
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2653 AnnotationsSceneLayer::AnnotationsSceneLayer(size_t macroLayerIndex) :
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2654 activeTool_(Tool_Edit),
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2655 macroLayerIndex_(macroLayerIndex),
1821
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2656 polylineSubLayer_(0), // dummy initialization
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2657 units_(Units_Pixels),
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2658 probedLayer_(0)
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2659 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2660 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2661
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2662
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2663 void AnnotationsSceneLayer::Clear()
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2664 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2665 for (Annotations::iterator it = annotations_.begin(); it != annotations_.end(); ++it)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2666 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2667 assert(*it != NULL);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2668 delete *it;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2669 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2670
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2671 annotations_.clear();
1812
db341679dc9f ViewerViewport::StoneAnnotationsRegistry
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1809
diff changeset
2672
db341679dc9f ViewerViewport::StoneAnnotationsRegistry
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1809
diff changeset
2673 ClearHover();
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2674 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2675
1821
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2676
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2677 void AnnotationsSceneLayer::SetUnits(Units units)
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2678 {
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2679 if (units_ != units)
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2680 {
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2681 Clear();
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2682 units_ = units;
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2683 }
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2684 }
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2685
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2686
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2687 void AnnotationsSceneLayer::AddLengthAnnotation(const ScenePoint2D& p1,
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2688 const ScenePoint2D& p2)
1806
0840a25c6d41 removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1804
diff changeset
2689 {
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2690 annotations_.insert(new LengthAnnotation(*this, units_, true /* show label */, p1, p2));
2001
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2691 BroadcastMessage(AnnotationChangedMessage(*this));
1806
0840a25c6d41 removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1804
diff changeset
2692 }
0840a25c6d41 removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1804
diff changeset
2693
0840a25c6d41 removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1804
diff changeset
2694
0840a25c6d41 removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1804
diff changeset
2695 void AnnotationsSceneLayer::AddCircleAnnotation(const ScenePoint2D& p1,
0840a25c6d41 removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1804
diff changeset
2696 const ScenePoint2D& p2)
0840a25c6d41 removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1804
diff changeset
2697 {
1821
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2698 annotations_.insert(new CircleAnnotation(*this, units_, p1, p2));
2001
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2699 BroadcastMessage(AnnotationChangedMessage(*this));
1806
0840a25c6d41 removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1804
diff changeset
2700 }
0840a25c6d41 removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1804
diff changeset
2701
0840a25c6d41 removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1804
diff changeset
2702
0840a25c6d41 removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1804
diff changeset
2703 void AnnotationsSceneLayer::AddAngleAnnotation(const ScenePoint2D& p1,
0840a25c6d41 removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1804
diff changeset
2704 const ScenePoint2D& p2,
0840a25c6d41 removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1804
diff changeset
2705 const ScenePoint2D& p3)
0840a25c6d41 removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1804
diff changeset
2706 {
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
2707 annotations_.insert(new AngleAnnotation(*this, p1, p2, p3));
2001
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2708 BroadcastMessage(AnnotationChangedMessage(*this));
1806
0840a25c6d41 removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1804
diff changeset
2709 }
0840a25c6d41 removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1804
diff changeset
2710
0840a25c6d41 removed hard-coded test in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1804
diff changeset
2711
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2712 void AnnotationsSceneLayer::Render(Scene2D& scene)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2713 {
1977
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
2714 // First, update the probes
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
2715 for (Annotations::const_iterator it = annotations_.begin(); it != annotations_.end(); ++it)
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
2716 {
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
2717 assert(*it != NULL);
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
2718 (*it)->UpdateProbe(scene);
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
2719 }
ba971d9082d3 cont pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1976
diff changeset
2720
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2721 MacroSceneLayer* macro = NULL;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2722
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2723 if (scene.HasLayer(macroLayerIndex_))
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2724 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2725 macro = &dynamic_cast<MacroSceneLayer&>(scene.GetLayer(macroLayerIndex_));
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2726 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2727 else
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2728 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2729 macro = &dynamic_cast<MacroSceneLayer&>(scene.SetLayer(macroLayerIndex_, new MacroSceneLayer));
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2730 polylineSubLayer_ = macro->AddLayer(new PolylineSceneLayer);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2731 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2732
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2733 for (SubLayers::const_iterator it = subLayersToRemove_.begin(); it != subLayersToRemove_.end(); ++it)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2734 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2735 assert(macro->HasLayer(*it));
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2736 macro->DeleteLayer(*it);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2737 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2738
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2739 subLayersToRemove_.clear();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2740
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2741 std::unique_ptr<PolylineSceneLayer> polyline(new PolylineSceneLayer);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2742
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2743 for (GeometricPrimitives::iterator it = primitives_.begin(); it != primitives_.end(); ++it)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2744 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2745 assert(*it != NULL);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2746 GeometricPrimitive& primitive = **it;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2747
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2748 primitive.RenderPolylineLayer(*polyline, scene);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2749
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2750 if (primitive.IsModified())
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2751 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2752 primitive.RenderOtherLayers(*macro, scene);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2753 primitive.SetModified(false);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2754 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2755 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2756
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2757 macro->UpdateLayer(polylineSubLayer_, polyline.release());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2758 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2759
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2760
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2761 bool AnnotationsSceneLayer::ClearHover()
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2762 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2763 bool needsRefresh = false;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2764
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2765 for (GeometricPrimitives::iterator it = primitives_.begin(); it != primitives_.end(); ++it)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2766 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2767 assert(*it != NULL);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2768 if ((*it)->IsHover())
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2769 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2770 (*it)->SetHover(false);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2771 needsRefresh = true;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2772 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2773 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2774
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2775 return needsRefresh;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2776 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2777
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2778
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2779 bool AnnotationsSceneLayer::SetMouseHover(const ScenePoint2D& p,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2780 const Scene2D& scene)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2781 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2782 if (activeTool_ == Tool_None)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2783 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2784 return ClearHover();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2785 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2786 else
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2787 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2788 bool needsRefresh = false;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2789
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2790 const ScenePoint2D s = p.Apply(scene.GetCanvasToSceneTransform());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2791
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2792 for (GeometricPrimitives::iterator it = primitives_.begin(); it != primitives_.end(); ++it)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2793 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2794 assert(*it != NULL);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2795 bool hover = (*it)->IsHit(s, scene);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2796
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2797 if ((*it)->IsHover() != hover)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2798 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2799 needsRefresh = true;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2800 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2801
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2802 (*it)->SetHover(hover);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2803 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2805 return needsRefresh;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2806 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2807 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2808
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2809
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2810 IFlexiblePointerTracker* AnnotationsSceneLayer::CreateTracker(const ScenePoint2D& p,
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2811 const Scene2D& scene)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2812 {
1972
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2813 /**
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2814 * WARNING: The created trackers must NOT keep a reference to "scene"!
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2815 **/
9c0adcc8feec refactoring to simplify OneGesturePointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1871
diff changeset
2816
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2817 if (activeTool_ == Tool_None)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2818 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2819 return NULL;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2820 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2821 else
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2822 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2823 const ScenePoint2D s = p.Apply(scene.GetCanvasToSceneTransform());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2824
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2825 GeometricPrimitive* bestHit = NULL;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2826
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2827 for (GeometricPrimitives::iterator it = primitives_.begin(); it != primitives_.end(); ++it)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2828 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2829 assert(*it != NULL);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2830 if ((*it)->IsHit(s, scene))
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2831 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2832 if (bestHit == NULL ||
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2833 bestHit->GetDepth() > (*it)->GetDepth())
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2834 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2835 bestHit = *it;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2836 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2837 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2838 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2839
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2840 if (bestHit != NULL)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2841 {
1809
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
2842 if (activeTool_ == Tool_Remove)
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2843 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2844 DeleteAnnotation(&bestHit->GetParentAnnotation());
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2845 BroadcastMessage(AnnotationRemovedMessage(*this));
1809
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
2846 return new RemoveTracker;
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2847 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2848 else
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2849 {
1809
79a5838739a6 starting the integration of AnnotationsSceneLayer into Stone Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1806
diff changeset
2850 return new EditPrimitiveTracker(*this, *bestHit, s, scene.GetCanvasToSceneTransform());
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2851 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2852 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2853 else
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2854 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2855 switch (activeTool_)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2856 {
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2857 case Tool_Length:
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2858 {
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2859 Annotation* annotation = new LengthAnnotation(*this, units_, true /* show label */, s, s);
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2860 return new CreateTwoHandlesTracker(*annotation, scene.GetCanvasToSceneTransform());
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2861 }
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2862
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2863 case Tool_Circle:
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2864 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2865 Annotation* annotation = new CircleAnnotation(*this, units_, s, s);
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2866 return new CreateTwoHandlesTracker(*annotation, scene.GetCanvasToSceneTransform());
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2867 }
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2868
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2869 case Tool_Angle:
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
2870 return new CreateAngleTracker(*this, s, scene.GetCanvasToSceneTransform());
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2871
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2872 case Tool_PixelProbe:
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
2873 return new CreatePixelProbeTracker(*this, s, scene);
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2874
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2875 case Tool_RectangleProbe:
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2876 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2877 Annotation* annotation = new RectangleProbeAnnotation(*this, units_, s, s);
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2878 return new CreateTwoHandlesTracker(*annotation, scene.GetCanvasToSceneTransform());
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2879 }
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2880
1987
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2881 case Tool_EllipseProbe:
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2882 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2883 Annotation* annotation = new EllipseProbeAnnotation(*this, units_, s, s);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2884 return new CreateTwoHandlesTracker(*annotation, scene.GetCanvasToSceneTransform());
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2885 }
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2886
1999
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
2887 case Tool_TextAnnotation:
2001
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
2888 return new CreateTextAnnotationTracker(*this, "" /* empty label */, s, scene.GetCanvasToSceneTransform());
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2889
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2890 default:
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2891 return NULL;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2892 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2893 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2894 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2895 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2896
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2897
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2898 void AnnotationsSceneLayer::Serialize(Json::Value& target) const
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2899 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2900 Json::Value annotations = Json::arrayValue;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2901
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2902 for (Annotations::const_iterator it = annotations_.begin(); it != annotations_.end(); ++it)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2903 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2904 assert(*it != NULL);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2905
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2906 Json::Value item;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2907 (*it)->Serialize(item);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2908 annotations.append(item);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2909 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2910
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2911 target = Json::objectValue;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2912 target[KEY_ANNOTATIONS] = annotations;
1821
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2913
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2914 switch (units_)
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2915 {
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2916 case Units_Millimeters:
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2917 target[KEY_UNITS] = VALUE_MILLIMETERS;
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2918 break;
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2919
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2920 case Units_Pixels:
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2921 target[KEY_UNITS] = VALUE_PIXELS;
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2922 break;
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2923
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2924 default:
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2925 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2926 }
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2927 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2928
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2929
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2930 void AnnotationsSceneLayer::Unserialize(const Json::Value& serialized)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2931 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2932 Clear();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2933
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2934 if (serialized.type() != Json::objectValue ||
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2935 !serialized.isMember(KEY_ANNOTATIONS) ||
1821
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2936 !serialized.isMember(KEY_UNITS) ||
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2937 serialized[KEY_ANNOTATIONS].type() != Json::arrayValue ||
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2938 serialized[KEY_UNITS].type() != Json::stringValue)
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2939 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2940 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat, "Cannot unserialize a set of annotations");
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2941 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2942
1821
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2943 const std::string& u = serialized[KEY_UNITS].asString();
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2944
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2945 if (u == VALUE_MILLIMETERS)
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2946 {
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2947 units_ = Units_Millimeters;
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2948 }
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2949 else if (u == VALUE_PIXELS)
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2950 {
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2951 units_ = Units_Pixels;
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2952 }
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2953 else
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2954 {
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2955 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat, "Unknown units: " + u);
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2956 }
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2957
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2958 const Json::Value& annotations = serialized[KEY_ANNOTATIONS];
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2959
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2960 for (Json::Value::ArrayIndex i = 0; i < annotations.size(); i++)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2961 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2962 if (annotations[i].type() != Json::objectValue ||
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2963 !annotations[i].isMember(KEY_TYPE) ||
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2964 annotations[i][KEY_TYPE].type() != Json::stringValue)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2965 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2966 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2967 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2968
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2969 const std::string& type = annotations[i][KEY_TYPE].asString();
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2970
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2971 if (type == VALUE_ANGLE)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2972 {
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
2973 AngleAnnotation::Unserialize(*this, annotations[i]);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2974 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2975 else if (type == VALUE_CIRCLE)
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2976 {
1821
36430d73e36c introducing measure units in AnnotationsSceneLayer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1819
diff changeset
2977 CircleAnnotation::Unserialize(*this, units_, annotations[i]);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2978 }
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2979 else if (type == VALUE_LENGTH)
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2980 {
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2981 LengthAnnotation::Unserialize(*this, units_, annotations[i]);
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2982 }
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2983 else if (type == VALUE_PIXEL_PROBE)
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2984 {
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
2985 PixelProbeAnnotation::Unserialize(*this, annotations[i]);
1983
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2986 }
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2987 else if (type == VALUE_RECTANGLE_PROBE)
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2988 {
20fa913272b7 drawing rectangle probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1981
diff changeset
2989 RectangleProbeAnnotation::Unserialize(*this, units_, annotations[i]);
1975
5a434f5889f8 starting pixel probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1972
diff changeset
2990 }
1987
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2991 else if (type == VALUE_ELLIPSE_PROBE)
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2992 {
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2993 EllipseProbeAnnotation::Unserialize(*this, units_, annotations[i]);
a595776232bb added ellipse probe
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1986
diff changeset
2994 }
1999
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
2995 else if (type == VALUE_TEXT_ANNOTATION)
1998
1fa3f484008e added arrows to AnnotationsSceneLayer::Segment
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1990
diff changeset
2996 {
2000
3e9ced39cd1b simplification
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1999
diff changeset
2997 TextAnnotation::Unserialize(*this, annotations[i]);
1999
709b90ae0f89 starting text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1998
diff changeset
2998 }
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2999 else
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3000 {
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3001 LOG(ERROR) << "Cannot unserialize unknown type of annotation: " << type;
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3002 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3003 }
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3004 }
2001
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
3005
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
3006
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
3007 void AnnotationsSceneLayer::AddTextAnnotation(const std::string& label,
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
3008 const ScenePoint2D& pointedPosition,
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
3009 const ScenePoint2D& labelPosition)
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
3010 {
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
3011 annotations_.insert(new TextAnnotation(*this, label, pointedPosition, labelPosition));
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
3012 BroadcastMessage(AnnotationChangedMessage(*this));
e943a84da9ac creation of text annotations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
3013 }
1804
5a872e69c74f reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3014 }