00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef SIDE_H
00017 #define SIDE_H
00018
00019 #include "matrix3d.h"
00020 #include "rotenums.h"
00021 #include <qwmatrix.h>
00022 #include <qobject.h>
00023
00024 class QPainter;
00025 class QPicture;
00026
00038 class Side : public QObject {
00039 Q_OBJECT
00040 public:
00042 Side();
00044 Side(const double [9]);
00046 Side(const Side &);
00048 virtual ~Side();
00050 const Side &operator=(const Side &);
00055 int operator<(const Side &) const;
00056
00058 void setPoints(const double [9]);
00060 void setPicture(const QPicture *);
00062 void setRotation(short);
00065 void setSymmetry(Symmetry);
00066 void paintSide(QPainter *p) const;
00067 void rotate(Rotation);
00068 void updateMatrix(const Matrix3D &m3d);
00069 bool processClick(const QPoint &p);
00070 Rotation getRotation() const;
00071 double getMaxDistance() const;
00073 const QPicture *picture() const;
00075 const QWMatrix *matrix() const;
00076 Symmetry symmetry() const;
00077 private:
00083 Rotation rot;
00087 Symmetry sym;
00090 const QPicture *pict;
00091 double *const p1, *const p2, *const p3, *const p4;
00092 double ipoints[12], opoints[12];
00093 QWMatrix wm;
00094 double getZcoord(double, double) const;
00095 bool intersect(const Side &s, double &L1x, double &L1y, double &L2x,
00096 double &L2y) const;
00097 signals:
00101 void clickedAt(QPoint p);
00105 void clicked();
00106 };
00107
00108 #endif