00001
00002
00003
00004
00005
00006
00007 #ifndef CALLBACK_AXIS_POINTS_ABSTRACT
00008 #define CALLBACK_AXIS_POINTS_ABSTRACT
00009
00010 #include "CallbackSearchReturn.h"
00011 #include "DocumentAxesPointsRequired.h"
00012 #include "DocumentModelCoords.h"
00013 #include <QList>
00014 #include <QString>
00015 #include <QTransform>
00016
00017 typedef QList<QPointF> CoordPairVector;
00018 typedef QList<double> CoordSingleVector;
00019
00020 class Point;
00021
00035 class CallbackAxisPointsAbstract
00036 {
00038 friend class TestGraphCoords;
00039
00040 public:
00042 CallbackAxisPointsAbstract(const DocumentModelCoords &modelCoords,
00043 DocumentAxesPointsRequired documentAxesPointsRequired);
00044
00046 CallbackAxisPointsAbstract(const DocumentModelCoords &modelCoords,
00047 const QString pointIdentifierOverride,
00048 const QPointF &posGraphOverride,
00049 const QPointF &posScreenOverride,
00050 DocumentAxesPointsRequired documentAxesPointsRequired);
00051
00053 CallbackSearchReturn callback (const QString &curveName,
00054 const Point &point);
00055
00058 QTransform matrixGraph () const;
00059
00062 QTransform matrixScreen () const;
00063
00065 double xGraphRange () const { return m_xGraphHigh - m_xGraphLow; }
00066
00068 double yGraphRange () const { return m_yGraphHigh - m_yGraphLow; }
00069
00070 protected:
00071
00073 DocumentAxesPointsRequired documentAxesPointsRequired() const;
00074
00076 QString errorMessage () const { return m_errorMessage; }
00077
00080 bool isError () const { return m_isError; }
00081
00083 unsigned int numberAxisPoints () const;
00084
00085 private:
00086
00087 bool anyPointsRepeatPair (const CoordPairVector &vector) const;
00088 bool anyPointsRepeatSingle (const CoordSingleVector &vector) const;
00089 CallbackSearchReturn callbackRequire3AxisPoints (const QPointF &posScreen,
00090 const QPointF &posGraph);
00091 CallbackSearchReturn callbackRequire4AxisPoints (bool isXOnly,
00092 const QPointF &posScreen,
00093 const QPointF &posGraph);
00094 void computeTransforms3();
00095 void computeTransforms4();
00096 void loadTransforms3();
00097 void loadTransforms4();
00098 bool threePointsAreCollinear (const QTransform &transform);
00099
00100
00101 DocumentModelCoords m_modelCoords;
00102
00103
00104 QString m_pointIdentifierOverride;
00105 QPointF m_posScreenOverride;
00106 QPointF m_posGraphOverride;
00107
00108
00109 CoordPairVector m_screenInputs;
00110 CoordPairVector m_graphOutputs;
00111
00112
00113 CoordPairVector m_screenInputsX;
00114 CoordPairVector m_screenInputsY;
00115 CoordSingleVector m_graphOutputsX;
00116 CoordSingleVector m_graphOutputsY;
00117
00118
00119 QTransform m_screenInputsTransform;
00120 QTransform m_graphOutputsTransform;
00121
00122
00123 bool m_isError;
00124 QString m_errorMessage;
00125
00126
00127 double m_xGraphLow;
00128 double m_yGraphLow;
00129 double m_xGraphHigh;
00130 double m_yGraphHigh;
00131
00132
00133 DocumentAxesPointsRequired m_documentAxesPointsRequired;
00134 };
00135
00136 #endif // CALLBACK_AXIS_POINTS_ABSTRACT