00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00039 #ifndef __vtkButtonSource_h
00040 #define __vtkButtonSource_h
00041
00042 #include "vtkPolyDataSource.h"
00043
00044 class vtkCellArray;
00045 class vtkFloatArray;
00046 class vtkPoints;
00047
00048 #define VTK_TEXTURE_STYLE_FIT_IMAGE 0
00049 #define VTK_TEXTURE_STYLE_PROPORTIONAL 1
00050
00051 class VTK_GRAPHICS_EXPORT vtkButtonSource : public vtkPolyDataSource
00052 {
00053 public:
00054 void PrintSelf(ostream& os, vtkIndent indent);
00055 vtkTypeRevisionMacro(vtkButtonSource,vtkPolyDataSource);
00056
00058 static vtkButtonSource *New();
00059
00061
00062 vtkSetClampMacro(Width,double,0.0,VTK_DOUBLE_MAX);
00063 vtkGetMacro(Width,double);
00065
00067
00068 vtkSetClampMacro(Height,double,0.0,VTK_DOUBLE_MAX);
00069 vtkGetMacro(Height,double);
00071
00073
00074 vtkSetClampMacro(Depth,double,0.0,VTK_DOUBLE_MAX);
00075 vtkGetMacro(Depth,double);
00077
00079
00086 vtkSetClampMacro(RadialRatio,double,1.0,VTK_DOUBLE_MAX);
00087 vtkGetMacro(RadialRatio,double);
00089
00091
00093 vtkSetClampMacro(CircumferentialResolution,int,4,VTK_LARGE_INTEGER);
00094 vtkGetMacro(CircumferentialResolution,int);
00096
00098
00100 vtkSetClampMacro(TextureResolution,int,1,VTK_LARGE_INTEGER);
00101 vtkGetMacro(TextureResolution,int);
00103
00105
00107 vtkSetClampMacro(ShoulderResolution,int,1,VTK_LARGE_INTEGER);
00108 vtkGetMacro(ShoulderResolution,int);
00110
00112
00113 vtkSetVector3Macro(Origin,double);
00114 vtkGetVectorMacro(Origin,double,3);
00116
00118
00124 vtkSetClampMacro(TextureStyle,int,VTK_TEXTURE_STYLE_FIT_IMAGE,
00125 VTK_TEXTURE_STYLE_PROPORTIONAL);
00126 vtkGetMacro(TextureStyle,int);
00127 void SetTextureStyleToFitImage()
00128 {this->SetTextureStyle(VTK_TEXTURE_STYLE_FIT_IMAGE);}
00129 void SetTextureStyleToProportional()
00130 {this->SetTextureStyle(VTK_TEXTURE_STYLE_PROPORTIONAL);}
00132
00134
00136 vtkSetVector2Macro(TextureDimensions,int);
00137 vtkGetVector2Macro(TextureDimensions,int);
00139
00141
00142 vtkSetVector2Macro(ShoulderTextureCoordinate,double);
00143 vtkGetVector2Macro(ShoulderTextureCoordinate,double);
00145
00147
00151 vtkSetMacro(TwoSided,int);
00152 vtkGetMacro(TwoSided,int);
00153 vtkBooleanMacro(TwoSided,int);
00155
00156 protected:
00157 vtkButtonSource();
00158 ~vtkButtonSource() {}
00159
00160 void Execute();
00161
00162 double Width;
00163 double Height;
00164 double Depth;
00165
00166 int CircumferentialResolution;
00167 int TextureResolution;
00168 int ShoulderResolution;
00169
00170 double Origin[3];
00171 double ShoulderTextureCoordinate[2];
00172
00173 double RadialRatio;
00174 int TextureStyle;
00175 int TextureDimensions[2];
00176 int TwoSided;
00177
00178 private:
00179 vtkButtonSource(const vtkButtonSource&);
00180 void operator=(const vtkButtonSource&);
00181
00182
00183 double A;
00184 double A2;
00185 double B;
00186 double B2;
00187 double C;
00188 double C2;
00189
00190 double ComputeDepth(int inTextureRegion, double x, double y, double n[3]);
00191 void InterpolateCurve(int inTextureRegion, vtkPoints *newPts, int numPts,
00192 vtkFloatArray *normals, vtkFloatArray *tcoords,
00193 int res, int c1StartPoint,int c1Incr,
00194 int c2StartPoint,int s2Incr, int startPoint,int incr);
00195 void CreatePolygons(vtkCellArray *newPolys, int num, int res, int startIdx);
00196 void IntersectEllipseWithLine(double a2, double b2, double dX, double dY,
00197 double& xe, double& ye);
00198
00199
00200 };
00201
00202 #endif
00203
00204