/*! \internal \overload Returns the input as pixel coordinates in a QPointF. */ const QPointF QCPAbstractPlottable::coordsToPixels(double key, double value) const { QCPAxis *keyAxis = mKeyAxis.data(); QCPAxis *valueAxis = mValueAxis.data(); if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return QPointF(); } if (keyAxis->orientation() == Qt::Horizontal) return QPointF(keyAxis->coordToPixel(key), valueAxis->coordToPixel(value)); else return QPointF(valueAxis->coordToPixel(value), keyAxis->coordToPixel(key)); }
/*! \internal Convenience function for transforming a key/value pair to pixels on the QCustomPlot surface, taking the orientations of the axes associated with this plottable into account (e.g. whether key represents x or y). \a key and \a value are transformed to the coodinates in pixels and are written to \a x and \a y. \see pixelsToCoords, QCPAxis::coordToPixel */ void QCPAbstractPlottable::coordsToPixels(double key, double value, double &x, double &y) const { QCPAxis *keyAxis = mKeyAxis.data(); QCPAxis *valueAxis = mValueAxis.data(); if (!keyAxis || !valueAxis) { qDebug() << Q_FUNC_INFO << "invalid key or value axis"; return; } if (keyAxis->orientation() == Qt::Horizontal) { x = keyAxis->coordToPixel(key); y = valueAxis->coordToPixel(value); } else { y = keyAxis->coordToPixel(key); x = valueAxis->coordToPixel(value); } }
void graphWidget::setBezPoints() { if(!selFunc || selFunc->degree != freeform) { if(bezPoints.size()) { for(int i = 0; i < bezPoints.size(); ++i) { delete bezPoints[i]; } bezPoints.clear(); } return; } if(selFunc && selFunc->degree == freeform) { QCPAxis* yAxis; switch(selFunc->parent->type) { case funcRoll: yAxis = yAxes[0]; break; case funcNormal: case funcLateral: yAxis = yAxes[1]; break; case funcPitch: yAxis = yAxes[2]; break; case funcYaw: yAxis = yAxes[3]; break; } float until; if(selFunc->parent->secParent->bArgument == TIME) { until = selTrack->trackData->getNumPoints(selFunc->parent->secParent)/F_HZ; } else { until = selFunc->parent->secParent->lNodes.first().fTotalHeartLength; } int x1 = ui->plotter->xAxis->coordToPixel(selFunc->minArgument+until); int x2 = ui->plotter->xAxis->coordToPixel(selFunc->maxArgument+until); int y1 = yAxis->coordToPixel(selFunc->startValue); int y2 = yAxis->coordToPixel(selFunc->startValue+selFunc->symArg); if(selFunc->pointList.size() != bezPoints.size()) { for(int i = 0; i < bezPoints.size(); ++i) { delete bezPoints[i]; } bezPoints.clear(); for(int i = 0; i < selFunc->pointList.size(); ++i) { bezPoints.append(new dragLabel(ui->plotter)); bezPoints[i]->setText("x"); bezPoints[i]->setGeometry(QRect(0, 0, 12, 12)); bezPoints[i]->setAlignment(Qt::AlignCenter); bezPoints[i]->show(); } } for(int i = 0; i < selFunc->pointList.size(); ++i) { if(bezPoints[i]->isDragged) { selFunc->pointList[i].x = (ui->plotter->xAxis->pixelToCoord(bezPoints[i]->pos().x()+6)-selFunc->minArgument-until)/(selFunc->maxArgument-selFunc->minArgument); selFunc->pointList[i].y = (yAxis->pixelToCoord(bezPoints[i]->pos().y()+6)-selFunc->startValue)/(selFunc->symArg); selFunc->updateBez(); selTrack->trackData->updateTrack(selTrack->trackData->activeSection, (int)(selFunc->minArgument*F_HZ-1.5f)); } else { int x = x1*(1-selFunc->pointList[i].x) + x2*selFunc->pointList[i].x-6; int y = y1*(1-selFunc->pointList[i].y) + y2*selFunc->pointList[i].y-6; bezPoints[i]->move(x, y); } } redrawGraphs(); } return; }