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