00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00043 #ifndef __vtkButtonSource_h
00044 #define __vtkButtonSource_h
00045
00046 #include "vtkPolyDataSource.h"
00047
00048 class vtkCellArray;
00049 class vtkFloatArray;
00050 class vtkPoints;
00051
00052 #define VTK_TEXTURE_STYLE_FIT_IMAGE 0
00053 #define VTK_TEXTURE_STYLE_PROPORTIONAL 1
00054
00055 class VTK_GRAPHICS_EXPORT vtkButtonSource : public vtkPolyDataSource
00056 {
00057 public:
00058 void PrintSelf(ostream& os, vtkIndent indent);
00059 vtkTypeRevisionMacro(vtkButtonSource,vtkPolyDataSource);
00060
00062 static vtkButtonSource *New();
00063
00065
00066 vtkSetClampMacro(Width,float,0.0,VTK_LARGE_FLOAT);
00067 vtkGetMacro(Width,float);
00069
00071
00072 vtkSetClampMacro(Height,float,0.0,VTK_LARGE_FLOAT);
00073 vtkGetMacro(Height,float);
00075
00077
00078 vtkSetClampMacro(Depth,float,0.0,VTK_LARGE_FLOAT);
00079 vtkGetMacro(Depth,float);
00081
00083
00090 vtkSetClampMacro(RadialRatio,float,1.0,VTK_LARGE_FLOAT);
00091 vtkGetMacro(RadialRatio,float);
00093
00095
00097 vtkSetClampMacro(CircumferentialResolution,int,4,VTK_LARGE_INTEGER);
00098 vtkGetMacro(CircumferentialResolution,int);
00100
00102
00104 vtkSetClampMacro(TextureResolution,int,1,VTK_LARGE_INTEGER);
00105 vtkGetMacro(TextureResolution,int);
00107
00109
00111 vtkSetClampMacro(ShoulderResolution,int,1,VTK_LARGE_INTEGER);
00112 vtkGetMacro(ShoulderResolution,int);
00114
00116
00117 vtkSetVector3Macro(Origin,float);
00118 vtkGetVectorMacro(Origin,float,3);
00120
00122
00128 vtkSetClampMacro(TextureStyle,int,VTK_TEXTURE_STYLE_FIT_IMAGE,
00129 VTK_TEXTURE_STYLE_PROPORTIONAL);
00130 vtkGetMacro(TextureStyle,int);
00131 void SetTextureStyleToFitImage()
00132 {this->SetTextureStyle(VTK_TEXTURE_STYLE_FIT_IMAGE);}
00133 void SetTextureStyleToProportional()
00134 {this->SetTextureStyle(VTK_TEXTURE_STYLE_PROPORTIONAL);}
00136
00138
00140 vtkSetVector2Macro(TextureDimensions,int);
00141 vtkGetVector2Macro(TextureDimensions,int);
00143
00145
00146 vtkSetVector2Macro(ShoulderTextureCoordinate,float);
00147 vtkGetVector2Macro(ShoulderTextureCoordinate,float);
00149
00151
00155 vtkSetMacro(TwoSided,int);
00156 vtkGetMacro(TwoSided,int);
00157 vtkBooleanMacro(TwoSided,int);
00159
00160 protected:
00161 vtkButtonSource();
00162 ~vtkButtonSource() {}
00163
00164 void Execute();
00165
00166 float Width;
00167 float Height;
00168 float Depth;
00169
00170 int CircumferentialResolution;
00171 int TextureResolution;
00172 int ShoulderResolution;
00173
00174 float Origin[3];
00175 float ShoulderTextureCoordinate[2];
00176
00177 float RadialRatio;
00178 int TextureStyle;
00179 int TextureDimensions[2];
00180 int TwoSided;
00181
00182 private:
00183 vtkButtonSource(const vtkButtonSource&);
00184 void operator=(const vtkButtonSource&);
00185
00186
00187 float A;
00188 float A2;
00189 float B;
00190 float B2;
00191 float C;
00192 float C2;
00193
00194 float ComputeDepth(int inTextureRegion, float x, float y, float n[3]);
00195 void InterpolateCurve(int inTextureRegion, vtkPoints *newPts, int numPts,
00196 vtkFloatArray *normals, vtkFloatArray *tcoords,
00197 int res, int c1StartPoint,int c1Incr,
00198 int c2StartPoint,int s2Incr, int startPoint,int incr);
00199 void CreatePolygons(vtkCellArray *newPolys, int num, int res, int startIdx);
00200 void IntersectEllipseWithLine(float a2, float b2, float dX, float dY,
00201 float& xe, float& ye);
00202
00203
00204 };
00205
00206 #endif
00207
00208