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 callbackRequire2AxisPoints (const QPointF &posScreen,
00090 const QPointF &posGraph);
00091 CallbackSearchReturn callbackRequire3AxisPoints (const QPointF &posScreen,
00092 const QPointF &posGraph);
00093 CallbackSearchReturn callbackRequire4AxisPoints (bool isXOnly,
00094 const QPointF &posScreen,
00095 const QPointF &posGraph);
00096 void computeTransforms3();
00097 void computeTransforms4();
00098 void loadTransforms2();
00099 void loadTransforms3();
00100 void loadTransforms4();
00101 bool threePointsAreCollinear (const QTransform &transform);
00102
00103
00104 DocumentModelCoords m_modelCoords;
00105
00106
00107 QString m_pointIdentifierOverride;
00108 QPointF m_posScreenOverride;
00109 QPointF m_posGraphOverride;
00110
00111
00112 CoordPairVector m_screenInputs;
00113 CoordPairVector m_graphOutputs;
00114
00115
00116 CoordPairVector m_screenInputsX;
00117 CoordPairVector m_screenInputsY;
00118 CoordSingleVector m_graphOutputsX;
00119 CoordSingleVector m_graphOutputsY;
00120
00121
00122 QTransform m_screenInputsTransform;
00123 QTransform m_graphOutputsTransform;
00124
00125
00126 bool m_isError;
00127 QString m_errorMessage;
00128
00129
00130 double m_xGraphLow;
00131 double m_yGraphLow;
00132 double m_xGraphHigh;
00133 double m_yGraphHigh;
00134
00135
00136 DocumentAxesPointsRequired m_documentAxesPointsRequired;
00137 };
00138
00139 #endif // CALLBACK_AXIS_POINTS_ABSTRACT