Mercurial > hg > orthanc-stone
comparison Framework/Scene2DViewport/LineMeasureTool.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 |
---|---|
106 SetLineHighlightArea(lineHighlightArea); | 106 SetLineHighlightArea(lineHighlightArea); |
107 } | 107 } |
108 | 108 |
109 LineMeasureTool::LineHighlightArea LineMeasureTool::LineHitTest(ScenePoint2D p) const | 109 LineMeasureTool::LineHighlightArea LineMeasureTool::LineHitTest(ScenePoint2D p) const |
110 { | 110 { |
111 std::auto_ptr<IViewport::ILock> lock(GetController()->GetViewport().Lock()); | |
112 | |
113 const double pixelToScene = | 111 const double pixelToScene = |
114 lock->GetScene().GetCanvasToSceneTransform().ComputeZoom(); | 112 GetController()->GetScene().GetCanvasToSceneTransform().ComputeZoom(); |
115 const double SQUARED_HIT_TEST_MAX_DISTANCE_SCENE_COORD = pixelToScene * HIT_TEST_MAX_DISTANCE_CANVAS_COORD * pixelToScene * HIT_TEST_MAX_DISTANCE_CANVAS_COORD; | 113 const double SQUARED_HIT_TEST_MAX_DISTANCE_SCENE_COORD = pixelToScene * HIT_TEST_MAX_DISTANCE_CANVAS_COORD * pixelToScene * HIT_TEST_MAX_DISTANCE_CANVAS_COORD; |
116 | 114 |
117 const double sqDistanceFromStart = ScenePoint2D::SquaredDistancePtPt(p, start_); | 115 const double sqDistanceFromStart = ScenePoint2D::SquaredDistancePtPt(p, start_); |
118 if (sqDistanceFromStart <= SQUARED_HIT_TEST_MAX_DISTANCE_SCENE_COORD) | 116 if (sqDistanceFromStart <= SQUARED_HIT_TEST_MAX_DISTANCE_SCENE_COORD) |
119 return LineHighlightArea_Start; | 117 return LineHighlightArea_Start; |
134 return LineHitTest(p) != LineHighlightArea_None; | 132 return LineHitTest(p) != LineHighlightArea_None; |
135 } | 133 } |
136 | 134 |
137 boost::shared_ptr<IFlexiblePointerTracker> LineMeasureTool::CreateEditionTracker(const PointerEvent& e) | 135 boost::shared_ptr<IFlexiblePointerTracker> LineMeasureTool::CreateEditionTracker(const PointerEvent& e) |
138 { | 136 { |
139 std::auto_ptr<IViewport::ILock> lock(GetController()->GetViewport().Lock()); | |
140 | |
141 ScenePoint2D scenePos = e.GetMainPosition().Apply( | 137 ScenePoint2D scenePos = e.GetMainPosition().Apply( |
142 lock->GetScene().GetCanvasToSceneTransform()); | 138 GetController()->GetScene().GetCanvasToSceneTransform()); |
143 | 139 |
144 if (!HitTest(scenePos)) | 140 if (!HitTest(scenePos)) |
145 return boost::shared_ptr<IFlexiblePointerTracker>(); | 141 return boost::shared_ptr<IFlexiblePointerTracker>(); |
146 | 142 |
147 /** | 143 /** |
178 { | 174 { |
179 if (IsSceneAlive()) | 175 if (IsSceneAlive()) |
180 { | 176 { |
181 if (IsEnabled()) | 177 if (IsEnabled()) |
182 { | 178 { |
183 std::auto_ptr<IViewport::ILock> lock(GetController()->GetViewport().Lock()); | |
184 | |
185 layerHolder_->CreateLayersIfNeeded(); | 179 layerHolder_->CreateLayersIfNeeded(); |
186 | 180 |
187 { | 181 { |
188 // Fill the polyline layer with the measurement line | 182 // Fill the polyline layer with the measurement line |
189 | 183 |
214 { | 208 { |
215 { | 209 { |
216 PolylineSceneLayer::Chain chain; | 210 PolylineSceneLayer::Chain chain; |
217 | 211 |
218 //TODO: take DPI into account | 212 //TODO: take DPI into account |
219 AddSquare(chain, lock->GetScene(), start_, | 213 AddSquare(chain, GetController()->GetScene(), start_, |
220 GetController()->GetHandleSideLengthS()); | 214 GetController()->GetHandleSideLengthS()); |
221 | 215 |
222 if (lineHighlightArea_ == LineHighlightArea_Start) | 216 if (lineHighlightArea_ == LineHighlightArea_Start) |
223 polylineLayer->AddChain(chain, true, highlightColor); | 217 polylineLayer->AddChain(chain, true, highlightColor); |
224 else | 218 else |
227 | 221 |
228 { | 222 { |
229 PolylineSceneLayer::Chain chain; | 223 PolylineSceneLayer::Chain chain; |
230 | 224 |
231 //TODO: take DPI into account | 225 //TODO: take DPI into account |
232 AddSquare(chain, lock->GetScene(), end_, | 226 AddSquare(chain, GetController()->GetScene(), end_, |
233 GetController()->GetHandleSideLengthS()); | 227 GetController()->GetHandleSideLengthS()); |
234 | 228 |
235 if (lineHighlightArea_ == LineHighlightArea_End) | 229 if (lineHighlightArea_ == LineHighlightArea_End) |
236 polylineLayer->AddChain(chain, true, highlightColor); | 230 polylineLayer->AddChain(chain, true, highlightColor); |
237 else | 231 else |
254 double midX = 0.5 * (end_.GetX() + start_.GetX()); | 248 double midX = 0.5 * (end_.GetX() + start_.GetX()); |
255 double midY = 0.5 * (end_.GetY() + start_.GetY()); | 249 double midY = 0.5 * (end_.GetY() + start_.GetY()); |
256 | 250 |
257 #if ORTHANC_STONE_ENABLE_OUTLINED_TEXT == 1 | 251 #if ORTHANC_STONE_ENABLE_OUTLINED_TEXT == 1 |
258 SetTextLayerOutlineProperties( | 252 SetTextLayerOutlineProperties( |
259 lock->GetScene(), layerHolder_, buf, ScenePoint2D(midX, midY), 0); | 253 GetController()->GetScene(), layerHolder_, buf, ScenePoint2D(midX, midY), 0); |
260 #else | 254 #else |
261 SetTextLayerProperties( | 255 SetTextLayerProperties( |
262 lock->GetScene(), layerHolder_, buf, ScenePoint2D(midX, midY), 0); | 256 GetController()->GetScene(), layerHolder_, buf, ScenePoint2D(midX, midY), 0); |
263 #endif | 257 #endif |
264 } | 258 } |
265 } | 259 } |
266 else | 260 else |
267 { | 261 { |