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