00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00085 #ifndef __vtkBoxWidget_h
00086 #define __vtkBoxWidget_h
00087
00088 #include "vtk3DWidget.h"
00089
00090 class vtkActor;
00091 class vtkCellPicker;
00092 class vtkPlanes;
00093 class vtkPoints;
00094 class vtkPolyData;
00095 class vtkPolyDataMapper;
00096 class vtkProp;
00097 class vtkProperty;
00098 class vtkSphereSource;
00099 class vtkTransform;
00100
00101 class VTK_HYBRID_EXPORT vtkBoxWidget : public vtk3DWidget
00102 {
00103 public:
00105 static vtkBoxWidget *New();
00106
00107 vtkTypeRevisionMacro(vtkBoxWidget,vtk3DWidget);
00108 void PrintSelf(ostream& os, vtkIndent indent);
00109
00111
00112 virtual void SetEnabled(int);
00113 virtual void PlaceWidget(float bounds[6]);
00114 void PlaceWidget()
00115 {this->Superclass::PlaceWidget();}
00116 void PlaceWidget(float xmin, float xmax, float ymin, float ymax,
00117 float zmin, float zmax)
00118 {this->Superclass::PlaceWidget(xmin,xmax,ymin,ymax,zmin,zmax);}
00120
00121
00128 void GetPlanes(vtkPlanes *planes);
00129
00131
00134 vtkSetMacro(InsideOut,int);
00135 vtkGetMacro(InsideOut,int);
00136 vtkBooleanMacro(InsideOut,int);
00138
00144 void GetTransform(vtkTransform *t);
00145
00154 void GetPolyData(vtkPolyData *pd);
00155
00157
00159 vtkGetObjectMacro(HandleProperty,vtkProperty);
00160 vtkGetObjectMacro(SelectedHandleProperty,vtkProperty);
00162
00164
00166 vtkGetObjectMacro(FaceProperty,vtkProperty);
00167 vtkGetObjectMacro(SelectedFaceProperty,vtkProperty);
00169
00171
00173 vtkGetObjectMacro(OutlineProperty,vtkProperty);
00174 vtkGetObjectMacro(SelectedOutlineProperty,vtkProperty);
00176
00178
00180 vtkSetMacro(OutlineFaceWires,int);
00181 vtkGetMacro(OutlineFaceWires,int);
00182 vtkBooleanMacro(OutlineFaceWires,int);
00184
00186
00189 vtkSetMacro(OutlineCursorWires,int);
00190 vtkGetMacro(OutlineCursorWires,int);
00191 vtkBooleanMacro(OutlineCursorWires,int);
00193
00195
00197 vtkSetMacro(TranslationEnabled,int);
00198 vtkGetMacro(TranslationEnabled,int);
00199 vtkBooleanMacro(TranslationEnabled,int);
00200 vtkSetMacro(ScalingEnabled,int);
00201 vtkGetMacro(ScalingEnabled,int);
00202 vtkBooleanMacro(ScalingEnabled,int);
00203 vtkSetMacro(RotationEnabled,int);
00204 vtkGetMacro(RotationEnabled,int);
00205 vtkBooleanMacro(RotationEnabled,int);
00207
00208 protected:
00209 vtkBoxWidget();
00210 ~vtkBoxWidget();
00211
00212
00213 int State;
00214 enum WidgetState
00215 {
00216 Start=0,
00217 Moving,
00218 Scaling,
00219 Outside
00220 };
00221
00222
00223
00224 static void ProcessEvents(vtkObject* object,
00225 unsigned long event,
00226 void* clientdata,
00227 void* calldata);
00228
00229
00230 void OnMouseMove();
00231 void OnLeftButtonDown();
00232 void OnLeftButtonUp();
00233 void OnMiddleButtonDown();
00234 void OnMiddleButtonUp();
00235 void OnRightButtonDown();
00236 void OnRightButtonUp();
00237
00238
00239 vtkActor *HexActor;
00240 vtkPolyDataMapper *HexMapper;
00241 vtkPolyData *HexPolyData;
00242 vtkPoints *Points;
00243 double N[6][3];
00244
00245
00246 vtkActor *HexFace;
00247 vtkPolyDataMapper *HexFaceMapper;
00248 vtkPolyData *HexFacePolyData;
00249
00250
00251 vtkActor **Handle;
00252 vtkPolyDataMapper **HandleMapper;
00253 vtkSphereSource **HandleGeometry;
00254 void PositionHandles();
00255 void HandlesOn(double length);
00256 void HandlesOff();
00257 int HighlightHandle(vtkProp *prop);
00258 void HighlightFace(int cellId);
00259 void HighlightOutline(int highlight);
00260 void ComputeNormals();
00261 virtual void SizeHandles();
00262
00263
00264 vtkActor *HexOutline;
00265 vtkPolyDataMapper *OutlineMapper;
00266 vtkPolyData *OutlinePolyData;
00267
00268
00269 vtkCellPicker *HandlePicker;
00270 vtkCellPicker *HexPicker;
00271 vtkActor *CurrentHandle;
00272 int CurrentHexFace;
00273
00274
00275 void Translate(double *p1, double *p2);
00276 void Scale(double *p1, double *p2, int X, int Y);
00277 void Rotate(int X, int Y, double *p1, double *p2, double *vpn);
00278 void MovePlusXFace(double *p1, double *p2);
00279 void MoveMinusXFace(double *p1, double *p2);
00280 void MovePlusYFace(double *p1, double *p2);
00281 void MoveMinusYFace(double *p1, double *p2);
00282 void MovePlusZFace(double *p1, double *p2);
00283 void MoveMinusZFace(double *p1, double *p2);
00284
00285 void MoveFace(double *p1, double *p2, double *h1, double *h2,
00286 double *x1, double *x2, double *x3, double *x4,
00287 double *x5);
00288
00289
00290 vtkTransform *Transform;
00291
00292
00293
00294 vtkProperty *HandleProperty;
00295 vtkProperty *SelectedHandleProperty;
00296 vtkProperty *FaceProperty;
00297 vtkProperty *SelectedFaceProperty;
00298 vtkProperty *OutlineProperty;
00299 vtkProperty *SelectedOutlineProperty;
00300 void CreateDefaultProperties();
00301
00302
00303 int InsideOut;
00304 int OutlineFaceWires;
00305 int OutlineCursorWires;
00306 void GenerateOutline();
00307
00308
00309 int TranslationEnabled;
00310 int ScalingEnabled;
00311 int RotationEnabled;
00312
00313 private:
00314 vtkBoxWidget(const vtkBoxWidget&);
00315 void operator=(const vtkBoxWidget&);
00316 };
00317
00318 #endif