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