MCPcopy Create free account
hub / github.com/KDE/labplot / translateRange

Method translateRange

src/backend/worksheet/plots/cartesian/CartesianPlot.cpp:3951–4083  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3949}
3950
3951bool CartesianPlotPrivate::translateRange(int xIndex, int yIndex, const QPointF& logicalStart, const QPointF& logicalEnd, bool translateX, bool translateY) {
3952 // handle the change in x
3953 bool translationX = false, translationY = false;
3954 if (translateX && logicalStart.x() - logicalEnd.x() != 0) { // TODO: find better method
3955 translationX = true;
3956 double start{logicalStart.x()}, end{logicalEnd.x()};
3957 switch (range(Dimension::X, xIndex).scale()) {
3958 case RangeT::Scale::Linear: {
3959 const double delta = (start - end);
3960 range(Dimension::X, xIndex).translate(delta);
3961 break;
3962 }
3963 case RangeT::Scale::Log10: {
3964 if (end == 0 || start / end <= 0)
3965 break;
3966 const double delta = log10(start / end);
3967 range(Dimension::X, xIndex) *= pow(10, delta);
3968 break;
3969 }
3970 case RangeT::Scale::Log2: {
3971 if (end == 0 || start / end <= 0)
3972 break;
3973 const double delta = log2(start / end);
3974 range(Dimension::X, xIndex) *= exp2(delta);
3975 break;
3976 }
3977 case RangeT::Scale::Ln: {
3978 if (end == 0 || start / end <= 0)
3979 break;
3980 const double delta = log(start / end);
3981 range(Dimension::X, xIndex) *= exp(delta);
3982 break;
3983 }
3984 case RangeT::Scale::Sqrt: {
3985 if (start < 0 || end < 0)
3986 break;
3987 const double delta = sqrt(start) - sqrt(end);
3988 range(Dimension::X, xIndex).translate(delta * delta);
3989 break;
3990 }
3991 case RangeT::Scale::Square: {
3992 if (end <= start)
3993 break;
3994 const double delta = end * end - start * start;
3995 range(Dimension::X, xIndex).translate(sqrt(delta));
3996 break;
3997 }
3998 case RangeT::Scale::Inverse: {
3999 if (start == 0. || end == 0. || end <= start)
4000 break;
4001 const double delta = 1. / start - 1. / end;
4002 range(Dimension::X, xIndex).translate(1. / delta);
4003 break;
4004 }
4005 }
4006 }
4007
4008 if (translateY && logicalStart.y() - logicalEnd.y() != 0) {

Callers

nothing calls this directly

Calls 7

xMethod · 0.80
setUndoAwareMethod · 0.80
scaleMethod · 0.45
translateMethod · 0.45
yMethod · 0.45
enableAutoScaleMethod · 0.45
setRangeDirtyMethod · 0.45

Tested by

no test coverage detected