void TemplateImage::drawTemplate(QPainter* painter, QRectF& clip_rect, double scale, bool on_screen, float opacity) const { Q_UNUSED(clip_rect); Q_UNUSED(scale); Q_UNUSED(on_screen); applyTemplateTransform(painter); painter->setRenderHint(QPainter::SmoothPixmapTransform); painter->setOpacity(opacity); painter->drawImage(QPointF(-image.width() * 0.5, -image.height() * 0.5), image); painter->setRenderHint(QPainter::SmoothPixmapTransform, false); }
void TemplateTrack::drawTracks(QPainter* painter, bool on_screen) const { painter->save(); if (!is_georeferenced) applyTemplateTransform(painter); // Tracks QPen pen(qRgb(212, 0, 244)); if (on_screen) pen.setCosmetic(true); else pen.setWidthF(0.1); // = 0.1 mm at 100% painter->setPen(pen); painter->setBrush(Qt::NoBrush); // TODO: could speed that up by storing the template coords of the GPS points in a separate vector or caching the painter paths for (int i = 0; i < track.getNumSegments(); ++i) { QPainterPath path; int size = track.getSegmentPointCount(i); for (int k = 0; k < size; ++k) { const TrackPoint& point = track.getSegmentPoint(i, k); if (k > 0) { if (track.getSegmentPoint(i, k - 1).is_curve_start && k < track.getSegmentPointCount(i) - 2) { path.cubicTo(point.map_coord, track.getSegmentPoint(i, k + 1).map_coord, track.getSegmentPoint(i, k + 2).map_coord); k += 2; } else path.lineTo(point.map_coord.x(), point.map_coord.y()); } else path.moveTo(point.map_coord.x(), point.map_coord.y()); } painter->drawPath(path); } painter->restore(); }