Engauge Digitizer  2
GridLog.cpp
Go to the documentation of this file.
1 /******************************************************************************************************
2  * (C) 2018 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 "gnuplot.h"
9 #include "GridLog.h"
10 #include <iostream>
11 #include <QFile>
12 #include <QPoint>
13 #include <QTextStream>
14 
15 // Whole image is too much information so only stuff near this center point is included
16 const int DETAILED_CENTER_X = 704;
17 const int DETAILED_CENTER_Y = 521;
18 const int DETAILED_RADIUS = 8;
19 
20 // Derived constants
25 
26 GridLog::GridLog(bool isGnuplot) :
27  m_isGnuplot (isGnuplot),
28  m_logStr (&m_log)
29 {
30  if (m_isGnuplot) {
31 
32  // Show border around region of interest
33  m_logStr << DETAILED_X_MIN << " " << - DETAILED_Y_MIN << "\n";
34  m_logStr << DETAILED_X_MAX << " " << - DETAILED_Y_MIN << "\n";
35  m_logStr << DETAILED_X_MAX << " " << - DETAILED_Y_MAX << "\n";
36  m_logStr << DETAILED_X_MIN << " " << - DETAILED_Y_MAX << "\n";
37  m_logStr << DETAILED_X_MIN << " " << - DETAILED_Y_MIN << "\n";
38  m_logStr << "\n";
39  }
40 }
41 
43 {
44  if (m_isGnuplot) {
45 
46  // Save the log stream that has been accumulated in memory
47  QString filename ("grid.gnuplot");
48  QFile file (filename);
49  QTextStream fileStr (&file);
50 
51  std::cout << GNUPLOT_FILE_MESSAGE.toLatin1().data() << filename.toLatin1().data() << "\n";
52 
53  file.open (QIODevice::WriteOnly | QIODevice::Append);
54  fileStr << m_log;
55  file.close ();
56  }
57 }
58 
59 bool GridLog::inBounds (int x, int y) const
60 {
61  return
62  DETAILED_X_MIN < x &&
63  DETAILED_Y_MIN < y &&
64  x < DETAILED_X_MAX &&
65  y < DETAILED_Y_MAX;
66 }
67 
68 void GridLog::showInputPixel (const QPoint &p,
69  double halfWidth)
70 {
71  int x = p.x();
72  int y = p.y();
73 
74  if (DETAILED_X_MIN <= x &&
75  DETAILED_Y_MIN <= y &&
76  x <= DETAILED_X_MAX &&
77  y <= DETAILED_Y_MAX) {
78 
79  m_logStr << x - halfWidth << " " << - (y - halfWidth) << "\n";
80  m_logStr << x + halfWidth << " " << - (y - halfWidth) << "\n";
81  m_logStr << x + halfWidth << " " << - (y + halfWidth) << "\n";
82  m_logStr << x - halfWidth << " " << - (y + halfWidth) << "\n";
83  m_logStr << x - halfWidth << " " << - (y - halfWidth) << "\n";
84  m_logStr << "\n";
85  }
86 }
87 
89  int y,
90  double radius)
91 {
92  if (m_isGnuplot && inBounds (x, y)) {
93 
94  // Draw a diamond
95  m_logStr << x << " " << - (y - radius) << "\n";
96  m_logStr << x + radius << " " << - (y ) << "\n";
97  m_logStr << x << " " << - (y + radius) << "\n";
98  m_logStr << x - radius << " " << - (y ) << "\n";
99  m_logStr << x << " " << - (y - radius) << "\n";
100  m_logStr << "\n";
101  }
102 }
103 
104 void GridLog::showOutputTrapezoid (const QPoint &p0,
105  const QPoint &p1,
106  const QPoint &p2,
107  const QPoint &p3)
108 {
109  if (m_isGnuplot) {
110 
111  // Log if any pixel is in the region of interest
112  if (inBounds (p0.x(), p0.y()) ||
113  inBounds (p1.x(), p1.y()) ||
114  inBounds (p2.x(), p2.y()) ||
115  inBounds (p3.x(), p3.y())) {
116 
117  m_logStr << p0.x() << " " << - p0.y() << "\n";
118  m_logStr << p1.x() << " " << - p1.y() << "\n";
119  m_logStr << p2.x() << " " << - p2.y() << "\n";
120  m_logStr << p3.x() << " " << - p3.y() << "\n";
121  m_logStr << p0.x() << " " << - p0.y() << "\n";
122  m_logStr << "\n";
123  }
124  }
125 }
const int DETAILED_Y_MIN
Definition: GridLog.cpp:23
void showOutputScanLinePixel(int x, int y, double radius)
Show scan line pixel that is the output of GridHealer.
Definition: GridLog.cpp:88
const int DETAILED_X_MIN
Definition: GridLog.cpp:21
const int DETAILED_Y_MAX
Definition: GridLog.cpp:24
const QString GNUPLOT_FILE_MESSAGE
virtual ~GridLog()
Definition: GridLog.cpp:42
GridLog(bool isGnuplot)
Single constructor.
Definition: GridLog.cpp:26
const int DETAILED_RADIUS
Definition: GridLog.cpp:18
const int DETAILED_CENTER_X
Definition: GridLog.cpp:16
const int DETAILED_X_MAX
Definition: GridLog.cpp:22
void showInputPixel(const QPoint &p, double halfWidth)
Show pixels that are inputs to GridHealer.
Definition: GridLog.cpp:68
void showOutputTrapezoid(const QPoint &p0, const QPoint &p1, const QPoint &p2, const QPoint &p3)
Show trapezoids that are intermediate results in GridHealer.
Definition: GridLog.cpp:104
const int DETAILED_CENTER_Y
Definition: GridLog.cpp:17