| 242 | } |
| 243 | |
| 244 | void 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 | |
| 292 | void DrawCircleTool::setDirtyRect() |
| 293 | { |
nothing calls this directly
no test coverage detected