00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00073 #ifndef __vtkImplicitPlaneWidget_h
00074 #define __vtkImplicitPlaneWidget_h
00075
00076 #include "vtkPolyDataSourceWidget.h"
00077
00078 class vtkActor;
00079 class vtkPolyDataMapper;
00080 class vtkCellPicker;
00081 class vtkConeSource;
00082 class vtkLineSource;
00083 class vtkSphereSource;
00084 class vtkTubeFilter;
00085 class vtkPlane;
00086 class vtkCutter;
00087 class vtkProperty;
00088 class vtkImageData;
00089 class vtkOutlineFilter;
00090 class vtkFeatureEdges;
00091 class vtkPolyData;
00092 class vtkTransform;
00093
00094 class VTK_WIDGETS_EXPORT vtkImplicitPlaneWidget : public vtkPolyDataSourceWidget
00095 {
00096 public:
00098 static vtkImplicitPlaneWidget *New();
00099
00100 vtkTypeRevisionMacro(vtkImplicitPlaneWidget,vtkPolyDataSourceWidget);
00101 void PrintSelf(ostream& os, vtkIndent indent);
00102
00104
00105 virtual void SetEnabled(int);
00106 virtual void PlaceWidget(double bounds[6]);
00107 void PlaceWidget()
00108 {this->Superclass::PlaceWidget();}
00109 void PlaceWidget(double xmin, double xmax, double ymin, double ymax,
00110 double zmin, double zmax)
00111 {this->Superclass::PlaceWidget(xmin,xmax,ymin,ymax,zmin,zmax);}
00113
00115
00116 virtual void SetOrigin(double x, double y, double z);
00117 virtual void SetOrigin(double x[3]);
00118 double* GetOrigin();
00119 void GetOrigin(double xyz[3]);
00121
00123
00124 void SetNormal(double x, double y, double z);
00125 void SetNormal(double x[3]);
00126 double* GetNormal();
00127 void GetNormal(double xyz[3]);
00129
00131
00135 void SetNormalToXAxis(int);
00136 vtkGetMacro(NormalToXAxis,int);
00137 vtkBooleanMacro(NormalToXAxis,int);
00138 void SetNormalToYAxis(int);
00139 vtkGetMacro(NormalToYAxis,int);
00140 vtkBooleanMacro(NormalToYAxis,int);
00141 void SetNormalToZAxis(int);
00142 vtkGetMacro(NormalToZAxis,int);
00143 vtkBooleanMacro(NormalToZAxis,int);
00145
00147
00149 vtkSetMacro(Tubing,int);
00150 vtkGetMacro(Tubing,int);
00151 vtkBooleanMacro(Tubing,int);
00153
00155
00159 void SetDrawPlane(int plane);
00160 vtkGetMacro(DrawPlane,int);
00161 vtkBooleanMacro(DrawPlane,int);
00163
00165
00167 vtkSetMacro(OutlineTranslation,int);
00168 vtkGetMacro(OutlineTranslation,int);
00169 vtkBooleanMacro(OutlineTranslation,int);
00171
00173
00175 vtkSetMacro(OutsideBounds,int);
00176 vtkGetMacro(OutsideBounds,int);
00177 vtkBooleanMacro(OutsideBounds,int);
00179
00181
00182 vtkSetMacro(ScaleEnabled,int);
00183 vtkGetMacro(ScaleEnabled,int);
00184 vtkBooleanMacro(ScaleEnabled,int);
00186
00188
00190 vtkSetMacro(OriginTranslation,int);
00191 vtkGetMacro(OriginTranslation,int);
00192 vtkBooleanMacro(OriginTranslation,int);
00194
00196
00198 vtkSetClampMacro(DiagonalRatio,double,0,2);
00199 vtkGetMacro(DiagonalRatio,double);
00201
00204 void GetPolyData(vtkPolyData *pd);
00205
00208 vtkPolyDataAlgorithm* GetPolyDataAlgorithm();
00209
00214 void GetPlane(vtkPlane *plane);
00215
00219 void UpdatePlacement();
00220
00222 virtual void SizeHandles();
00223
00225
00226 vtkGetObjectMacro(NormalProperty,vtkProperty);
00227 vtkGetObjectMacro(SelectedNormalProperty,vtkProperty);
00229
00231
00233 vtkGetObjectMacro(PlaneProperty,vtkProperty);
00234 vtkGetObjectMacro(SelectedPlaneProperty,vtkProperty);
00236
00238
00239 vtkGetObjectMacro(OutlineProperty,vtkProperty);
00240 vtkGetObjectMacro(SelectedOutlineProperty,vtkProperty);
00242
00244
00246 vtkGetObjectMacro(EdgesProperty,vtkProperty);
00248
00249 protected:
00250 vtkImplicitPlaneWidget();
00251 ~vtkImplicitPlaneWidget();
00252
00253
00254 int State;
00255 enum WidgetState
00256 {
00257 Start=0,
00258 MovingPlane,
00259 MovingOutline,
00260 MovingOrigin,
00261 Scaling,
00262 Pushing,
00263 Rotating,
00264 Outside
00265 };
00266
00267
00268
00269 static void ProcessEvents(vtkObject* object, unsigned long event,
00270 void* clientdata, void* calldata);
00271
00272
00273 void OnLeftButtonDown();
00274 void OnLeftButtonUp();
00275 void OnMiddleButtonDown();
00276 void OnMiddleButtonUp();
00277 void OnRightButtonDown();
00278 void OnRightButtonUp();
00279 void OnMouseMove();
00280
00281
00282 int NormalToXAxis;
00283 int NormalToYAxis;
00284 int NormalToZAxis;
00285 void UpdateRepresentation();
00286
00287
00288 vtkPlane *Plane;
00289
00290
00291 vtkImageData *Box;
00292 vtkOutlineFilter *Outline;
00293 vtkPolyDataMapper *OutlineMapper;
00294 vtkActor *OutlineActor;
00295 void HighlightOutline(int highlight);
00296 int OutlineTranslation;
00297 int ScaleEnabled;
00298 int OutsideBounds;
00299
00300
00301 vtkCutter *Cutter;
00302 vtkPolyDataMapper *CutMapper;
00303 vtkActor *CutActor;
00304 int DrawPlane;
00305 virtual void HighlightPlane(int highlight);
00306
00307
00308 vtkFeatureEdges *Edges;
00309 vtkTubeFilter *EdgesTuber;
00310 vtkPolyDataMapper *EdgesMapper;
00311 vtkActor *EdgesActor;
00312 int Tubing;
00313
00314
00315 double DiagonalRatio;
00316
00317
00318 vtkConeSource *ConeSource;
00319 vtkPolyDataMapper *ConeMapper;
00320 vtkActor *ConeActor;
00321 void HighlightNormal(int highlight);
00322
00323
00324 vtkLineSource *LineSource;
00325 vtkPolyDataMapper *LineMapper;
00326 vtkActor *LineActor;
00327
00328
00329 vtkConeSource *ConeSource2;
00330 vtkPolyDataMapper *ConeMapper2;
00331 vtkActor *ConeActor2;
00332
00333
00334 vtkLineSource *LineSource2;
00335 vtkPolyDataMapper *LineMapper2;
00336 vtkActor *LineActor2;
00337
00338
00339 vtkSphereSource *Sphere;
00340 vtkPolyDataMapper *SphereMapper;
00341 vtkActor *SphereActor;
00342 int OriginTranslation;
00343
00344
00345 vtkCellPicker *Picker;
00346
00347
00348 vtkTransform *Transform;
00349
00350
00351 void ConstrainOrigin(double x[3]);
00352 void Rotate(int X, int Y, double *p1, double *p2, double *vpn);
00353 void TranslatePlane(double *p1, double *p2);
00354 void TranslateOutline(double *p1, double *p2);
00355 void TranslateOrigin(double *p1, double *p2);
00356 void Push(double *p1, double *p2);
00357 void Scale(double *p1, double *p2, int X, int Y);
00358
00359
00360
00361 vtkProperty *NormalProperty;
00362 vtkProperty *SelectedNormalProperty;
00363 vtkProperty *PlaneProperty;
00364 vtkProperty *SelectedPlaneProperty;
00365 vtkProperty *OutlineProperty;
00366 vtkProperty *SelectedOutlineProperty;
00367 vtkProperty *EdgesProperty;
00368 void CreateDefaultProperties();
00369
00370 void GeneratePlane();
00371
00372 private:
00373 vtkImplicitPlaneWidget(const vtkImplicitPlaneWidget&);
00374 void operator=(const vtkImplicitPlaneWidget&);
00375 };
00376
00377 #endif