00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00048 #ifndef __vtkSphereRepresentation_h
00049 #define __vtkSphereRepresentation_h
00050
00051 #include "vtkWidgetRepresentation.h"
00052 #include "vtkSphereSource.h"
00053
00054 class vtkActor;
00055 class vtkPolyDataMapper;
00056 class vtkSphere;
00057 class vtkSphereSource;
00058 class vtkCellPicker;
00059 class vtkProperty;
00060 class vtkPolyData;
00061 class vtkPoints;
00062 class vtkPolyDataAlgorithm;
00063 class vtkTransform;
00064 class vtkDoubleArray;
00065 class vtkMatrix4x4;
00066 class vtkTextMapper;
00067 class vtkActor2D;
00068 class vtkTextProperty;
00069 class vtkLineSource;
00070
00071 #define VTK_SPHERE_OFF 0
00072 #define VTK_SPHERE_WIREFRAME 1
00073 #define VTK_SPHERE_SURFACE 2
00074
00075 class VTK_WIDGETS_EXPORT vtkSphereRepresentation : public vtkWidgetRepresentation
00076 {
00077 public:
00079 static vtkSphereRepresentation *New();
00080
00082
00084 vtkTypeRevisionMacro(vtkSphereRepresentation,vtkWidgetRepresentation);
00085 void PrintSelf(ostream& os, vtkIndent indent);
00087
00088
00089 enum {Outside=0,MovingHandle,OnSphere,Translating,Scaling};
00090
00091
00093
00095 vtkSetClampMacro(Representation,int,VTK_SPHERE_OFF,VTK_SPHERE_SURFACE);
00096 vtkGetMacro(Representation,int);
00097 void SetRepresentationToOff()
00098 { this->SetRepresentation(VTK_SPHERE_OFF);}
00099 void SetRepresentationToWireframe()
00100 { this->SetRepresentation(VTK_SPHERE_WIREFRAME);}
00101 void SetRepresentationToSurface()
00102 { this->SetRepresentation(VTK_SPHERE_SURFACE);}
00104
00106
00107 void SetThetaResolution(int r)
00108 { this->SphereSource->SetThetaResolution(r); }
00109 int GetThetaResolution()
00110 { return this->SphereSource->GetThetaResolution(); }
00112
00114
00115 void SetPhiResolution(int r)
00116 { this->SphereSource->SetPhiResolution(r); }
00117 int GetPhiResolution()
00118 { return this->SphereSource->GetPhiResolution(); }
00120
00122
00125 void SetCenter(double c[3]);
00126 void SetCenter(double x, double y, double z)
00127 {double c[3]; c[0]=x; c[1]=y; c[2]=z; this->SetCenter(c);}
00128 double* GetCenter()
00129 {return this->SphereSource->GetCenter();}
00130 void GetCenter(double xyz[3])
00131 {this->SphereSource->GetCenter(xyz);}
00133
00135
00137 void SetRadius(double r);
00138 double GetRadius()
00139 { return this->SphereSource->GetRadius(); }
00141
00143
00147 vtkSetMacro(HandleVisibility,int);
00148 vtkGetMacro(HandleVisibility,int);
00149 vtkBooleanMacro(HandleVisibility,int);
00151
00153
00155 void SetHandlePosition(double handle[3]);
00156 void SetHandlePosition(double x, double y, double z)
00157 {double p[3]; p[0]=x; p[1]=y; p[2]=z; this->SetHandlePosition(p);}
00158 vtkGetVector3Macro(HandlePosition,double);
00160
00162
00165 void SetHandleDirection(double dir[3]);
00166 void SetHandleDirection(double dx, double dy, double dz)
00167 {double d[3]; d[0]=dx; d[1]=dy; d[2]=dz; this->SetHandleDirection(d);}
00168 vtkGetVector3Macro(HandleDirection,double);
00170
00172
00177 vtkSetMacro(HandleText,int);
00178 vtkGetMacro(HandleText,int);
00179 vtkBooleanMacro(HandleText,int);
00181
00183
00185 vtkSetMacro(RadialLine,int);
00186 vtkGetMacro(RadialLine,int);
00187 vtkBooleanMacro(RadialLine,int);
00189
00196 void GetPolyData(vtkPolyData *pd);
00197
00202 void GetSphere(vtkSphere *sphere);
00203
00205
00207 vtkGetObjectMacro(SphereProperty,vtkProperty);
00208 vtkGetObjectMacro(SelectedSphereProperty,vtkProperty);
00210
00212
00215 vtkGetObjectMacro(HandleProperty,vtkProperty);
00216 vtkGetObjectMacro(SelectedHandleProperty,vtkProperty);
00218
00220
00222 vtkGetObjectMacro(HandleTextProperty,vtkTextProperty);
00224
00226
00228 vtkGetObjectMacro(RadialLineProperty,vtkProperty);
00230
00238 void SetInteractionState(int state);
00239
00241
00244 virtual void PlaceWidget(double bounds[6]);
00245 virtual void PlaceWidget(double center[3], double handlePosition[3]);
00246 virtual void BuildRepresentation();
00247 virtual int ComputeInteractionState(int X, int Y, int modify=0);
00248 virtual void StartWidgetInteraction(double e[2]);
00249 virtual void WidgetInteraction(double e[2]);
00250 virtual double *GetBounds();
00252
00254
00255 virtual void ReleaseGraphicsResources(vtkWindow*);
00256 virtual int RenderOpaqueGeometry(vtkViewport*);
00257 virtual int RenderTranslucentPolygonalGeometry(vtkViewport*);
00258 virtual int RenderOverlay(vtkViewport*);
00259 virtual int HasTranslucentPolygonalGeometry();
00261
00262 protected:
00263 vtkSphereRepresentation();
00264 ~vtkSphereRepresentation();
00265
00266
00267 double LastEventPosition[3];
00268
00269
00270 vtkActor *SphereActor;
00271 vtkPolyDataMapper *SphereMapper;
00272 vtkSphereSource *SphereSource;
00273 void HighlightSphere(int highlight);
00274
00275
00276 int Representation;
00277
00278
00279 vtkCellPicker *HandlePicker;
00280 vtkCellPicker *SpherePicker;
00281 double LastPickPosition[3];
00282
00283
00284 void Translate(double *p1, double *p2);
00285 void Scale(double *p1, double *p2, int X, int Y);
00286 void PlaceHandle(double *center, double radius);
00287 virtual void SizeHandles();
00288
00289
00290
00291 vtkProperty *SphereProperty;
00292 vtkProperty *SelectedSphereProperty;
00293 vtkProperty *HandleProperty;
00294 vtkProperty *SelectedHandleProperty;
00295 void CreateDefaultProperties();
00296
00297
00298 vtkActor *HandleActor;
00299 vtkPolyDataMapper *HandleMapper;
00300 vtkSphereSource *HandleSource;
00301 void HighlightHandle(int);
00302 int HandleVisibility;
00303 double HandleDirection[3];
00304 double HandlePosition[3];
00305
00306
00307 int HandleText;
00308 vtkTextProperty *HandleTextProperty;
00309 vtkTextMapper *HandleTextMapper;
00310 vtkActor2D *HandleTextActor;
00311
00312
00313 int RadialLine;
00314 vtkProperty *RadialLineProperty;
00315 vtkLineSource *RadialLineSource;
00316 vtkPolyDataMapper *RadialLineMapper;
00317 vtkActor *RadialLineActor;
00318
00319 private:
00320 vtkSphereRepresentation(const vtkSphereRepresentation&);
00321 void operator=(const vtkSphereRepresentation&);
00322 };
00323
00324 #endif