00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #ifndef COORDINATEFRAME_H
00044 #define COORDINATEFRAME_H
00045
00046
00047 #include <vcg/math/similarity.h>
00048 #include <vcg/space/color4.h>
00049
00050 #include <QGLWidget>
00051
00052 namespace vcg {
00053
00059 class CoordinateFrame
00060 {
00061 public:
00062
00069 CoordinateFrame(float size);
00070
00076 virtual ~CoordinateFrame() {}
00077
00083 virtual void Render(QGLWidget* glw);
00084
00085
00087 Color4b basecolor;
00088
00090 Color4b xcolor;
00091
00093 Color4b ycolor;
00094
00096 Color4b zcolor;
00097
00099 float size;
00100
00102 float linewidth;
00103
00105 QFont font;
00106
00108 bool drawaxis;
00109
00111 bool drawlabels;
00112
00114 bool drawvalues;
00115
00116
00117 static void drawTickedLine(const Point3d &, const Point3d &, float, float,float);
00118 static float calcSlope(const Point3d &, const Point3d &, float, int , double *, double *, GLint *);
00119 static float niceRound(float);
00120 };
00121
00127 class MovableCoordinateFrame: public CoordinateFrame
00128 {
00129
00130 public:
00137 MovableCoordinateFrame(float);
00138
00144 virtual ~MovableCoordinateFrame(){}
00145
00151 virtual void Render(QGLWidget* glw);
00152
00159 virtual void Reset(bool reset_position,bool reset_alignment);
00160
00166 virtual void SetPosition(const Point3f new_position);
00167
00173 virtual void SetRotation(const Quaternionf rotation);
00174
00180 virtual Point3f GetPosition();
00181
00187 virtual Quaternionf GetRotation();
00188
00194 virtual void GetTransform(Matrix44f &m);
00195
00202 virtual void Rot(float angle,const Point3f axis);
00203
00218 virtual void AlignWith(const Point3f primary, const Point3f secondary, const char axis_1, const char axis_2);
00219
00220 protected:
00221
00222 Point3f position;
00223 Quaternionf rotation;
00224
00225
00226 virtual void Move(const Similarityf);
00227 void RotateToAlign(const Point3f, const Point3f);
00228
00229 };
00230
00231 }
00232 #endif