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_HYBRID_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 void SetOrigin(double x, double y, double z);
00120 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
00177 void GetPolyData(vtkPolyData *pd);
00178
00181 vtkPolyDataSource* GetPolyDataSource();
00182
00187 void GetPlane(vtkPlane *plane);
00188
00192 void UpdatePlacement(void);
00193
00195
00196 vtkGetObjectMacro(NormalProperty,vtkProperty);
00197 vtkGetObjectMacro(SelectedNormalProperty,vtkProperty);
00199
00201
00203 vtkGetObjectMacro(PlaneProperty,vtkProperty);
00204 vtkGetObjectMacro(SelectedPlaneProperty,vtkProperty);
00206
00208
00209 vtkGetObjectMacro(OutlineProperty,vtkProperty);
00210 vtkGetObjectMacro(SelectedOutlineProperty,vtkProperty);
00212
00214
00216 vtkGetObjectMacro(EdgesProperty,vtkProperty);
00218
00219 protected:
00220 vtkImplicitPlaneWidget();
00221 ~vtkImplicitPlaneWidget();
00222
00223
00224 int State;
00225 enum WidgetState
00226 {
00227 Start=0,
00228 MovingPlane,
00229 MovingOutline,
00230 MovingOrigin,
00231 Scaling,
00232 Pushing,
00233 Rotating,
00234 Outside
00235 };
00236
00237
00238
00239 static void ProcessEvents(vtkObject* object, unsigned long event,
00240 void* clientdata, void* calldata);
00241
00242
00243 void OnLeftButtonDown();
00244 void OnLeftButtonUp();
00245 void OnMiddleButtonDown();
00246 void OnMiddleButtonUp();
00247 void OnRightButtonDown();
00248 void OnRightButtonUp();
00249 void OnMouseMove();
00250
00251
00252 int NormalToXAxis;
00253 int NormalToYAxis;
00254 int NormalToZAxis;
00255 void UpdateRepresentation();
00256
00257
00258 vtkPlane *Plane;
00259
00260
00261 vtkImageData *Box;
00262 vtkOutlineFilter *Outline;
00263 vtkPolyDataMapper *OutlineMapper;
00264 vtkActor *OutlineActor;
00265 void HighlightOutline(int highlight);
00266 int OutlineTranslation;
00267
00268
00269 vtkCutter *Cutter;
00270 vtkPolyDataMapper *CutMapper;
00271 vtkActor *CutActor;
00272 int DrawPlane;
00273 void HighlightPlane(int highlight);
00274
00275
00276 vtkFeatureEdges *Edges;
00277 vtkTubeFilter *EdgesTuber;
00278 vtkPolyDataMapper *EdgesMapper;
00279 vtkActor *EdgesActor;
00280 int Tubing;
00281
00282
00283 vtkConeSource *ConeSource;
00284 vtkPolyDataMapper *ConeMapper;
00285 vtkActor *ConeActor;
00286 void HighlightNormal(int highlight);
00287
00288
00289 vtkLineSource *LineSource;
00290 vtkPolyDataMapper *LineMapper;
00291 vtkActor *LineActor;
00292
00293
00294 vtkConeSource *ConeSource2;
00295 vtkPolyDataMapper *ConeMapper2;
00296 vtkActor *ConeActor2;
00297
00298
00299 vtkLineSource *LineSource2;
00300 vtkPolyDataMapper *LineMapper2;
00301 vtkActor *LineActor2;
00302
00303
00304 vtkSphereSource *Sphere;
00305 vtkPolyDataMapper *SphereMapper;
00306 vtkActor *SphereActor;
00307
00308
00309 vtkCellPicker *Picker;
00310
00311
00312 vtkTransform *Transform;
00313
00314
00315 void ConstrainOrigin(double x[3]);
00316 void Rotate(int X, int Y, double *p1, double *p2, double *vpn);
00317 void TranslatePlane(double *p1, double *p2);
00318 void TranslateOutline(double *p1, double *p2);
00319 void TranslateOrigin(double *p1, double *p2);
00320 void Push(double *p1, double *p2);
00321 void Scale(double *p1, double *p2, int X, int Y);
00322
00323
00324
00325 vtkProperty *NormalProperty;
00326 vtkProperty *SelectedNormalProperty;
00327 vtkProperty *PlaneProperty;
00328 vtkProperty *SelectedPlaneProperty;
00329 vtkProperty *OutlineProperty;
00330 vtkProperty *SelectedOutlineProperty;
00331 vtkProperty *EdgesProperty;
00332 void CreateDefaultProperties();
00333
00334 void GeneratePlane();
00335 virtual void SizeHandles();
00336
00337 private:
00338 vtkImplicitPlaneWidget(const vtkImplicitPlaneWidget&);
00339 void operator=(const vtkImplicitPlaneWidget&);
00340 };
00341
00342 #endif