/*! \internal Convenience function for transforming a x/y pixel pair on the QCustomPlot surface to plot coordinates, taking the orientations of the axes associated with this plottable into account (e.g. whether key represents x or y). \a x and \a y are transformed to the plot coodinates and are written to \a key and \a value. \see coordsToPixels, QCPAxis::coordToPixel */ void QCPAbstractPlottable::pixelsToCoords(double x, double y, 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; } if (keyAxis->orientation() == Qt::Horizontal) { key = keyAxis->pixelToCoord(x); value = valueAxis->pixelToCoord(y); } else { key = keyAxis->pixelToCoord(y); value = valueAxis->pixelToCoord(x); } }
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; }