QPointF CanvasMode_EditSpiral::getSegment(double angle) { PageItem *currItem = m_doc->m_Selection->itemAt(0); PageItem_Spiral *item = currItem->asSpiral(); double ww = item->width(); double wws = 0.0; double wwn = ww; double hh = item->height() - (item->height() / (item->spiralFactor + 1.0)); double segStart = 0.0; double segEnd = 180; bool segPart = true; QPointF ret = QPointF(item->width() / 2.0, item->height() / 2.0); if (angle < 0) return ret; while (true) { QLineF lin = QLineF(QPointF(wws, hh), QPointF(wwn, hh)); if ((angle <= segEnd) && (angle >= segStart)) { ret = lin.pointAt(0.5); break; } ww /= item->spiralFactor; wws = wwn; if (segPart) wwn -= ww; else wwn += ww; segPart = !segPart; segStart += 180.0; segEnd += 180.0; } return ret; }