00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __GP_BilinearXform_h__
00021 #define __GP_BilinearXform_h__
00022
00023 #include "GP_API.h"
00024 #include "GP_Xform.h"
00025
00026 class GP_API GP_BilinearXform : public GP_Xform
00027 {
00028 public:
00029
00030 GP_BilinearXform(const UT_BoundingRect *brect = 0);
00031 GP_BilinearXform(const GP_BilinearXform &xform);
00032 GP_BilinearXform(const GP_Point &a1, const GP_Point &a2,
00033 const GP_Point &a3, const GP_Point &a4,
00034 const GP_Point &b1, const GP_Point &b2,
00035 const GP_Point &b3, const GP_Point &b4);
00036 virtual ~GP_BilinearXform(void);
00037
00038
00039
00040 virtual int forward (GP_Point &p) const;
00041 virtual int forward (GP_PointMatrix &m) const;
00042 virtual int backward(GP_Point &p) const;
00043 virtual int backward(GP_PointMatrix &m) const;
00044
00045
00046 virtual void reset(void);
00047
00048
00049 virtual void translate(float dx, float dy);
00050
00051
00052
00053
00054 virtual GP_Xform *compose(const GP_Xform &xform,
00055 const UT_BoundingRect * = 0);
00056 virtual GP_Xform *composeInverse(const GP_Xform &xform,
00057 const UT_BoundingRect * = 0);
00058
00059
00060
00061 virtual int copyFrom(const GP_Xform &xform);
00062
00063
00064
00065
00066
00067
00068 virtual GP_Xform *inverse(void);
00069 virtual int inverse(GP_Xform &);
00070
00071
00072 virtual const char *getName(void) const;
00073 virtual unsigned int getType(void) const;
00074
00075
00076 virtual int save(ostream &os, int binary = 0) const;
00077 virtual bool load(UT_IStream &is);
00078
00079
00080 GP_BilinearXform &operator=(const GP_BilinearXform &xform);
00081
00082
00083 protected:
00084
00085 int mapForward (GP_Point &data) const;
00086 int mapBackward(GP_Point &data) const;
00087
00088
00089 float findRoot (const GP_Point &p,
00090 const GP_Point &p1, const GP_Point &p2,
00091 const GP_Point &p3, const GP_Point &p4) const;
00092
00093 private:
00094 GP_Point myOriginal[4];
00095 GP_Point myMapped [4];
00096 };
00097
00098 #endif