00001
00002
00003
00004
00005
00006
00007 #ifndef TRANSFORMATION_H
00008 #define TRANSFORMATION_H
00009
00010 #include "CmdMediator.h"
00011 #include "DocumentModelCoords.h"
00012 #include "MainWindowModel.h"
00013 #include <QPointF>
00014 #include <QString>
00015 #include <QTransform>
00016
00030 class Transformation
00031 {
00032
00033 friend class TestTransformation;
00034
00035 public:
00037 Transformation();
00038
00040 Transformation &operator=(const Transformation &other);
00041
00043 void identity();
00044
00046 bool operator!=(const Transformation &other);
00047
00054 static QTransform calculateTransformFromLinearCartesianPoints (const QPointF &posFrom0,
00055 const QPointF &posFrom1,
00056 const QPointF &posFrom2,
00057 const QPointF &posTo0,
00058 const QPointF &posTo1,
00059 const QPointF &posTo2);
00060
00062 static QPointF cartesianFromCartesianOrPolar (const DocumentModelCoords &modelCoords,
00063 const QPointF &posGraphIn);
00064
00066 static QPointF cartesianOrPolarFromCartesian (const DocumentModelCoords &modelCoords,
00067 const QPointF &posGraphIn);
00068
00070 void coordTextForStatusBar (QPointF cursorScreen,
00071 QString &coordsScreen,
00072 QString &coordsGraph,
00073 QString &resolutionGraph);
00074
00076 static double logToLinearCartesian (double xy);
00077
00079 static double logToLinearRadius (double r,
00080 double rCenter);
00081
00083 DocumentModelCoords modelCoords() const;
00084
00086 void printStream (QString indentation,
00087 QTextStream &str) const;
00088
00090 void resetOnLoad();
00091
00093 bool transformIsDefined() const;
00094
00096 void transformLinearCartesianGraphToRawGraph (const QPointF &coordGraph,
00097 QPointF &coordScreen) const;
00098
00100 void transformLinearCartesianGraphToScreen (const QPointF &coordGraph,
00101 QPointF &coordScreen) const;
00102
00104 QTransform transformMatrix () const;
00105
00107 void transformRawGraphToLinearCartesianGraph (const QPointF &pointRaw,
00108 QPointF &pointLinearCartesian) const;
00109
00111 void transformRawGraphToScreen (const QPointF &pointRaw,
00112 QPointF &pointScreen) const;
00113
00115 void transformScreenToLinearCartesianGraph (const QPointF &pointScreen,
00116 QPointF &pointLinearCartesian) const;
00117
00119 void transformScreenToRawGraph (const QPointF &coordScreen,
00120 QPointF &coordGraph) const;
00121
00123 void update (bool fileIsLoaded,
00124 const CmdMediator &cmdMediator,
00125 const MainWindowModel &modelMainWindow);
00126
00127 private:
00128
00129
00130 double roundOffSmallValues (double value, double range);
00131
00132
00133 void setModelCoords (const DocumentModelCoords &modelCoords,
00134 const MainWindowModel &modelMainWindow);
00135
00136
00137 void updateTransformFromMatrices (const QTransform &matrixScreen,
00138 const QTransform &matrixGraph);
00139
00140
00141 bool m_transformIsDefined;
00142
00143
00144 QTransform m_transform;
00145
00146
00147 DocumentModelCoords m_modelCoords;
00148
00149
00150 MainWindowModel m_modelMainWindow;
00151 };
00152
00154 std::ostringstream &operator<< (std::ostringstream &str,
00155 const Transformation &transformation);
00156
00157 #endif // TRANSFORMATION_H