Salome HOME
NRI : Temporary modification for reading catalog of modules.
[modules/kernel.git] / src / VTKViewer / VTKViewer_NonIsometricTransform.h
1 #ifndef __VTKViewer_NonIsometricTransform_h
2 #define __VTKViewer_NonIsometricTransform_h
3
4
5 #include <vtkWarpTransform.h>
6 //#include <vtkImageData.h>
7 //#include <vtkTransformPolyDataFilter.h>
8
9 #include <vtkObjectFactory.h>
10 #include <math.h>
11
12 //second parameter is coefficient ( e.g y = ky, second parameter is k )
13 typedef double (*MFun)(double,double);
14
15 class AxisFunction
16 {
17  public:
18   enum Axis {XAxis=0, YAxis, ZAxis};
19  private:
20   
21   void init_der(double der[3]) const
22     {
23       der[XAxis] = der[YAxis] = der[ZAxis] = 0.0;
24     }
25
26  public:
27   AxisFunction(Axis A, MFun fF, MFun dfF, MFun iF, MFun diF)
28     : m_axis(A), fFun(fF), dfFun(dfF), iFun(iF), diFun(diF) {};
29   AxisFunction(Axis A);
30   AxisFunction();
31
32   const Axis getAxis() const{ return m_axis; }
33   void setAxis(const Axis axis) { m_axis = axis; }
34
35   void forward(const double in, const double coeff, double& out) const
36     {
37       out = (*fFun)( in, coeff );
38     }
39   
40   void forward(const double in, const double coeff, double& out, double der[3]) const;
41   
42   void inverse(const double in, const double coeff, double& out) const
43     {
44       out = (*iFun)( in, coeff );
45     }
46   void inverse(const double in, const double coeff, double& out, double der[3]) const;
47   
48   MFun getfFun() ;
49
50  private:
51   Axis m_axis;
52   MFun fFun, dfFun, iFun, diFun;
53 };
54
55
56 class VTK_EXPORT VTKViewer_NonIsometricTransform : public vtkWarpTransform
57 {
58  public:  
59   enum Function { Identical = 0, Linear, Logarithmic };
60  protected:
61   
62   void ForwardTransformPoint(const float in[3], float out[3]);
63   void ForwardTransformPoint(const double in[3], double out[3]);
64   void ForwardTransformDerivative(const double in[3], double out[3], double der[3][3]);
65   void ForwardTransformDerivative(const float in[3], float out[3], float der[3][3]);
66   void InverseTransformDerivative(const double in[3], double out[3], double der[3][3]);
67   void InverseTransformPoint(const double in[3], double out[3]);
68   void InverseTransformPoint(const float in[3], float out[3]);
69
70   VTKViewer_NonIsometricTransform();
71
72   void SetFunction(const AxisFunction AF);
73
74  public:
75   
76   vtkTypeMacro(VTKViewer_NonIsometricTransform,vtkWarpTransform);
77   static VTKViewer_NonIsometricTransform *New();
78
79   vtkAbstractTransform* MakeTransform()
80     {
81       return VTKViewer_NonIsometricTransform::New();
82     }
83   virtual void PrintSelf(ostream& os, vtkIndent indent)
84     {
85       vtkWarpTransform::PrintSelf(os,indent);
86     }
87   void SetFunction(const AxisFunction::Axis axis, const Function aFunction, const double coeff);
88
89   Function GetFunctionType(const AxisFunction::Axis axis);
90   double GetCoeff (const AxisFunction::Axis axis);
91
92  private:
93   AxisFunction m_axisFunctions[3];
94   double m_coeff[3];
95 };
96
97 #endif