00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00039 #ifndef __vtkEllipticalButtonSource_h
00040 #define __vtkEllipticalButtonSource_h
00041
00042 #include "vtkButtonSource.h"
00043
00044 class vtkCellArray;
00045 class vtkFloatArray;
00046 class vtkPoints;
00047
00048 class VTK_GRAPHICS_EXPORT vtkEllipticalButtonSource : public vtkButtonSource
00049 {
00050 public:
00051 void PrintSelf(ostream& os, vtkIndent indent);
00052 vtkTypeRevisionMacro(vtkEllipticalButtonSource,vtkButtonSource);
00053
00055 static vtkEllipticalButtonSource *New();
00056
00058
00059 vtkSetClampMacro(Width,double,0.0,VTK_DOUBLE_MAX);
00060 vtkGetMacro(Width,double);
00062
00064
00065 vtkSetClampMacro(Height,double,0.0,VTK_DOUBLE_MAX);
00066 vtkGetMacro(Height,double);
00068
00070
00071 vtkSetClampMacro(Depth,double,0.0,VTK_DOUBLE_MAX);
00072 vtkGetMacro(Depth,double);
00074
00076
00078 vtkSetClampMacro(CircumferentialResolution,int,4,VTK_LARGE_INTEGER);
00079 vtkGetMacro(CircumferentialResolution,int);
00081
00083
00085 vtkSetClampMacro(TextureResolution,int,1,VTK_LARGE_INTEGER);
00086 vtkGetMacro(TextureResolution,int);
00088
00090
00092 vtkSetClampMacro(ShoulderResolution,int,1,VTK_LARGE_INTEGER);
00093 vtkGetMacro(ShoulderResolution,int);
00095
00097
00104 vtkSetClampMacro(RadialRatio,double,1.0,VTK_DOUBLE_MAX);
00105 vtkGetMacro(RadialRatio,double);
00107
00108 protected:
00109 vtkEllipticalButtonSource();
00110 ~vtkEllipticalButtonSource() {}
00111
00112 int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00113
00114 double Width;
00115 double Height;
00116 double Depth;
00117 int CircumferentialResolution;
00118 int TextureResolution;
00119 int ShoulderResolution;
00120 double RadialRatio;
00121
00122 private:
00123 vtkEllipticalButtonSource(const vtkEllipticalButtonSource&);
00124 void operator=(const vtkEllipticalButtonSource&);
00125
00126
00127 double A;
00128 double A2;
00129 double B;
00130 double B2;
00131 double C;
00132 double C2;
00133
00134 double ComputeDepth(int inTextureRegion, double x, double y, double n[3]);
00135 void InterpolateCurve(int inTextureRegion, vtkPoints *newPts, int numPts,
00136 vtkFloatArray *normals, vtkFloatArray *tcoords,
00137 int res, int c1StartPoint,int c1Incr,
00138 int c2StartPoint,int s2Incr, int startPoint,int incr);
00139 void CreatePolygons(vtkCellArray *newPolys, int num, int res, int startIdx);
00140 void IntersectEllipseWithLine(double a2, double b2, double dX, double dY,
00141 double& xe, double& ye);
00142
00143
00144 };
00145
00146 #endif
00147
00148