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
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072 #ifndef __FK_MATADMIN_HEADER__
00073 #define __FK_MATADMIN_HEADER__
00074
00075 #include <FK/Base.h>
00076 #include <FK/Matrix.h>
00077 #include <FK/Angle.h>
00078
00080
00121 class fk_MatrixAdmin : public fk_BaseObject {
00122
00123 protected:
00124
00125 #ifndef FK_DOXYGEN_USER_PROCESS
00126
00127 fk_OrthoMatrix OrthoMatrix;
00128 fk_HVector Position;
00129 fk_HVector Vec, UpVec;
00130 fk_Angle Angle;
00131 double Scale;
00132 double xScale, yScale, zScale;
00133 bool ScaleMode;
00134
00135 void RotateLtoG(fk_Vector *, const fk_Vector *,
00136 const fk_Angle *) const;
00137 void VectorToHeadPitch(fk_Angle *, const fk_Vector *) const;
00138 void VectorToAngle(fk_Angle *, const fk_Vector *,
00139 const fk_Vector *) const;
00140 void AngleToVector(fk_Vector *, fk_Vector *,
00141 const fk_Angle *) const;
00142 void AddAngle(fk_Angle *, const fk_Angle *) const;
00143
00144 void AdjustAngleToVec(void);
00145 void AdjustVecToAngle(void);
00146
00147 void UpdateMatrix(bool = true);
00148
00149 fk_OrthoMatrix OrthonormalMatrix(const fk_Vector &, const fk_Vector &,
00150 const double) const;
00151 void SetScaleMode(void);
00152
00153 void GlRotate_(const fk_Vector &, const fk_Vector &,
00154 const double);
00155 void LoRotate_(const fk_Vector &, const fk_Vector &,
00156 const double);
00157
00158 void GlRotateWithVec_(const fk_Vector &,
00159 const fk_Vector &,
00160 double);
00161
00162 void LoRotateWithVec_(const fk_Vector &,
00163 const fk_Vector &,
00164 double);
00165
00166 #endif
00167
00168 public:
00169
00171 fk_MatrixAdmin(fk_ObjectType = FK_MATRIXADMIN);
00172
00174 ~fk_MatrixAdmin();
00175
00177
00178
00180
00191 fk_Vector getPosition(void) const;
00192
00194
00205 fk_Vector getVec(void) const;
00206
00208
00219 fk_Vector getUpvec(void) const;
00220
00221 #ifndef FK_DOXYGEN_USER_PROCESS
00222 fk_Vector getUpVec(void) const;
00223 #endif
00224
00226
00238 fk_Angle getAngle(void) const;
00239
00241
00252 fk_Matrix getMatrix(void) const;
00253
00255
00267 fk_Matrix getInvMatrix(void) const;
00268
00270
00282 fk_OrthoMatrix getBaseMatrix(void) const;
00283
00285
00297 fk_OrthoMatrix getInvBaseMatrix(void) const;
00298
00299
00300
00302
00303
00305
00317 bool setScale(const double scale);
00318
00320
00333 bool setScale(const double scale, fk_Axis axis);
00334
00336
00350 bool setScale(const double x, const double y, const double z);
00351
00353
00365 bool prdScale(const double scale);
00366
00368
00381 bool prdScale(const double scale, fk_Axis axis);
00382
00384
00398 bool prdScale(const double x, const double y, const double z);
00399
00401
00406 double getScale(void) const;
00407
00409
00416 double getScale(fk_Axis axis) const;
00417
00419
00438 bool getScaleMode(void) const;
00439
00440
00441
00443
00444
00446
00465 bool glRotate(fk_Vector origin, fk_Axis axis, double theta);
00466
00468
00489 bool glRotate(double orgX, double orgY, double orgZ,
00490 fk_Axis axis, double theta);
00491
00493
00513 bool glRotate(fk_Vector A, fk_Vector B, double theta);
00514
00516
00540 bool glRotate(double Ax, double Ay, double Az,
00541 double Bx, double By, double Bz, double theta);
00542
00544
00564 bool loRotate(fk_Vector origin, fk_Axis axis, double theta);
00565
00567
00589 bool loRotate(double orgX, double orgY, double orgZ,
00590 fk_Axis axis, double theta);
00591
00592
00594
00616 bool loRotate(fk_Vector A, fk_Vector B, double theta);
00617
00619
00650 bool loRotate(double Ax, double Ay, double Az,
00651 double Bx, double By, double Bz, double theta);
00652
00654
00674 bool glRotateWithVec(fk_Vector origin,
00675 fk_Axis axis, double theta);
00676
00678
00700 bool glRotateWithVec(double orgX, double orgY, double orgZ,
00701 fk_Axis axis, double theta);
00702
00704
00725 bool glRotateWithVec(fk_Vector A, fk_Vector B, double theta);
00726
00728
00753 bool glRotateWithVec(double Ax, double Ay, double Az,
00754 double Bx, double By, double Bz,
00755 double theta);
00756
00758
00779 bool loRotateWithVec(fk_Vector origin,
00780 fk_Axis axis, double theta);
00781
00783
00806 bool loRotateWithVec(double orgX, double orgY, double orgZ,
00807 fk_Axis axis, double theta);
00808
00809
00811
00834 bool loRotateWithVec(fk_Vector A, fk_Vector B,
00835 double theta);
00836
00837
00839
00871 bool loRotateWithVec(double Ax, double Ay, double Az,
00872 double Bx, double By, double Bz,
00873 double theta);
00874
00875
00876
00878
00879
00881
00894 bool glTranslate(fk_Vector v);
00895
00897
00912 bool glTranslate(double x, double y, double z);
00913
00915
00928 bool loTranslate(fk_Vector v);
00929
00931
00946 bool loTranslate(double x, double y, double z);
00947
00949
00965 bool glMoveTo(fk_Vector p);
00966
00968
00986 bool glMoveTo(double x, double y, double z);
00987
00988
00989
00991
00992
00994
01013 bool glFocus(fk_Vector p);
01014
01016
01037 bool glFocus(double x, double y, double z);
01038
01040
01059 bool loFocus(fk_Vector p);
01060
01062
01083 bool loFocus(double x, double y, double z);
01084
01086
01109 bool glVec(fk_Vector v);
01110
01112
01137 bool glVec(double x, double y, double z);
01138
01140
01155 bool glUpvec(fk_Vector v);
01156
01158
01175 bool glUpvec(double x, double y, double z);
01176
01178
01196 bool loUpvec(fk_Vector v);
01197
01199
01219 bool loUpvec(double x, double y, double z);
01220
01222
01234 bool glAngle(fk_Angle angle);
01235
01237
01251 bool glAngle(double h, double p, double b);
01252
01254
01264 bool loAngle(fk_Angle angle);
01265
01267
01279 bool loAngle(double h, double p, double b);
01280
01281
01282
01283 #ifndef FK_DOXYGEN_USER_PROCESS
01284
01285 void snapShot(void);
01286 void restore(void);
01287 void restore(double t);
01288
01289 #endif
01290
01291 };
01292
01293 #endif // !__FK_MATADMIN_HEADER__