MCPcopy Create free account
hub / github.com/CieNTi/serial_port_plotter / getOptimizedCornerPoints

Method getOptimizedCornerPoints

qcustomplot/qcustomplot.cpp:22637–22787  ·  view source on GitHub ↗

! \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

Source from the content-addressed store, hash-verified

22635 traversing 5.
22636*/
22637QVector<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 }

Callers

nothing calls this directly

Calls 1

appendMethod · 0.80

Tested by

no test coverage detected