Mercurial > hg > orthanc-stone
comparison Framework/Scene2DViewport/AngleMeasureTool.cpp @ 1213:86a8266b8888 broker
moving the scene from IViewport to ViewportController
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 04 Dec 2019 17:54:10 +0100 |
parents | f3bb9a6dd949 |
children | 0ca50d275b9a |
comparison
equal
deleted
inserted
replaced
1212:ab06dfdf3b75 | 1213:86a8266b8888 |
---|---|
129 SetAngleHighlightArea(angleHighlightArea); | 129 SetAngleHighlightArea(angleHighlightArea); |
130 } | 130 } |
131 | 131 |
132 AngleMeasureTool::AngleHighlightArea AngleMeasureTool::AngleHitTest(ScenePoint2D p) const | 132 AngleMeasureTool::AngleHighlightArea AngleMeasureTool::AngleHitTest(ScenePoint2D p) const |
133 { | 133 { |
134 std::auto_ptr<IViewport::ILock> lock(GetController()->GetViewport().Lock()); | 134 const double pixelToScene = GetController()->GetScene().GetCanvasToSceneTransform().ComputeZoom(); |
135 | 135 |
136 const double pixelToScene = | |
137 lock->GetScene().GetCanvasToSceneTransform().ComputeZoom(); | |
138 const double SQUARED_HIT_TEST_MAX_DISTANCE_SCENE_COORD = pixelToScene * HIT_TEST_MAX_DISTANCE_CANVAS_COORD * pixelToScene * HIT_TEST_MAX_DISTANCE_CANVAS_COORD; | 136 const double SQUARED_HIT_TEST_MAX_DISTANCE_SCENE_COORD = pixelToScene * HIT_TEST_MAX_DISTANCE_CANVAS_COORD * pixelToScene * HIT_TEST_MAX_DISTANCE_CANVAS_COORD; |
139 | 137 |
140 { | 138 { |
141 const double sqDistanceFromSide1End = ScenePoint2D::SquaredDistancePtPt(p, side1End_); | 139 const double sqDistanceFromSide1End = ScenePoint2D::SquaredDistancePtPt(p, side1End_); |
142 if (sqDistanceFromSide1End <= SQUARED_HIT_TEST_MAX_DISTANCE_SCENE_COORD) | 140 if (sqDistanceFromSide1End <= SQUARED_HIT_TEST_MAX_DISTANCE_SCENE_COORD) |
176 } | 174 } |
177 | 175 |
178 | 176 |
179 boost::shared_ptr<IFlexiblePointerTracker> AngleMeasureTool::CreateEditionTracker(const PointerEvent& e) | 177 boost::shared_ptr<IFlexiblePointerTracker> AngleMeasureTool::CreateEditionTracker(const PointerEvent& e) |
180 { | 178 { |
181 std::auto_ptr<IViewport::ILock> lock(GetController()->GetViewport().Lock()); | |
182 | |
183 ScenePoint2D scenePos = e.GetMainPosition().Apply( | 179 ScenePoint2D scenePos = e.GetMainPosition().Apply( |
184 lock->GetScene().GetCanvasToSceneTransform()); | 180 GetController()->GetScene().GetCanvasToSceneTransform()); |
185 | 181 |
186 if (!HitTest(scenePos)) | 182 if (!HitTest(scenePos)) |
187 return boost::shared_ptr<IFlexiblePointerTracker>(); | 183 return boost::shared_ptr<IFlexiblePointerTracker>(); |
188 | 184 |
189 /** | 185 /** |
210 if (IsSceneAlive()) | 206 if (IsSceneAlive()) |
211 { | 207 { |
212 boost::shared_ptr<ViewportController> controller = GetController(); | 208 boost::shared_ptr<ViewportController> controller = GetController(); |
213 if (IsEnabled()) | 209 if (IsEnabled()) |
214 { | 210 { |
215 std::auto_ptr<IViewport::ILock> lock(GetController()->GetViewport().Lock()); | |
216 | |
217 layerHolder_->CreateLayersIfNeeded(); | 211 layerHolder_->CreateLayersIfNeeded(); |
218 | 212 |
219 { | 213 { |
220 // Fill the polyline layer with the measurement lines | 214 // Fill the polyline layer with the measurement lines |
221 PolylineSceneLayer* polylineLayer = layerHolder_->GetPolylineLayer(0); | 215 PolylineSceneLayer* polylineLayer = layerHolder_->GetPolylineLayer(0); |
252 // Create the handles | 246 // Create the handles |
253 { | 247 { |
254 { | 248 { |
255 PolylineSceneLayer::Chain chain; | 249 PolylineSceneLayer::Chain chain; |
256 //TODO: take DPI into account | 250 //TODO: take DPI into account |
257 AddSquare(chain, lock->GetScene(), side1End_, | 251 AddSquare(chain, controller->GetScene(), side1End_, |
258 GetController()->GetHandleSideLengthS()); | 252 GetController()->GetHandleSideLengthS()); |
259 | 253 |
260 if (angleHighlightArea_ == AngleHighlightArea_Side1End) | 254 if (angleHighlightArea_ == AngleHighlightArea_Side1End) |
261 polylineLayer->AddChain(chain, true, highlightColor); | 255 polylineLayer->AddChain(chain, true, highlightColor); |
262 else | 256 else |
264 | 258 |
265 } | 259 } |
266 { | 260 { |
267 PolylineSceneLayer::Chain chain; | 261 PolylineSceneLayer::Chain chain; |
268 //TODO: take DPI into account | 262 //TODO: take DPI into account |
269 AddSquare(chain, lock->GetScene(), side2End_, | 263 AddSquare(chain, controller->GetScene(), side2End_, |
270 GetController()->GetHandleSideLengthS()); | 264 GetController()->GetHandleSideLengthS()); |
271 | 265 |
272 if (angleHighlightArea_ == AngleHighlightArea_Side2End) | 266 if (angleHighlightArea_ == AngleHighlightArea_Side2End) |
273 polylineLayer->AddChain(chain, true, highlightColor); | 267 polylineLayer->AddChain(chain, true, highlightColor); |
274 else | 268 else |
315 // http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=00B0&mode=hex | 309 // http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=00B0&mode=hex |
316 sprintf(buf, "%0.02f\xc2\xb0", angleDeg); | 310 sprintf(buf, "%0.02f\xc2\xb0", angleDeg); |
317 | 311 |
318 #if ORTHANC_STONE_ENABLE_OUTLINED_TEXT == 1 | 312 #if ORTHANC_STONE_ENABLE_OUTLINED_TEXT == 1 |
319 SetTextLayerOutlineProperties( | 313 SetTextLayerOutlineProperties( |
320 lock->GetScene(), layerHolder_, buf, ScenePoint2D(pointX, pointY), 0); | 314 controller->GetScene(), layerHolder_, buf, ScenePoint2D(pointX, pointY), 0); |
321 #else | 315 #else |
322 SetTextLayerProperties( | 316 SetTextLayerProperties( |
323 lock->GetScene(), layerHolder_, buf, ScenePoint2D(pointX, pointY) , 0); | 317 controller->GetScene(), layerHolder_, buf, ScenePoint2D(pointX, pointY) , 0); |
324 #endif | 318 #endif |
325 | 319 |
326 #if 0 | 320 #if 0 |
327 // TODO:make it togglable | 321 // TODO:make it togglable |
328 bool enableInfoDisplay = true; | 322 bool enableInfoDisplay = true; |