Engauge Digitizer  2
GridLineLimiter.cpp
1 /******************************************************************************************************
2  * (C) 2016 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
3  * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
4  * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
5  ******************************************************************************************************/
6 
7 #include "DocumentModelCoords.h"
8 #include "DocumentModelGridDisplay.h"
9 #include "DocumentModelGridRemoval.h"
10 #include "GridLineLimiter.h"
11 #include "MainWindowModel.h"
12 #include <qmath.h>
13 
14 const int DEFAULT_MAXIMUM_GRID_LINES = 25;
15 
17 {
18 }
19 
21  const MainWindowModel &modelMainWindow,
22  const DocumentModelGridDisplay &modelGrid) const
23 {
24  double step = modelGrid.stepX();
25 
26  if (modelCoords.coordScaleXTheta() == COORD_SCALE_LINEAR) {
27 
28  // Linear
29  double count = 1.0 + (modelGrid.stopX() - modelGrid.startX()) / modelGrid.stepX();
30  if ((int) count > modelMainWindow.maximumGridLines()) {
31 
32  // Adjust step so maximum grid lines limit is met
33  step = (modelGrid.stopX() - modelGrid.startX()) / (modelMainWindow.maximumGridLines() - 1);
34 
35  }
36 
37  } else {
38 
39  // Log
40  double count = 1.0 + (qLn (modelGrid.stopX()) - qLn (modelGrid.startX())) / qLn (modelMainWindow.maximumGridLines());
41  if ((int) count > modelMainWindow.maximumGridLines()) {
42 
43  // Adjust step so maximum grid lines limit is met
44  step = qExp ((qLn (modelGrid.stopX()) - qLn (modelGrid.startX())) / (modelMainWindow.maximumGridLines() - 1));
45 
46  }
47  }
48 
49  return step;
50 }
51 
53  const MainWindowModel &modelMainWindow,
54  const DocumentModelGridDisplay &modelGrid) const
55 {
56  double step = modelGrid.stepY();
57 
58  if (modelCoords.coordScaleYRadius() == COORD_SCALE_LINEAR) {
59 
60  // Linear
61  double count = 1.0 + (modelGrid.stopY() - modelGrid.startY()) / modelGrid.stepY();
62  if ((int) count > modelMainWindow.maximumGridLines()) {
63 
64  // Adjust step so maximum grid lines limit is met
65  step = (modelGrid.stopY() - modelGrid.startY()) / (modelMainWindow.maximumGridLines() - 1);
66 
67  }
68 
69  } else {
70 
71  // Log
72  double count = 1.0 + (qLn (modelGrid.stopY()) - qLn (modelGrid.startY())) / qLn (modelMainWindow.maximumGridLines());
73  if ((int) count > modelMainWindow.maximumGridLines()) {
74 
75  // Adjust step so maximum grid lines limit is met
76  step = qExp ((qLn (modelGrid.stopY()) - qLn (modelGrid.startY())) / (modelMainWindow.maximumGridLines() - 1));
77 
78  }
79  }
80 
81  return step;
82 }
double stopX() const
Get method for x grid line upper bound (inclusive).
double stepX() const
Get method for x grid line increment.
Model for DlgSettingsGridDisplay and CmdSettingsGridDisplay.
CoordScale coordScaleYRadius() const
Get method for linear/log scale on y/radius.
double startX() const
Get method for x grid line lower bound (inclusive).
int maximumGridLines() const
Maximum number of grid lines.
GridLineLimiter()
Single constructor.
CoordScale coordScaleXTheta() const
Get method for linear/log scale on x/theta.
Model for DlgSettingsMainWindow.
double limitedStepYRange(const DocumentModelCoords &modelCoords, const MainWindowModel &modelMainWindow, const DocumentModelGridDisplay &modelGrid) const
Limit step value for y/range coordinate. This is a noop if the maximum grid line limit in MainWindowM...
Model for DlgSettingsCoords and CmdSettingsCoords.
double stopY() const
Get method for y grid line upper bound (inclusive).
double startY() const
Get method for y grid line lower bound (inclusive).
double stepY() const
Get method for y grid line increment.
double limitedStepXTheta(const DocumentModelCoords &modelCoords, const MainWindowModel &modelMainWindow, const DocumentModelGridDisplay &modelGrid) const
Limit step value for x/theta coordinate. This is a noop if the maximum grid line limit in MainWindowM...