MCPcopy Create free account
hub / github.com/OpenOrienteering/mapper / updateCircle

Method updateCircle

src/tools/draw_circle_tool.cpp:244–290  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

242}
243
244void DrawCircleTool::updateCircle()
245{
246 MapCoordF first_pos_map;
247 if (start_from_center)
248 first_pos_map = circle_start_pos_map + (circle_start_pos_map - opposite_pos_map);
249 else
250 first_pos_map = circle_start_pos_map;
251
252 float radius = 0.5f * first_pos_map.distanceTo(opposite_pos_map);
253 float kappa = BEZIER_KAPPA;
254 float m_kappa = 1 - BEZIER_KAPPA;
255
256 MapCoordF across = opposite_pos_map - first_pos_map;
257 across.setLength(radius);
258 MapCoordF right = across.perpRight();
259
260 float right_radius = radius;
261 if (second_point_set && dragging)
262 {
263 if (right.length() < 1e-8)
264 right_radius = 0;
265 else
266 {
267 MapCoordF to_cursor = cur_pos_map - first_pos_map;
268 right_radius = MapCoordF::dotProduct(to_cursor, right) / right.length();
269 }
270 }
271 right.setLength(right_radius);
272
273 preview_path->clearCoordinates();
274 preview_path->addCoordinate(MapCoord(first_pos_map, MapCoord::CurveStart));
275 preview_path->addCoordinate(MapCoord(first_pos_map + kappa * right));
276 preview_path->addCoordinate(MapCoord(first_pos_map + right + m_kappa * across));
277 preview_path->addCoordinate(MapCoord(first_pos_map + right + across, MapCoord::CurveStart));
278 preview_path->addCoordinate(MapCoord(first_pos_map + right + (1 + kappa) * across));
279 preview_path->addCoordinate(MapCoord(first_pos_map + kappa * right + 2 * across));
280 preview_path->addCoordinate(MapCoord(first_pos_map + 2 * across, MapCoord::CurveStart));
281 preview_path->addCoordinate(MapCoord(first_pos_map - kappa * right + 2 * across));
282 preview_path->addCoordinate(MapCoord(first_pos_map - right + (1 + kappa) * across));
283 preview_path->addCoordinate(MapCoord(first_pos_map - right + across, MapCoord::CurveStart));
284 preview_path->addCoordinate(MapCoord(first_pos_map - right + m_kappa * across));
285 preview_path->addCoordinate(MapCoord(first_pos_map - kappa * right));
286 preview_path->parts().front().setClosed(true, false);
287
288 updatePreviewPath();
289 setDirtyRect();
290}
291
292void DrawCircleTool::setDirtyRect()
293{

Callers

nothing calls this directly

Calls 8

distanceToMethod · 0.80
setLengthMethod · 0.80
perpRightMethod · 0.80
clearCoordinatesMethod · 0.80
MapCoordClass · 0.50
lengthMethod · 0.45
addCoordinateMethod · 0.45
setClosedMethod · 0.45

Tested by

no test coverage detected