00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef FLTTRANSFORMROTATESCALE_H
00016 #define FLTTRANSFORMROTATESCALE_H
00017
00018 #include "pandatoolbase.h"
00019
00020 #include "fltTransformRecord.h"
00021
00022
00023
00024
00025
00026
00027 class FltTransformRotateScale : public FltTransformRecord {
00028 public:
00029 FltTransformRotateScale(FltHeader *header);
00030
00031 void set(const LPoint3d ¢er, const LPoint3d &reference_point,
00032 const LPoint3d &to_point, bool axis_scale);
00033
00034 const LPoint3d &get_center() const;
00035 const LPoint3d &get_reference_point() const;
00036 const LPoint3d &get_to_point() const;
00037 PN_stdfloat get_overall_scale() const;
00038 PN_stdfloat get_axis_scale() const;
00039 PN_stdfloat get_angle() const;
00040
00041 private:
00042 void recompute_matrix();
00043
00044 LPoint3d _center;
00045 LPoint3d _reference_point;
00046 LPoint3d _to_point;
00047 PN_stdfloat _overall_scale;
00048 PN_stdfloat _axis_scale;
00049 PN_stdfloat _angle;
00050
00051 protected:
00052 virtual bool extract_record(FltRecordReader &reader);
00053 virtual bool build_record(FltRecordWriter &writer) const;
00054
00055 public:
00056 virtual TypeHandle get_type() const {
00057 return get_class_type();
00058 }
00059 virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
00060 static TypeHandle get_class_type() {
00061 return _type_handle;
00062 }
00063 static void init_type() {
00064 FltTransformRecord::init_type();
00065 register_type(_type_handle, "FltTransformRotateScale",
00066 FltTransformRecord::get_class_type());
00067 }
00068
00069 private:
00070 static TypeHandle _type_handle;
00071 };
00072
00073 #endif
00074
00075