00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00089
#ifndef __vtkPlaneWidget_h
00090
#define __vtkPlaneWidget_h
00091
00092
#include "vtkPolyDataSourceWidget.h"
00093
00094
class vtkActor;
00095
class vtkCellPicker;
00096
class vtkConeSource;
00097
class vtkLineSource;
00098
class vtkPlaneSource;
00099
class vtkPoints;
00100
class vtkPolyData;
00101
class vtkPolyDataMapper;
00102
class vtkProp;
00103
class vtkProperty;
00104
class vtkSphereSource;
00105
class vtkTransform;
00106
class vtkPlane;
00107
00108 #define VTK_PLANE_OFF 0
00109 #define VTK_PLANE_OUTLINE 1
00110 #define VTK_PLANE_WIREFRAME 2
00111 #define VTK_PLANE_SURFACE 3
00112
00113 class VTK_HYBRID_EXPORT vtkPlaneWidget :
public vtkPolyDataSourceWidget
00114 {
00115
public:
00117
static vtkPlaneWidget *
New();
00118
00119 vtkTypeRevisionMacro(vtkPlaneWidget,
vtkPolyDataSourceWidget);
00120
void PrintSelf(ostream& os,
vtkIndent indent);
00121
00123
00124
virtual void SetEnabled(
int);
00125
virtual void PlaceWidget(
float bounds[6]);
00126 void PlaceWidget()
00127 {this->Superclass::PlaceWidget();}
00129
00131
00132
void SetResolution(
int r);
00133
int GetResolution();
00135
00137
00138
void SetOrigin(
float x,
float y,
float z);
00139
void SetOrigin(
float x[3]);
00140
float* GetOrigin();
00141
void GetOrigin(
float xyz[3]);
00143
00145
00147
void SetPoint1(
float x,
float y,
float z);
00148
void SetPoint1(
float x[3]);
00149
float* GetPoint1();
00150
void GetPoint1(
float xyz[3]);
00152
00154
00156
void SetPoint2(
float x,
float y,
float z);
00157
void SetPoint2(
float x[3]);
00158
float* GetPoint2();
00159
void GetPoint2(
float xyz[3]);
00161
00163
00164
void SetCenter(
float x,
float y,
float z);
00165
void SetCenter(
float x[3]);
00166
float* GetCenter();
00167
void GetCenter(
float xyz[3]);
00169
00171
00172
void SetNormal(
float x,
float y,
float z);
00173
void SetNormal(
float x[3]);
00174
float* GetNormal();
00175
void GetNormal(
float xyz[3]);
00177
00179
00184 vtkSetClampMacro(Representation,
int,VTK_PLANE_OFF,VTK_PLANE_SURFACE);
00185 vtkGetMacro(Representation,
int);
00186 void SetRepresentationToOff()
00187 {this->SetRepresentation(
VTK_PLANE_OFF);}
00188 void SetRepresentationToOutline()
00189 {this->SetRepresentation(
VTK_PLANE_OUTLINE);}
00190 void SetRepresentationToWireframe()
00191 {this->SetRepresentation(
VTK_PLANE_WIREFRAME);}
00192 void SetRepresentationToSurface()
00193 {this->SetRepresentation(
VTK_PLANE_SURFACE);}
00195
00197
00201 vtkSetMacro(NormalToXAxis,
int);
00202 vtkGetMacro(NormalToXAxis,
int);
00203 vtkBooleanMacro(NormalToXAxis,
int);
00204 vtkSetMacro(NormalToYAxis,
int);
00205 vtkGetMacro(NormalToYAxis,
int);
00206 vtkBooleanMacro(NormalToYAxis,
int);
00207 vtkSetMacro(NormalToZAxis,
int);
00208 vtkGetMacro(NormalToZAxis,
int);
00209 vtkBooleanMacro(NormalToZAxis,
int);
00211
00219
void GetPolyData(
vtkPolyData *pd);
00220
00226
void GetPlane(
vtkPlane *plane);
00227
00233
vtkPolyDataSource*
GetPolyDataSource();
00234
00237
void UpdatePlacement(
void);
00238
00240
00243 vtkGetObjectMacro(HandleProperty,
vtkProperty);
00244 vtkGetObjectMacro(SelectedHandleProperty,
vtkProperty);
00246
00248
00250
virtual void SetPlaneProperty(
vtkProperty*);
00251 vtkGetObjectMacro(PlaneProperty,
vtkProperty);
00252 vtkGetObjectMacro(SelectedPlaneProperty,
vtkProperty);
00254
00255
protected:
00256 vtkPlaneWidget();
00257 ~vtkPlaneWidget();
00258
00259
00260 int State;
00261 enum WidgetState
00262 {
00263 Start=0,
00264 Moving,
00265 Scaling,
00266 Pushing,
00267 Rotating,
00268 Outside
00269 };
00270
00271
00272
00273
static void ProcessEvents(
vtkObject* object,
00274
unsigned long event,
00275
void* clientdata,
00276
void* calldata);
00277
00278
00279
void OnLeftButtonDown();
00280
void OnLeftButtonUp();
00281
void OnMiddleButtonDown();
00282
void OnMiddleButtonUp();
00283
void OnRightButtonDown();
00284
void OnRightButtonUp();
00285
void OnMouseMove();
00286
00287
00288 int NormalToXAxis;
00289 int NormalToYAxis;
00290 int NormalToZAxis;
00291 int Representation;
00292
void SelectRepresentation();
00293
00294
00295 vtkActor *PlaneActor;
00296 vtkPolyDataMapper *PlaneMapper;
00297 vtkPlaneSource *PlaneSource;
00298 vtkPolyData *PlaneOutline;
00299
void HighlightPlane(
int highlight);
00300
00301
00302 vtkActor **Handle;
00303 vtkPolyDataMapper **HandleMapper;
00304 vtkSphereSource **HandleGeometry;
00305
void PositionHandles();
00306
void HandlesOn(
double length);
00307
void HandlesOff();
00308
int HighlightHandle(
vtkProp *prop);
00309
virtual void SizeHandles();
00310
00311
00312 vtkActor *ConeActor;
00313 vtkPolyDataMapper *ConeMapper;
00314 vtkConeSource *ConeSource;
00315
void HighlightNormal(
int highlight);
00316
00317
00318 vtkActor *LineActor;
00319 vtkPolyDataMapper *LineMapper;
00320 vtkLineSource *LineSource;
00321
00322
00323 vtkActor *ConeActor2;
00324 vtkPolyDataMapper *ConeMapper2;
00325 vtkConeSource *ConeSource2;
00326
00327
00328 vtkActor *LineActor2;
00329 vtkPolyDataMapper *LineMapper2;
00330 vtkLineSource *LineSource2;
00331
00332
00333 vtkCellPicker *HandlePicker;
00334 vtkCellPicker *PlanePicker;
00335 vtkActor *CurrentHandle;
00336
00337
00338
void MoveOrigin(
double *p1,
double *p2);
00339
void MovePoint1(
double *p1,
double *p2);
00340
void MovePoint2(
double *p1,
double *p2);
00341
void MovePoint3(
double *p1,
double *p2);
00342
void Rotate(
int X,
int Y,
double *p1,
double *p2,
double *vpn);
00343
void Scale(
double *p1,
double *p2,
int X,
int Y);
00344
void Translate(
double *p1,
double *p2);
00345
void Push(
double *p1,
double *p2);
00346
00347
00348 float Normal[3];
00349
00350
00351 vtkTransform *Transform;
00352
00353
00354
00355 vtkProperty *HandleProperty;
00356 vtkProperty *SelectedHandleProperty;
00357 vtkProperty *PlaneProperty;
00358 vtkProperty *SelectedPlaneProperty;
00359
void CreateDefaultProperties();
00360
00361
void GeneratePlane();
00362
00363
private:
00364 vtkPlaneWidget(
const vtkPlaneWidget&);
00365
void operator=(
const vtkPlaneWidget&);
00366 };
00367
00368
#endif