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

Hybrid/vtkPointWidget.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkPointWidget.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 =========================================================================*/
00090 #ifndef __vtkPointWidget_h
00091 #define __vtkPointWidget_h
00092 
00093 #include "vtk3DWidget.h"
00094 #include "vtkCursor3D.h" // Needed for faster access to the Cursor3D
00095 
00096 class vtkActor;
00097 class vtkPolyDataMapper;
00098 class vtkCellPicker;
00099 class vtkPolyData;
00100 class vtkProperty;
00101 
00102 class VTK_HYBRID_EXPORT vtkPointWidget : public vtk3DWidget
00103 {
00104 public:
00106   static vtkPointWidget *New();
00107 
00108   vtkTypeRevisionMacro(vtkPointWidget,vtk3DWidget);
00109   void PrintSelf(ostream& os, vtkIndent indent);
00110 
00112 
00113   virtual void SetEnabled(int);
00114   virtual void PlaceWidget(float bounds[6]);
00115   void PlaceWidget()
00116     {this->Superclass::PlaceWidget();}
00117   void PlaceWidget(float xmin, float xmax, float ymin, float ymax, 
00118                    float zmin, float zmax)
00119     {this->Superclass::PlaceWidget(xmin,xmax,ymin,ymax,zmin,zmax);}
00121 
00124   void GetPolyData(vtkPolyData *pd);
00125   
00127 
00130   void SetPosition(float x, float y, float z)
00131     {this->Cursor3D->SetFocalPoint(x,y,z);}
00132   void SetPosition(float x[3])
00133     {this->SetPosition(x[0],x[1],x[2]);}
00134   float* GetPosition() 
00135     {return this->Cursor3D->GetFocalPoint();}
00136   void GetPosition(float xyz[3]) 
00137     {this->Cursor3D->GetFocalPoint(xyz);}
00139 
00141 
00142   void SetOutline(int o)
00143     {this->Cursor3D->SetOutline(o);}
00144   int GetOutline()
00145     {return this->Cursor3D->GetOutline();}
00146   void OutlineOn()
00147     {this->Cursor3D->OutlineOn();}
00148   void OutlineOff()
00149     {this->Cursor3D->OutlineOff();}
00151 
00153 
00154   void SetXShadows(int o)
00155     {this->Cursor3D->SetXShadows(o);}
00156   int GetXShadows()
00157     {return this->Cursor3D->GetXShadows();}
00158   void XShadowsOn()
00159     {this->Cursor3D->XShadowsOn();}
00160   void XShadowsOff()
00161     {this->Cursor3D->XShadowsOff();}
00163 
00165 
00166   void SetYShadows(int o)
00167     {this->Cursor3D->SetYShadows(o);}
00168   int GetYShadows()
00169     {return this->Cursor3D->GetYShadows();}
00170   void YShadowsOn()
00171     {this->Cursor3D->YShadowsOn();}
00172   void YShadowsOff()
00173     {this->Cursor3D->YShadowsOff();}
00175 
00177 
00178   void SetZShadows(int o)
00179     {this->Cursor3D->SetZShadows(o);}
00180   int GetZShadows()
00181     {return this->Cursor3D->GetZShadows();}
00182   void ZShadowsOn()
00183     {this->Cursor3D->ZShadowsOn();}
00184   void ZShadowsOff()
00185     {this->Cursor3D->ZShadowsOff();}
00187 
00189 
00192   void SetTranslationMode(int mode)
00193     { this->Cursor3D->SetTranslationMode(mode); this->Cursor3D->Update(); }
00194   int GetTranslationMode()
00195     { return this->Cursor3D->GetTranslationMode(); }
00196   void TranslationModeOn()
00197     { this->SetTranslationMode(1); }
00198   void TranslationModeOff()
00199     { this->SetTranslationMode(0); }
00201   
00203 
00204   void AllOn()
00205     {
00206       this->OutlineOn();
00207       this->XShadowsOn();
00208       this->YShadowsOn();
00209       this->ZShadowsOn();
00210     }
00211   void AllOff()
00212     {
00213       this->OutlineOff();
00214       this->XShadowsOff();
00215       this->YShadowsOff();
00216       this->ZShadowsOff();
00217     }
00219 
00221 
00223   vtkGetObjectMacro(Property,vtkProperty);
00224   vtkGetObjectMacro(SelectedProperty,vtkProperty);
00226   
00228 
00232   vtkSetClampMacro(HotSpotSize,float,0.0,1.0);
00233   vtkGetMacro(HotSpotSize,float);
00235   
00236 protected:
00237   vtkPointWidget();
00238   ~vtkPointWidget();
00239 
00240 //BTX - manage the state of the widget
00241   friend class vtkLineWidget;
00242   
00243   int State;
00244   enum WidgetState
00245   {
00246     Start=0,
00247     Moving,
00248     Scaling,
00249     Translating,
00250     Outside
00251   };
00252 //ETX
00253     
00254   // Handles the events
00255   static void ProcessEvents(vtkObject* object, 
00256                             unsigned long event,
00257                             void* clientdata, 
00258                             void* calldata);
00259 
00260   // ProcessEvents() dispatches to these methods.
00261   void OnMouseMove();
00262   void OnLeftButtonDown();
00263   void OnLeftButtonUp();
00264   void OnMiddleButtonDown();
00265   void OnMiddleButtonUp();
00266   void OnRightButtonDown();
00267   void OnRightButtonUp();
00268   
00269   // the cursor3D
00270   vtkActor          *Actor;
00271   vtkPolyDataMapper *Mapper;
00272   vtkCursor3D       *Cursor3D;
00273   void Highlight(int highlight);
00274 
00275   // Do the picking
00276   vtkCellPicker *CursorPicker;
00277   
00278   // Methods to manipulate the cursor
00279   int ConstraintAxis;
00280   void Translate(double *p1, double *p2);
00281   void Scale(double *p1, double *p2, int X, int Y);
00282   void MoveFocus(double *p1, double *p2);
00283   int TranslationMode;
00284 
00285   // Properties used to control the appearance of selected objects and
00286   // the manipulator in general.
00287   vtkProperty *Property;
00288   vtkProperty *SelectedProperty;
00289   void CreateDefaultProperties();
00290   
00291   // The size of the hot spot.
00292   float HotSpotSize;
00293   int DetermineConstraintAxis(int constraint, double *x);
00294   int WaitingForMotion;
00295   int WaitCount;
00296   
00297 private:
00298   vtkPointWidget(const vtkPointWidget&);  //Not implemented
00299   void operator=(const vtkPointWidget&);  //Not implemented
00300 };
00301 
00302 #endif