void DrawPathTool::draw(QPainter* painter, MapWidget* widget) { drawPreviewObjects(painter, widget); if (editingInProgress()) { painter->setRenderHint(QPainter::Antialiasing); if (dragging && (cur_pos - click_pos).manhattanLength() >= Settings::getInstance().getStartDragDistancePx()) { QPen pen(qRgb(255, 255, 255)); pen.setWidth(3); painter->setPen(pen); painter->drawLine(widget->mapToViewport(click_pos_map), widget->mapToViewport(constrained_pos_map)); painter->setPen(active_color); painter->drawLine(widget->mapToViewport(click_pos_map), widget->mapToViewport(constrained_pos_map)); } if (previous_point_is_curve_point) { QPen pen(qRgb(255, 255, 255)); pen.setWidth(3); painter->setPen(pen); painter->drawLine(widget->mapToViewport(previous_pos_map), widget->mapToViewport(previous_drag_map)); painter->setPen(active_color); painter->drawLine(widget->mapToViewport(previous_pos_map), widget->mapToViewport(previous_drag_map)); } if (!shift_pressed) angle_helper->draw(painter, widget); } if (shift_pressed && !dragging) { snap_helper->draw(painter, widget); } else if (!editingInProgress() && (picking_angle || picked_angle)) { if (picking_angle) snap_helper->draw(painter, widget); angle_helper->draw(painter, widget); } }
void DrawCircleTool::draw(QPainter* painter, MapWidget* widget) { drawPreviewObjects(painter, widget); }
void DrawRectangleTool::draw(QPainter* painter, MapWidget* widget) { drawPreviewObjects(painter, widget); if (editingInProgress()) { // Snap line if (snapped_to_line) { // Simple hack to make line extend over the whole screen in most cases const float scale_factor = 100; MapCoord a = snapped_to_line_b + (snapped_to_line_a - snapped_to_line_b) * scale_factor; MapCoord b = snapped_to_line_b - (snapped_to_line_a - snapped_to_line_b) * scale_factor; painter->setPen(selection_color); painter->drawLine(widget->mapToViewport(a), widget->mapToViewport(b)); } // Helper cross bool use_preview_radius = Settings::getInstance().getSettingCached(Settings::RectangleTool_PreviewLineWidth).toBool(); const double preview_radius_min_pixels = 2.5; if (widget->getMapView()->lengthToPixel(preview_point_radius) < preview_radius_min_pixels) use_preview_radius = false; float helper_cross_radius = Settings::getInstance().getRectangleToolHelperCrossRadiusPx(); painter->setRenderHint(QPainter::Antialiasing); auto perp_vector = forward_vector.perpRight(); painter->setPen((angles.size() > 1) ? inactive_color : active_color); if (preview_point_radius == 0 || !use_preview_radius) { painter->drawLine(widget->mapToViewport(cur_pos_map) + helper_cross_radius * forward_vector, widget->mapToViewport(cur_pos_map) - helper_cross_radius * forward_vector); } else { painter->drawLine(widget->mapToViewport(cur_pos_map + 0.001f * preview_point_radius * perp_vector) + helper_cross_radius * forward_vector, widget->mapToViewport(cur_pos_map + 0.001f * preview_point_radius * perp_vector) - helper_cross_radius * forward_vector); painter->drawLine(widget->mapToViewport(cur_pos_map - 0.001f * preview_point_radius * perp_vector) + helper_cross_radius * forward_vector, widget->mapToViewport(cur_pos_map - 0.001f * preview_point_radius * perp_vector) - helper_cross_radius * forward_vector); } painter->setPen(active_color); if (preview_point_radius == 0 || !use_preview_radius) { painter->drawLine(widget->mapToViewport(cur_pos_map) + helper_cross_radius * perp_vector, widget->mapToViewport(cur_pos_map) - helper_cross_radius * perp_vector); } else { painter->drawLine(widget->mapToViewport(cur_pos_map + 0.001f * preview_point_radius * forward_vector) + helper_cross_radius * perp_vector, widget->mapToViewport(cur_pos_map + 0.001f * preview_point_radius * forward_vector) - helper_cross_radius * perp_vector); painter->drawLine(widget->mapToViewport(cur_pos_map - 0.001f * preview_point_radius * forward_vector) + helper_cross_radius * perp_vector, widget->mapToViewport(cur_pos_map - 0.001f * preview_point_radius * forward_vector) - helper_cross_radius * perp_vector); } } angle_helper->draw(painter, widget); if (shift_pressed) snap_helper->draw(painter, widget); }
void DrawFreehandTool::draw(QPainter* painter, MapWidget* widget) { drawPreviewObjects(painter, widget); }