Main Page Class Hierarchy Alphabetical List Compound List File List Compound Members File Members Related Pages

# Hybrid/vtkPlaneWidget.h

Go to the documentation of this file.

    00001 /*=========================================================================
    00002
    00003   Program:   Visualization Toolkit
    00004   Module:    $RCSfile: vtkPlaneWidget.h,v $
    00005   Language:  C++
    00006
    00007   Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen
    00008   All rights reserved.
    00009   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
    00010
    00011      This software is distributed WITHOUT ANY WARRANTY; without even
    00012      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
    00013      PURPOSE.  See the above copyright notice for more information.
    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 //BTX - manage the state of the widget
    00272   int State;
    00273   enum WidgetState
    00274   {
    00275     Start=0,
    00276     Moving,
    00277     Scaling,
    00278     Pushing,
    00279     Rotating,
    00280     Outside
    00281   };
    00282 //ETX
    00283
    00284   //handles the events
    00285   static void ProcessEvents(vtkObject* object,
    00286                             unsigned long event,
    00287                             void* clientdata,
    00288                             void* calldata);
    00289
    00290   // ProcessEvents() dispatches to these methods.
    00291   void OnLeftButtonDown();
    00292   void OnLeftButtonUp();
    00293   void OnMiddleButtonDown();
    00294   void OnMiddleButtonUp();
    00295   void OnRightButtonDown();
    00296   void OnRightButtonUp();
    00297   void OnMouseMove();
    00298
    00299   // controlling ivars
    00300   int NormalToXAxis;
    00301   int NormalToYAxis;
    00302   int NormalToZAxis;
    00303   int Representation;
    00304   void SelectRepresentation();
    00305
    00306   // the plane
    00307   vtkActor          *PlaneActor;
    00308   vtkPolyDataMapper *PlaneMapper;
    00309   vtkPlaneSource    *PlaneSource;
    00310   vtkPolyData       *PlaneOutline;
    00311   void HighlightPlane(int highlight);
    00312
    00313   // glyphs representing hot spots (e.g., handles)
    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); //returns cell id
    00321   virtual void SizeHandles();
    00322
    00323   // the normal cone
    00324   vtkActor          *ConeActor;
    00325   vtkPolyDataMapper *ConeMapper;
    00326   vtkConeSource     *ConeSource;
    00327   void HighlightNormal(int highlight);
    00328
    00329   // the normal line
    00330   vtkActor          *LineActor;
    00331   vtkPolyDataMapper *LineMapper;
    00332   vtkLineSource     *LineSource;
    00333
    00334   // the normal cone
    00335   vtkActor          *ConeActor2;
    00336   vtkPolyDataMapper *ConeMapper2;
    00337   vtkConeSource     *ConeSource2;
    00338
    00339   // the normal line
    00340   vtkActor          *LineActor2;
    00341   vtkPolyDataMapper *LineMapper2;
    00342   vtkLineSource     *LineSource2;
    00343
    00344   // Do the picking
    00345   vtkCellPicker *HandlePicker;
    00346   vtkCellPicker *PlanePicker;
    00347   vtkActor *CurrentHandle;
    00348
    00349   // Methods to manipulate the hexahedron.
    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   // Plane normal, normalized
    00360   float Normal[3];
    00361
    00362   // Transform the hexahedral points (used for rotations)
    00363   vtkTransform *Transform;
    00364
    00365   // Properties used to control the appearance of selected objects and
    00366   // the manipulator in general.
    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&);  //Not implemented
    00377   void operator=(const vtkPlaneWidget&);  //Not implemented
    00378 };
    00379
    00380 #endif