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;