00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00066
#ifndef __vtkSphereWidget_h
00067
#define __vtkSphereWidget_h
00068
00069
#include "vtk3DWidget.h"
00070
#include "vtkSphereSource.h"
00071
00072
class vtkActor;
00073
class vtkPolyDataMapper;
00074
class vtkPoints;
00075
class vtkPolyData;
00076
class vtkSphereSource;
00077
class vtkSphere;
00078
class vtkCellPicker;
00079
class vtkProperty;
00080
00081 #define VTK_SPHERE_OFF 0
00082 #define VTK_SPHERE_WIREFRAME 1
00083 #define VTK_SPHERE_SURFACE 2
00084
00085 class VTK_HYBRID_EXPORT vtkSphereWidget :
public vtk3DWidget
00086 {
00087
public:
00089
static vtkSphereWidget *
New();
00090
00091 vtkTypeRevisionMacro(vtkSphereWidget,
vtk3DWidget);
00092
void PrintSelf(ostream& os,
vtkIndent indent);
00093
00095
00096
virtual void SetEnabled(
int);
00097
virtual void PlaceWidget(
float bounds[6]);
00098 void PlaceWidget()
00099 {this->Superclass::PlaceWidget();}
00100 void PlaceWidget(
float xmin,
float xmax,
float ymin,
float ymax,
00101
float zmin,
float zmax)
00102 {this->Superclass::PlaceWidget(xmin,xmax,ymin,ymax,zmin,zmax);}
00104
00106
00108 vtkSetClampMacro(Representation,
int,VTK_SPHERE_OFF,VTK_SPHERE_SURFACE);
00109 vtkGetMacro(Representation,
int);
00110 void SetRepresentationToOff()
00111 { this->SetRepresentation(
VTK_SPHERE_OFF);}
00112 void SetRepresentationToWireframe()
00113 { this->SetRepresentation(
VTK_SPHERE_WIREFRAME);}
00114 void SetRepresentationToSurface()
00115 { this->SetRepresentation(
VTK_SPHERE_SURFACE);}
00117
00119
00120 void SetThetaResolution(
int r)
00121 { this->SphereSource->SetThetaResolution(r); }
00122 int GetThetaResolution()
00123 {
return this->SphereSource->GetThetaResolution(); }
00125
00127
00128 void SetPhiResolution(
int r)
00129 { this->SphereSource->SetPhiResolution(r); }
00130 int GetPhiResolution()
00131 {
return this->SphereSource->GetPhiResolution(); }
00133
00135
00136 void SetRadius(
float r)
00137 {
00138
if ( r <= 0 )
00139 {
00140 r = .00001;
00141 }
00142 this->SphereSource->SetRadius(r);
00143 }
00144 float GetRadius()
00145 {
return this->SphereSource->GetRadius(); }
00147
00149
00150 void SetCenter(
float x,
float y,
float z)
00151 {
00152 this->SphereSource->SetCenter(x,y,z);
00153 }
00154 void SetCenter(
float x[3])
00155 {
00156 this->SetCenter(x[0], x[1], x[2]);
00157 }
00158 float* GetCenter()
00159 {
return this->SphereSource->GetCenter();}
00160 void GetCenter(
float xyz[3])
00161 {this->SphereSource->GetCenter(xyz);}
00163
00165
00167 vtkSetMacro(Translation,
int);
00168 vtkGetMacro(Translation,
int);
00169 vtkBooleanMacro(Translation,
int);
00170 vtkSetMacro(Scale,
int);
00171 vtkGetMacro(Scale,
int);
00172 vtkBooleanMacro(Scale,
int);
00174
00176
00180 vtkSetMacro(HandleVisibility,
int);
00181 vtkGetMacro(HandleVisibility,
int);
00182 vtkBooleanMacro(HandleVisibility,
int);
00184
00186
00188 vtkSetVector3Macro(HandleDirection,
float);
00189 vtkGetVector3Macro(HandleDirection,
float);
00191
00193
00194 vtkGetVector3Macro(HandlePosition,
float);
00196
00203
void GetPolyData(
vtkPolyData *pd);
00204
00209
void GetSphere(
vtkSphere *sphere);
00210
00212
00214 vtkGetObjectMacro(SphereProperty,
vtkProperty);
00215 vtkGetObjectMacro(SelectedSphereProperty,
vtkProperty);
00217
00219
00222 vtkGetObjectMacro(HandleProperty,
vtkProperty);
00223 vtkGetObjectMacro(SelectedHandleProperty,
vtkProperty);
00225
00226
protected:
00227 vtkSphereWidget();
00228 ~vtkSphereWidget();
00229
00230
00231 int State;
00232 enum WidgetState
00233 {
00234 Start=0,
00235 Moving,
00236 Scaling,
00237 Positioning,
00238 Outside
00239 };
00240
00241
00242
00243
static void ProcessEvents(
vtkObject* object,
00244
unsigned long event,
00245
void* clientdata,
00246
void* calldata);
00247
00248
00249
void OnLeftButtonDown();
00250
void OnLeftButtonUp();
00251
void OnRightButtonDown();
00252
void OnRightButtonUp();
00253
void OnMouseMove();
00254
00255
00256 vtkActor *SphereActor;
00257 vtkPolyDataMapper *SphereMapper;
00258 vtkSphereSource *SphereSource;
00259
void HighlightSphere(
int highlight);
00260
void SelectRepresentation();
00261
00262
00263 int Representation;
00264
00265
00266 vtkCellPicker *Picker;
00267
00268
00269 int Translation;
00270 int Scale;
00271
void Translate(
double *p1,
double *p2);
00272
void ScaleSphere(
double *p1,
double *p2,
int X,
int Y);
00273
void MoveHandle(
double *p1,
double *p2,
int X,
int Y);
00274
void PlaceHandle(
float *center,
float radius);
00275
00276
00277
00278 vtkProperty *SphereProperty;
00279 vtkProperty *SelectedSphereProperty;
00280 vtkProperty *HandleProperty;
00281 vtkProperty *SelectedHandleProperty;
00282
void CreateDefaultProperties();
00283
00284
00285 vtkActor *HandleActor;
00286 vtkPolyDataMapper *HandleMapper;
00287 vtkSphereSource *HandleSource;
00288
void HighlightHandle(
int);
00289 int HandleVisibility;
00290 float HandleDirection[3];
00291 float HandlePosition[3];
00292
virtual void SizeHandles();
00293
00294
private:
00295 vtkSphereWidget(
const vtkSphereWidget&);
00296
void operator=(
const vtkSphereWidget&);
00297 };
00298
00299
#endif