1 #ifndef __VTKViewer_NonIsometricTransform_h
2 #define __VTKViewer_NonIsometricTransform_h
5 #include <vtkWarpTransform.h>
6 //#include <vtkImageData.h>
7 //#include <vtkTransformPolyDataFilter.h>
9 #include <vtkObjectFactory.h>
12 //second parameter is coefficient ( e.g y = ky, second parameter is k )
13 typedef double (*MFun)(double,double);
18 enum Axis {XAxis=0, YAxis, ZAxis};
21 void init_der(double der[3]) const
23 der[XAxis] = der[YAxis] = der[ZAxis] = 0.0;
27 AxisFunction(Axis A, MFun fF, MFun dfF, MFun iF, MFun diF)
28 : m_axis(A), fFun(fF), dfFun(dfF), iFun(iF), diFun(diF) {};
32 const Axis getAxis() const{ return m_axis; }
33 void setAxis(const Axis axis) { m_axis = axis; }
35 void forward(const double in, const double coeff, double& out) const
37 out = (*fFun)( in, coeff );
40 void forward(const double in, const double coeff, double& out, double der[3]) const;
42 void inverse(const double in, const double coeff, double& out) const
44 out = (*iFun)( in, coeff );
46 void inverse(const double in, const double coeff, double& out, double der[3]) const;
52 MFun fFun, dfFun, iFun, diFun;
56 class VTK_EXPORT VTKViewer_NonIsometricTransform : public vtkWarpTransform
59 enum Function { Identical = 0, Linear, Logarithmic };
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]);
70 VTKViewer_NonIsometricTransform();
72 void SetFunction(const AxisFunction AF);
76 vtkTypeMacro(VTKViewer_NonIsometricTransform,vtkWarpTransform);
77 static VTKViewer_NonIsometricTransform *New();
79 vtkAbstractTransform* MakeTransform()
81 return VTKViewer_NonIsometricTransform::New();
83 virtual void PrintSelf(ostream& os, vtkIndent indent)
85 vtkWarpTransform::PrintSelf(os,indent);
87 void SetFunction(const AxisFunction::Axis axis, const Function aFunction, const double coeff);
89 Function GetFunctionType(const AxisFunction::Axis axis);
90 double GetCoeff (const AxisFunction::Axis axis);
93 AxisFunction m_axisFunctions[3];