! \internal This function is part of the curve optimization algorithm of \ref getCurveLines. In situations where a single segment skips over multiple regions it might become necessary to add extra points at the corners of region 5 (see \ref getRegion) such that the optimized segment doesn't unintentionally cut through the visible area of the axis rect and create plot artifacts. Thi
| 22635 | traversing 5. |
| 22636 | */ |
| 22637 | QVector<QPointF> QCPCurve::getOptimizedCornerPoints(int prevRegion, int currentRegion, double prevKey, double prevValue, double key, double value, double keyMin, double valueMax, double keyMax, double valueMin) const |
| 22638 | { |
| 22639 | QVector<QPointF> result; |
| 22640 | switch (prevRegion) |
| 22641 | { |
| 22642 | case 1: |
| 22643 | { |
| 22644 | switch (currentRegion) |
| 22645 | { |
| 22646 | case 2: { result << coordsToPixels(keyMin, valueMax); break; } |
| 22647 | case 4: { result << coordsToPixels(keyMin, valueMax); break; } |
| 22648 | case 3: { result << coordsToPixels(keyMin, valueMax) << coordsToPixels(keyMin, valueMin); break; } |
| 22649 | case 7: { result << coordsToPixels(keyMin, valueMax) << coordsToPixels(keyMax, valueMax); break; } |
| 22650 | case 6: { result << coordsToPixels(keyMin, valueMax) << coordsToPixels(keyMin, valueMin); result.append(result.last()); break; } |
| 22651 | case 8: { result << coordsToPixels(keyMin, valueMax) << coordsToPixels(keyMax, valueMax); result.append(result.last()); break; } |
| 22652 | case 9: { // in this case we need another distinction of cases: segment may pass below or above rect, requiring either bottom right or top left corner points |
| 22653 | if ((value-prevValue)/(key-prevKey)*(keyMin-key)+value < valueMin) // segment passes below R |
| 22654 | { result << coordsToPixels(keyMin, valueMax) << coordsToPixels(keyMin, valueMin); result.append(result.last()); result << coordsToPixels(keyMax, valueMin); } |
| 22655 | else |
| 22656 | { result << coordsToPixels(keyMin, valueMax) << coordsToPixels(keyMax, valueMax); result.append(result.last()); result << coordsToPixels(keyMax, valueMin); } |
| 22657 | break; |
| 22658 | } |
| 22659 | } |
| 22660 | break; |
| 22661 | } |
| 22662 | case 2: |
| 22663 | { |
| 22664 | switch (currentRegion) |
| 22665 | { |
| 22666 | case 1: { result << coordsToPixels(keyMin, valueMax); break; } |
| 22667 | case 3: { result << coordsToPixels(keyMin, valueMin); break; } |
| 22668 | case 4: { result << coordsToPixels(keyMin, valueMax); result.append(result.last()); break; } |
| 22669 | case 6: { result << coordsToPixels(keyMin, valueMin); result.append(result.last()); break; } |
| 22670 | case 7: { result << coordsToPixels(keyMin, valueMax); result.append(result.last()); result << coordsToPixels(keyMax, valueMax); break; } |
| 22671 | case 9: { result << coordsToPixels(keyMin, valueMin); result.append(result.last()); result << coordsToPixels(keyMax, valueMin); break; } |
| 22672 | } |
| 22673 | break; |
| 22674 | } |
| 22675 | case 3: |
| 22676 | { |
| 22677 | switch (currentRegion) |
| 22678 | { |
| 22679 | case 2: { result << coordsToPixels(keyMin, valueMin); break; } |
| 22680 | case 6: { result << coordsToPixels(keyMin, valueMin); break; } |
| 22681 | case 1: { result << coordsToPixels(keyMin, valueMin) << coordsToPixels(keyMin, valueMax); break; } |
| 22682 | case 9: { result << coordsToPixels(keyMin, valueMin) << coordsToPixels(keyMax, valueMin); break; } |
| 22683 | case 4: { result << coordsToPixels(keyMin, valueMin) << coordsToPixels(keyMin, valueMax); result.append(result.last()); break; } |
| 22684 | case 8: { result << coordsToPixels(keyMin, valueMin) << coordsToPixels(keyMax, valueMin); result.append(result.last()); break; } |
| 22685 | case 7: { // in this case we need another distinction of cases: segment may pass below or above rect, requiring either bottom right or top left corner points |
| 22686 | if ((value-prevValue)/(key-prevKey)*(keyMax-key)+value < valueMin) // segment passes below R |
| 22687 | { result << coordsToPixels(keyMin, valueMin) << coordsToPixels(keyMax, valueMin); result.append(result.last()); result << coordsToPixels(keyMax, valueMax); } |
| 22688 | else |
| 22689 | { result << coordsToPixels(keyMin, valueMin) << coordsToPixels(keyMin, valueMax); result.append(result.last()); result << coordsToPixels(keyMax, valueMax); } |
| 22690 | break; |
| 22691 | } |
| 22692 | } |
| 22693 | break; |
| 22694 | } |