Mercurial > hg > orthanc-stone
annotate Samples/Common/MeasureTools.cpp @ 644:f939f449482c
Ongoing tracker work.
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Fri, 10 May 2019 16:15:55 +0200 |
parents | 6a144a45b2d8 |
children | 1e9ed656318e |
rev | line source |
---|---|
632
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
1 /** |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
2 * Stone of Orthanc |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
4 * Department, University Hospital of Liege, Belgium |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
5 * Copyright (C) 2017-2019 Osimis S.A., Belgium |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
6 * |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
7 * This program is free software: you can redistribute it and/or |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
8 * modify it under the terms of the GNU Affero General Public License |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
9 * as published by the Free Software Foundation, either version 3 of |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
10 * the License, or (at your option) any later version. |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
11 * |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
12 * This program is distributed in the hope that it will be useful, but |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
13 * WITHOUT ANY WARRANTY; without even the implied warranty of |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
15 * Affero General Public License for more details. |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
16 * |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
17 * You should have received a copy of the GNU Affero General Public License |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
19 **/ |
634
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
20 |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
21 #include <Core/Logging.h> |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
22 #include "MeasureTools.h" |
644 | 23 #include <boost/math/constants/constants.hpp> |
634
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
24 |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
25 namespace OrthancStone |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
26 { |
632
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
27 void MeasureTool::Enable() |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
28 { |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
29 enabled_ = true; |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
30 RefreshScene(); |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
31 } |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
32 |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
33 void MeasureTool::Disable() |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
34 { |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
35 enabled_ = false; |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
36 RefreshScene(); |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
37 } |
634
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
38 |
632
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
39 LineMeasureTool::~LineMeasureTool() |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
40 { |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
41 // this measuring tool is a RABI for the corresponding visual layers |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
42 // stored in the 2D scene |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
43 Disable(); |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
44 RemoveFromScene(); |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
45 } |
634
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
46 |
632
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
47 void LineMeasureTool::RemoveFromScene() |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
48 { |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
49 if (layersCreated) |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
50 { |
634
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
51 assert(GetScene().HasLayer(polylineZIndex_)); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
52 assert(GetScene().HasLayer(textZIndex_)); |
632
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
53 GetScene().DeleteLayer(polylineZIndex_); |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
54 GetScene().DeleteLayer(textZIndex_); |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
55 } |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
56 } |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
57 |
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
58 |
634
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
59 void LineMeasureTool::SetStart(ScenePoint2D start) |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
60 { |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
61 start_ = start; |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
62 RefreshScene(); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
63 } |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
64 |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
65 void LineMeasureTool::SetEnd(ScenePoint2D end) |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
66 { |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
67 end_ = end; |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
68 RefreshScene(); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
69 } |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
70 |
632
500c3f70b6c2
- Added a ClearAllChains method to PolylineSceneLayer --> revision must change
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff
changeset
|
71 void LineMeasureTool::Set(ScenePoint2D start, ScenePoint2D end) |
634
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
72 { |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
73 start_ = start; |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
74 end_ = end; |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
75 RefreshScene(); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
76 } |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
77 |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
78 PolylineSceneLayer* LineMeasureTool::GetPolylineLayer() |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
79 { |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
80 assert(GetScene().HasLayer(polylineZIndex_)); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
81 ISceneLayer* layer = &(GetScene().GetLayer(polylineZIndex_)); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
82 PolylineSceneLayer* concreteLayer = dynamic_cast<PolylineSceneLayer*>(layer); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
83 assert(concreteLayer != NULL); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
84 return concreteLayer; |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
85 } |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
86 |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
87 TextSceneLayer* LineMeasureTool::GetTextLayer() |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
88 { |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
89 assert(GetScene().HasLayer(textZIndex_)); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
90 ISceneLayer* layer = &(GetScene().GetLayer(textZIndex_)); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
91 TextSceneLayer* concreteLayer = dynamic_cast<TextSceneLayer*>(layer); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
92 assert(concreteLayer != NULL); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
93 return concreteLayer; |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
94 } |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
95 |
644 | 96 namespace |
97 { | |
98 /** | |
99 This function will create a square around the center point supplied in | |
100 scene coordinates, with a side length given in canvas coordinates. The | |
101 square sides are parallel to the canvas boundaries. | |
102 */ | |
103 void AddSquare(PolylineSceneLayer::Chain& chain, | |
104 const Scene2D& scene, | |
105 const ScenePoint2D& centerS, | |
106 const double& sideLength) | |
107 { | |
108 chain.clear(); | |
109 chain.reserve(4); | |
110 ScenePoint2D centerC = centerS.Apply(scene.GetSceneToCanvasTransform()); | |
111 //TODO: take DPI into account | |
112 double handleLX = centerC.GetX() - sideLength / 2; | |
113 double handleTY = centerC.GetY() - sideLength / 2; | |
114 double handleRX = centerC.GetX() + sideLength / 2; | |
115 double handleBY = centerC.GetY() + sideLength / 2; | |
116 ScenePoint2D LTC(handleLX, handleTY); | |
117 ScenePoint2D RTC(handleRX, handleTY); | |
118 ScenePoint2D RBC(handleRX, handleBY); | |
119 ScenePoint2D LBC(handleLX, handleBY); | |
120 | |
121 ScenePoint2D startLT = LTC.Apply(scene.GetCanvasToSceneTransform()); | |
122 ScenePoint2D startRT = RTC.Apply(scene.GetCanvasToSceneTransform()); | |
123 ScenePoint2D startRB = RBC.Apply(scene.GetCanvasToSceneTransform()); | |
124 ScenePoint2D startLB = LBC.Apply(scene.GetCanvasToSceneTransform()); | |
125 | |
126 chain.push_back(startLT); | |
127 chain.push_back(startRT); | |
128 chain.push_back(startRB); | |
129 chain.push_back(startLB); | |
130 } | |
131 | |
132 void AddCircle(PolylineSceneLayer::Chain& chain, | |
133 const Scene2D& scene, | |
134 const ScenePoint2D& centerS, | |
135 const double& radiusS) | |
136 { | |
137 chain.clear(); | |
138 chain.reserve(4); | |
139 //ScenePoint2D centerC = centerS.Apply(scene.GetSceneToCanvasTransform()); | |
140 //TODO: take DPI into account | |
141 | |
142 // TODO: automatically compute the number for segments for smooth | |
143 // display based on the radius in pixels. | |
144 int lineCount = 50; | |
145 | |
146 double angleIncr = (2.0 * boost::math::constants::pi<double>()) | |
147 / static_cast<double>(lineCount); | |
148 | |
149 double theta = 0; | |
150 for (int i = 0; i < lineCount; ++i) | |
151 { | |
152 double offsetX = radiusS * cos(theta); | |
153 double offsetY = radiusS * sin(theta); | |
154 double pointX = centerS.GetX() + offsetX; | |
155 double pointY = centerS.GetY() + offsetY; | |
156 chain.push_back(ScenePoint2D(pointX, pointY)); | |
157 theta += angleIncr; | |
158 } | |
159 } | |
160 | |
161 #if 0 | |
162 void AddEllipse(PolylineSceneLayer::Chain& chain, | |
163 const Scene2D& scene, | |
164 const ScenePoint2D& centerS, | |
165 const double& halfHAxis, | |
166 const double& halfVAxis) | |
167 { | |
168 chain.clear(); | |
169 chain.reserve(4); | |
170 ScenePoint2D centerC = centerS.Apply(scene.GetSceneToCanvasTransform()); | |
171 //TODO: take DPI into account | |
172 double handleLX = centerC.GetX() - sideLength / 2; | |
173 double handleTY = centerC.GetY() - sideLength / 2; | |
174 double handleRX = centerC.GetX() + sideLength / 2; | |
175 double handleBY = centerC.GetY() + sideLength / 2; | |
176 ScenePoint2D LTC(handleLX, handleTY); | |
177 ScenePoint2D RTC(handleRX, handleTY); | |
178 ScenePoint2D RBC(handleRX, handleBY); | |
179 ScenePoint2D LBC(handleLX, handleBY); | |
180 | |
181 ScenePoint2D startLT = LTC.Apply(scene.GetCanvasToSceneTransform()); | |
182 ScenePoint2D startRT = RTC.Apply(scene.GetCanvasToSceneTransform()); | |
183 ScenePoint2D startRB = RBC.Apply(scene.GetCanvasToSceneTransform()); | |
184 ScenePoint2D startLB = LBC.Apply(scene.GetCanvasToSceneTransform()); | |
185 | |
186 chain.push_back(startLT); | |
187 chain.push_back(startRT); | |
188 chain.push_back(startRB); | |
189 chain.push_back(startLB); | |
190 } | |
191 #endif | |
192 | |
193 | |
194 } | |
195 | |
196 | |
634
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
197 void LineMeasureTool::RefreshScene() |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
198 { |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
199 if (IsEnabled()) |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
200 { |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
201 if (!layersCreated) |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
202 { |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
203 // Create the layers if need be |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
204 |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
205 assert(textZIndex_ == -1); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
206 { |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
207 polylineZIndex_ = GetScene().GetMaxDepth() + 100; |
644 | 208 //LOG(INFO) << "set polylineZIndex_ to: " << polylineZIndex_; |
634
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
209 std::auto_ptr<PolylineSceneLayer> layer(new PolylineSceneLayer()); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
210 GetScene().SetLayer(polylineZIndex_, layer.release()); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
211 } |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
212 { |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
213 textZIndex_ = GetScene().GetMaxDepth() + 100; |
644 | 214 //LOG(INFO) << "set textZIndex_ to: " << textZIndex_; |
634
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
215 std::auto_ptr<TextSceneLayer> layer(new TextSceneLayer()); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
216 GetScene().SetLayer(textZIndex_, layer.release()); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
217 } |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
218 layersCreated = true; |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
219 } |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
220 else |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
221 { |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
222 assert(GetScene().HasLayer(polylineZIndex_)); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
223 assert(GetScene().HasLayer(textZIndex_)); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
224 } |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
225 { |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
226 // Fill the polyline layer with the measurement line |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
227 |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
228 PolylineSceneLayer* polylineLayer = GetPolylineLayer(); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
229 polylineLayer->ClearAllChains(); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
230 polylineLayer->SetColor(0, 223, 21); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
231 |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
232 { |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
233 PolylineSceneLayer::Chain chain; |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
234 chain.push_back(start_); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
235 chain.push_back(end_); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
236 polylineLayer->AddChain(chain, false); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
237 } |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
238 |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
239 // handles |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
240 { |
644 | 241 //void AddSquare(PolylineSceneLayer::Chain& chain,const Scene2D& scene,const ScenePoint2D& centerS,const double& sideLength) |
242 | |
243 { | |
244 PolylineSceneLayer::Chain chain; | |
245 AddSquare(chain, GetScene(), start_, 10.0); //TODO: take DPI into account | |
246 polylineLayer->AddChain(chain, true); | |
247 } | |
248 | |
249 { | |
250 PolylineSceneLayer::Chain chain; | |
251 AddSquare(chain, GetScene(), end_, 10.0); //TODO: take DPI into account | |
252 polylineLayer->AddChain(chain, true); | |
253 } | |
634
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
254 |
644 | 255 //ScenePoint2D startC = start_.Apply(GetScene().GetSceneToCanvasTransform()); |
256 //double squareSize = 10.0; | |
257 //double startHandleLX = startC.GetX() - squareSize/2; | |
258 //double startHandleTY = startC.GetY() - squareSize / 2; | |
259 //double startHandleRX = startC.GetX() + squareSize / 2; | |
260 //double startHandleBY = startC.GetY() + squareSize / 2; | |
261 //ScenePoint2D startLTC(startHandleLX, startHandleTY); | |
262 //ScenePoint2D startRTC(startHandleRX, startHandleTY); | |
263 //ScenePoint2D startRBC(startHandleRX, startHandleBY); | |
264 //ScenePoint2D startLBC(startHandleLX, startHandleBY); | |
634
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
265 |
644 | 266 //ScenePoint2D startLT = startLTC.Apply(GetScene().GetCanvasToSceneTransform()); |
267 //ScenePoint2D startRT = startRTC.Apply(GetScene().GetCanvasToSceneTransform()); | |
268 //ScenePoint2D startRB = startRBC.Apply(GetScene().GetCanvasToSceneTransform()); | |
269 //ScenePoint2D startLB = startLBC.Apply(GetScene().GetCanvasToSceneTransform()); | |
270 | |
271 //PolylineSceneLayer::Chain chain; | |
272 //chain.push_back(startLT); | |
273 //chain.push_back(startRT); | |
274 //chain.push_back(startRB); | |
275 //chain.push_back(startLB); | |
276 //polylineLayer->AddChain(chain, true); | |
634
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
277 } |
644 | 278 |
634
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
279 } |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
280 { |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
281 // Set the text layer proporeties |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
282 |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
283 TextSceneLayer* textLayer = GetTextLayer(); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
284 double deltaX = end_.GetX() - start_.GetX(); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
285 double deltaY = end_.GetY() - start_.GetY(); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
286 double squareDist = deltaX * deltaX + deltaY * deltaY; |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
287 double dist = sqrt(squareDist); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
288 char buf[64]; |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
289 sprintf(buf, "%0.02f units", dist); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
290 textLayer->SetText(buf); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
291 textLayer->SetColor(0, 223, 21); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
292 |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
293 // TODO: for now we simply position the text overlay at the middle |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
294 // of the measuring segment |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
295 double midX = 0.5*(end_.GetX() + start_.GetX()); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
296 double midY = 0.5*(end_.GetY() + start_.GetY()); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
297 textLayer->SetPosition(midX, midY); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
298 } |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
299 } |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
300 else |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
301 { |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
302 if (layersCreated) |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
303 { |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
304 RemoveFromScene(); |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
305 layersCreated = false; |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
306 } |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
307 } |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
308 } |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
309 } |
6a144a45b2d8
Converted C++11 code to C++03
Benjamin Golinvaux <bgo@osimis.io>
parents:
632
diff
changeset
|
310 |