annotate OrthancStone/Sources/Scene2D/AnnotationsSceneLayer.cpp @ 1990:f03a827f8b47

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