8 #include "DocumentModelCoords.h"
9 #include "EngaugeAssert.h"
10 #include "EnumsToQt.h"
11 #include "GridLineFactory.h"
15 #include <QGraphicsItem>
16 #include <QGraphicsScene>
19 #include <QTextStream>
20 #include "QtToString.h"
21 #include "Transformation.h"
23 const int NUM_AXES_POINTS_3 = 3;
24 const int NUM_AXES_POINTS_4 = 4;
26 extern const QString DUMMY_CURVE_NAME;
31 const int CHECKER_POINTS_WIDTH = 5;
40 const QList<Point> &points,
45 LOG4CPP_INFO_S ((*mainCat)) <<
"Checker::adjustPolarAngleRanges transformation=" << transformation;
47 const double UNIT_LENGTH = 1.0;
50 if (modelCoords.
coordsType() == COORDS_TYPE_POLAR) {
55 path = QString (
"yMin=%1 ").arg (yMin);
59 double angle0 = points.at(0).posGraph().x();
60 double angle1 = points.at(1).posGraph().x();
61 double angle2 = points.at(2).posGraph().x();
63 QPointF (angle0, UNIT_LENGTH));
65 QPointF (angle1, UNIT_LENGTH));
67 QPointF (angle2, UNIT_LENGTH));
71 double sumAngle0 = angleBetweenVectors(pos0, pos1) + angleBetweenVectors(pos0, pos2);
72 double sumAngle1 = angleBetweenVectors(pos1, pos0) + angleBetweenVectors(pos1, pos2);
73 double sumAngle2 = angleBetweenVectors(pos2, pos0) + angleBetweenVectors(pos2, pos1);
74 if ((sumAngle0 <= sumAngle1) && (sumAngle0 <= sumAngle2)) {
77 if ((angleFromVectorToVector (pos0, pos1) < 0) ||
78 (angleFromVectorToVector (pos0, pos2) > 0)) {
79 path += QString (
"from 1=%1 through 0 to 2=%2").arg (angle1).arg (angle2);
83 path += QString (
"from 2=%1 through 0 to 1=%2").arg (angle2).arg (angle1);
87 }
else if ((sumAngle1 <= sumAngle0) && (sumAngle1 <= sumAngle2)) {
90 if ((angleFromVectorToVector (pos1, pos0) < 0) ||
91 (angleFromVectorToVector (pos1, pos2) > 0)) {
92 path += QString (
"from 0=%1 through 1 to 2=%2").arg (angle0).arg (angle2);
96 path += QString (
"from 2=%1 through 1 to 0=%2").arg (angle2).arg (angle0);
103 if ((angleFromVectorToVector (pos2, pos0) < 0) ||
104 (angleFromVectorToVector (pos2, pos1) > 0)) {
105 path += QString (
"from 0=%1 through 2 to 1=%2").arg (angle0).arg (angle1);
109 path += QString (
"from 1=%1 through 2 to 0=%2").arg (angle1).arg (angle0);
116 while (xMax < xMin) {
120 path += QString (
" xMax+=%1").arg (thetaPeriod);
126 LOG4CPP_INFO_S ((*mainCat)) <<
"Checker::adjustPolarAngleRanges path=(" << path.toLatin1().data() <<
")";
133 DocumentAxesPointsRequired documentAxesPointsRequired)
135 LOG4CPP_INFO_S ((*mainCat)) <<
"Checker::prepareForDisplay";
137 ENGAUGE_ASSERT ((polygon.count () == NUM_AXES_POINTS_3) ||
138 (polygon.count () == NUM_AXES_POINTS_4));
143 QPolygonF::const_iterator itr;
144 for (itr = polygon.begin (); itr != polygon.end (); itr++) {
146 const QPointF &pF = *itr;
148 Point p (DUMMY_CURVE_NAME,
152 points.push_back (p);
163 documentAxesPointsRequired);
171 DocumentAxesPointsRequired documentAxesPointsRequired)
173 LOG4CPP_INFO_S ((*mainCat)) <<
"Checker::prepareForDisplay "
174 <<
" transformation=" << transformation;
176 ENGAUGE_ASSERT ((points.count () == NUM_AXES_POINTS_3) ||
177 (points.count () == NUM_AXES_POINTS_4));
180 m_gridLines.
clear ();
182 bool fourPoints = (documentAxesPointsRequired == DOCUMENT_AXES_POINTS_REQUIRED_4);
185 double xFrom = 0, xTo = 0, yFrom = 0, yTo = 0;
189 for (i = 0; i < points.count(); i++) {
190 if (!fourPoints || (points.at(i).isXOnly() && fourPoints)) {
194 xFrom = points.at(i).posGraph().x();
195 xTo = points.at(i).posGraph().x();
198 xFrom = qMin (xFrom, points.at(i).posGraph().x());
199 xTo = qMax (xTo , points.at(i).posGraph().x());
203 if (!fourPoints || (!points.at(i).isXOnly() && fourPoints)) {
207 yFrom = points.at(i).posGraph().y();
208 yTo = points.at(i).posGraph().y();
211 yFrom = qMin (yFrom, points.at(i).posGraph().y());
212 yTo = qMax (yTo , points.at(i).posGraph().y());
219 adjustPolarAngleRanges (modelCoords,
247 QColor color = ColorPaletteToQColor (modelAxesChecker.
lineColor());
248 QPen pen (QBrush (color), CHECKER_POINTS_WIDTH);
Factory class for generating the points, composed of QGraphicsItem objects, along a GridLine...
GridLine * createGridLine(double xFrom, double yFrom, double xTo, double yTo)
Create grid line, either along constant X/theta or constant Y/radius side.
void clear()
Deallocate and remove all grid lines.
void setPen(const QPen &pen)
Set the pen style of each grid line.
virtual void updateModelAxesChecker(const DocumentModelAxesChecker &modelAxesChecker)
Apply the new DocumentModelAxesChecker, to the points already associated with this object...
double originRadius() const
Get method for origin radius in polar mode.
ColorPalette lineColor() const
Get method for line color.
Class that represents one digitized point. The screen-to-graph coordinate transformation is always ex...
void prepareForDisplay(const QPolygonF &polygon, int pointRadius, const DocumentModelAxesChecker &modelAxesChecker, const DocumentModelCoords &modelCoords, DocumentAxesPointsRequired documentAxesPointsRequired)
Create the polygon from current information, including pixel coordinates, just prior to display...
double thetaPeriod() const
Return the period of the theta value for polar coordinates, consistent with CoordThetaUnits.
CoordsType coordsType() const
Get method for coordinates type.
Model for DlgSettingsCoords and CmdSettingsCoords.
void setVisible(bool visible)
Make all grid lines visible or hidden.
Model for DlgSettingsAxesChecker and CmdSettingsAxesChecker.
void add(GridLine *gridLine)
Add specified grid line. Ownership of all allocated QGraphicsItems is passed to new GridLine...
Checker(QGraphicsScene &scene)
Single constructor for DlgSettingsAxesChecker, which does not have an explicit transformation. The identity transformation is assumed.
void setVisible(bool visible)
Show/hide this axes checker.